2017-02-28 10 views
1

Ich habe eine MS Access-Datenbank zu VBA hinzugefügt, um einige Analysen von Schiffen durchzuführen. Allerdings hat sich die Datenbank jetzt in SQlite geändert, von dem ich keine Ahnung habe, wie ich von VBA aus zugreifen kann. Ich habe versucht, GitHub's SQLiteForExcel zu verwenden, aber ich verstehe nicht, wie es funktioniert, auch mit den Beispielen. Der Code, den ich für den Zugriff auf die Access-Datenbank haben, ist unter: (die DB_PATH der Verweis auf die entsprechende Access-Datenbank ist)Zugriff auf eine SQLite-Datenbank in VBA in Excel

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) 
... 

jemand eine Idee Hat, wie ich diesen Code ändern kann mit SQLiteForExcel so kann ich die SQLite-Datenbank zugreifen .

Vielen Dank im Voraus

+0

ich konvertieren würde es ADO - es gibt [Beispiele hier] (http://stackoverflow.com/documentation/vba/3578/working-with -ado). Sie finden SQLite-Verbindungszeichenfolgen [hier] (https://www.connectionstrings.com/sqlite/). – Comintern

Antwort

7

MS Access' Standard-Engine, Jet/ACE und SQLite teilen sich die gleiche Qualität, dass sie auf Dateiebene Datenbanken sind, wo die Datenbankdateien auf Datenträgerebene befinden sich in Verzeichnissen auf Serverebene im Gegensatz Datenbanken (SQL Server, Oracle, MySQL, Postgres).

Zum reibungslosen Austausch zwischen Back-End-Datenbanken sollten Sie die Verbindung von Datenbanken in Excel mit ADO in Erwägung ziehen. Im Moment verwenden Sie DAO, die Standardverbindungsebene für MS Access.

Das erste, was Sie benötigen, ist ein SQLite ODBC Driver herunterladen, eine, die Ihre Version (SQLite 3 höchstwahrscheinlich) und Ihre Windows-Bit-Ebene (32/64 Bit) entspricht. Zum Vergleich: Ihr Rechner hat höchstwahrscheinlich bereits einen MS Access ODBC-Treiber installiert. Ist das erledigt, einfach Ihre Verbindungszeichenfolge ein:

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

Als Vergleich mit ADO können Sie einfach nur Verbindungszeichenfolgen Referenzierung der ODBC-Treiber-Schalter für verschiedene Datenbank-Backends. Beachten Sie wie oben, ist die Datenbankquelle ein Verzeichnispfad:

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