在Excel中访问VBA中的SQLite数据库

在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数据库更改此代码。

提前感谢

+0

我想将其转换为ADO - 有【事例这里(http://*.com/documentation/vba/3578/working-with -ado)。你可以在这里找到SQLite连接字符串(https://www.connectionstrings.com/sqlite/)。 – Comintern

的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