在Excel中访问VBA中的SQLite数据库
问题描述:
我一直在向VBA中添加MS Access数据库,以便对船舶进行一些分析。然而数据库现在已经变成了SQlite,我不知道如何从VBA访问。我已经尝试过使用GitHub的SQLiteForExcel,但我不明白它是如何工作的,即使是例子。我对访问Access数据库的代码如下:(该DB_PATH是超链接到我的Access数据库)在Excel中访问VBA中的SQLite数据库
Sub query_db()
On Error GoTo Errorhandler
Dim v_db As DAO.Database
Dim rst As DAO.Recordset
Dim vessels_db As Variant
Dim strSQL As String
Dim i As Long
Dim ws As Worksheet
Set ws = Worksheets("results")
ws.Select
vessels_db = [db_path]
Set v_db = OpenDatabase(vessels_db)
Worksheets("results").Select
[x_0].Select
Range(Selection, Selection.Offset(40000, 1)).ClearContents
strSQL = " SELECT Vessels.vsl_name, Vessels.dwt FROM Vessels " & _
" GROUP BY Vessels.vsl_name, Vessels.dwt ORDER BY Vessels.vsl_name ; "
Set rst = v_db.OpenRecordset(strSQL)
...
有没有人有任何想法我怎么能使用SQLiteForExcel这样我就可以访问SQLite数据库更改此代码。
提前感谢
答
的MS Access的默认引擎,喷气/ ACE和SQLite共享相同的质量,他们是文件级的数据库,其中数据库文件驻留在目录中的磁盘级别,而不是服务器级别数据库(SQL Server,Oracle,MySQL,Postgres)。
要在后端数据库之间流畅交换,请考虑使用ADO在Excel中连接数据库。现在你使用DAO,它是MS Access的默认连接层。
您需要的第一件事是下载一个SQLite ODBC Driver,一个与您的版本(最有可能的SQLite 3)和您的Windows位级别(32/64位)相匹配的。作为比较,您的机器很可能已经安装了MS Access ODBC驱动程序。一旦完成,只需设置您的连接字符串:
SQLite的
Dim conn As Object, rst As Object
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
' OPEN CONNECTION
conn.Open "DRIVER=SQLite3 ODBC Driver;Database=C:\Path\To\SQLite\Database.db;"
strSQL = "SELECT Vessels.vsl_name, Vessels.dwt FROM Vessels " & _
" GROUP BY Vessels.vsl_name, Vessels.dwt ORDER BY Vessels.vsl_name ; "
' OPEN RECORDSET
rst.Open strSQL, conn
' OUTPUT TO WORKSHEET
Worksheets("results").Range("A1").CopyFromRecordset rst
rst.Close
' FREE RESOURCES
Set rst = Nothing: Set conn = Nothing
的MS Access
,作为比较对象,使用ADO你可以简单地切换连接字符串引用的ODBC驱动程序针对不同的数据库后端。像上面的通知,数据库源是一个目录路径:
Dim conn As Object, rst As Object
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
' OPEN CONNECTION
conn.Open "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Path\To\Access\DB.accdb;"
strSQL = "SELECT Vessels.vsl_name, Vessels.dwt FROM Vessels " & _
" GROUP BY Vessels.vsl_name, Vessels.dwt ORDER BY Vessels.vsl_name ; "
' OPEN RECORDSET
rst.Open strSQL, conn
' OUTPUT TO WORKSHEET
Worksheets("results").Range("A1").CopyFromRecordset rst
rst.Close
' FREE RESOURCES
Set rst = Nothing: Set conn = Nothing
我想将其转换为ADO - 有【事例这里(http://stackoverflow.com/documentation/vba/3578/working-with -ado)。你可以在这里找到SQLite连接字符串(https://www.connectionstrings.com/sqlite/)。 – Comintern