以往,都是使用access作为数据库,但随着数据量的增加,有两个不足:
1、速度慢,查询数据需要约2秒钟的等待。
2、容量小,主要是潜在担忧。
所以,改用同为文件型数据库的SQLite,在保持灵活性的同时,速度、容量的问题已经基本解决,可以满足亿条这样量级的基本操作。
使用时,需要提前安装SQLite ODBC驱动。
安装成功后:
相关Sub、Function如下:
1、动态创建数据库文件
Sub CreateSQLiteDatabaseWithTwoTables(strFileName As String)
Dim conn As Object
Dim connStr As String
Dim createTable1SQL As String
Dim createTable2SQL As String
' 创建连接对象
Set conn = CreateObject("ADODB.Connection")
' 设置连接字符串
connStr = "DRIVER=SQLite3 ODBC Driver;Database=" & strFileName & ";"
' 打开连接
conn.Open connStr
' 创建表1 SQL语句
createTable1SQL = "CREATE TABLE 数据表 (" & _
"ID INTEGER PRIMARY KEY AUTOINCREMENT," & _
"单位名称 TEXT NOT NULL," & _
"指标名称 TEXT," & _
"数值 DOUBLE);"
' 执行创建表1操作
conn.Execute createTable1SQL
' 创建表2 SQL语句
createTable2SQL = "CREATE TABLE 数据表2 (" & _
"ID INTEGER PRIMARY KEY AUTOINCREMENT," & _
"单位名称 TEXT NOT NULL," & _
"指标名称 TEXT," & _
"数值 DOUBLE);"
' 执行创建表2操作
conn.Execute createTable2SQL
' 关闭连接
conn.Close
Set conn = Nothing
MsgBox "指定的数据库和表,已创建成功!"
End Sub
2、获取数据库连接
Function GetSQLiteConnection(strFileName As String) As Object
Dim conn As Object
Dim connStr As String
' 检查文件是否存在
If Dir(strFileName) = "" Then
' 文件不存在,创建数据库和表
CreateSQLiteDatabaseWithTwoTables strFileName
End If
' 创建连接对象
Set conn = CreateObject("ADODB.Connection")
' 设置连接字符串
connStr = "DRIVER=SQLite3 ODBC Driver;Database=" & strFileName & ";"
' 打开连接
conn.Open connStr
' 返回连接对象
Set GetSQLiteConnection = conn
End Function
3、获取记录集
Function GetSQLiteRecordset(conn As Object, strSQL As String) As Object
Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")
' 打开Recordset
rs.Open strSQL, conn, adOpenStatic, adLockReadOnly
' 返回Recordset对象
Set GetSQLiteRecordset = rs
End Function
4、SQL执行程序
Sub RunSQLiteSQL(conn As Object, strSQL As String)
Dim cmd As Object
Set cmd = CreateObject("ADODB.Command")
' 设置命令对象的连接
cmd.ActiveConnection = conn
' 设置SQL命令文本
cmd.CommandText = strSQL
' 执行SQL命令
cmd.Execute
' 清理资源
Set cmd = Nothing
End Sub
在系列数据操作后,可以检测一下:
Sub TryIt()
Dim conn As Object
Dim rs As Object
Dim strFileName As String
Dim strSQL As String
' SQLite数据库文件路径
strFileName = "D:\Temp.sqlite"
' 获取连接对象
Set conn = GetSQLiteConnection(strFileName)
' SQL查询字符串
strSQL = "SELECT * FROM 数据表"
' 获取Recordset对象
Set rs = GetSQLiteRecordset(conn, strSQL)
' 遍历Recordset对象并打印结果
Do While Not rs.EOF
Debug.Print rs.Fields("ID").value & ", " & rs.Fields("单位名称").value
rs.MoveNext
Loop
' 关闭Recordset和连接
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub