领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

ExcelVBA:创建SQLite数据库,以及CRUD基本操作函数(1/2)

nixiaole 2025-05-09 20:52:45 知识剖析 2 ℃

以往,都是使用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
最近发表
标签列表