vb+SQLite学习记录

参照学习:

http://www.sqlite.org/sqlite.html

http://hi.baidu.com/jt09/blog/item/35f557ae27245cc77dd92aae.html

文章1(还没有来得及测试)

编程前要先注册一下sqlite,使用的是litex的编译版本,是sqlite3.5.7的版本

regsvr32 sqlite3.dll

随便是建一个bat文件运行,还是直接在开始菜单运行都可以

压缩文件包中有自动注册bat文件,sqlite3.dll,测试数据库,litex开发文档(英文)

新建表

Dim odb As Object

Set odb = CreateObject("LiteX.LiteConnection")

odb.open (App.Path & "\test.db") '一开始直接建一个空白文件就可以用了

sql = "create table tab01(name text,nl integar)" 'sqlite数据库其实可以不用定义,但是为了以后的转移或者说明,定义下比较方便

odb.execute(sql)

odb.close

插入数据

Dim odb As Object

Set odb = CreateObject("LiteX.LiteConnection")

odb.open (App.Path & "\test.db")

sql = "insert into tab01 values('chen',5)"

odb.execute(sql)

odb.close

查询

Dim odb As Object

Set odb = CreateObject("LiteX.LiteConnection")

odb.open (App.Path & "\test.db")

Dim odb1 As Object

Set odb1 = CreateObject("LiteX.LiteStatement")

odb1.ActiveConnection = odb

label1=""

sql = "select * from tab01"

odb1.prepare (sql)

For Each row In odb1.rows '用.rows属性取出预查询的数据,插入到label1里面

Label1 = Label1 & row(0) & " " & row(1) & vbCrLf '在这个其中row实际上为一个数组,下标从0开始

Next

odb1.close

odb.close

'文档上说odb1这个状态变量可以直接用odb的prepare方法直接创建,但是我试了下,不知道为什么报错,所以改成手工定义,都一样,就是麻烦点

'本来不知道应该怎么定义row这个变量,在说明文档上被称为LiteX.LiteRow。后来试了下,可以定义为Variant,使用过程中没问题。

'本来想在程序中动态加载dll文件,也在网上找到动态加载的代码,但是不知道为什么报错,所以直接改成提前注册了

文章2(测试没有搞定,还需要继续努力研究)

vb6.0操作SQLite数据库之一(动态加载sqlite3.dll)

http://hi.baidu.com/gantianamin2001/blog/item/d8bf952aba2eb99f033bf6d6.html

一种比较良好的操作方式是在程序中加载sqlite3.dll,然后操作数据库。使用的是litex提供的sqlite3.dll。

这样做的好处?那是显而易见的,因为程序动态的加载dll比注册dll更方便。我们所要体现的中心思想始终是最简单化的用户操作。而且就我个人而言,系统中注册了大量的dll本身也觉得缺少美感,如果系统重装那就什么都没了。不是吗?

然后我们需要的仅仅是使用LoadLibrary去加载一下。

使用LoadLibrary,我们必须先预定义LoadLibrary的方法,他是Windows API的一部分,需要进行预定义。

Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long

然后就很简单了。

Dim lb As Long

lb = LoadLibrary(App.Path & "\sqlite3.dll")

Dim oDB As Object

Set oDB = CreateObject("LiteX.LiteConnection")

TextSQLiteVersion.Text = oDB.Version

oDB.open (App.Path & "\test.db")

oDB.Execute ("insert into testtable values(2, 'laoma', 20)")

TextSQLiteChanges.Text = oDB.changes

TextSQLitePath.Text = oDB.Path

oDB.Close