在Excel上导入SQLight数据库

时间:2018-06-06 07:47:20

标签: sql excel vba

我正在尝试使用vba将数据从SQLight数据库导入EXCEL,这是我的代码:

Sub Importer_Contrat()
    Dim conn As Object, rst As Object
    Dim strSQL As String, table_name As String

    Set conn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")

    ' OPEN CONNECTION
    conn.Open "DRIVER=SQLite3 ODBC Driver;Database=" & Chemin_BDD & BDD2 & ";"

    strSQL = "SELECT * FROM " & Contract_Table

    ' OPEN RECORDSET]
    rst.Open strSQL, conn

    ' OUTPUT TO WORKSHEET
    sh_test_sql.Range("test_paste").CopyFromRecordset rst
    rst.Close
End Sub

我的数据库只有3列(时间为Integer,Nom为Text,日期为Integer

当我请求一个Integer时,vba工作正常,但每次要求它从Name Name导入数据时,它是Text而不是Integer,它不起作用。

使用上面的代码我只收到Integer中的第一个colron Chrono。

如果我使用这段代码,那也很奇怪:

strSQL = "SELECT * FROM " & Contract_Table

' OPEN RECORDSET]
rst.Open strSQL, conn

Do While Not rst.EOF
    MsgBox rst(1)
    rst.MoveNext
Loop

我可以看到我要导入的文本,但它不适用于recorset。你知道问题的来源吗?我需要在我的Excel工作表上粘贴一个大表,我现在一直在寻找答案。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

看起来,虽然数据存在于记录集中,但CopyFromRecordset方法无效。由于我对其他数据源使用此方法相当多,我认为ODBC驱动程序存在问题。

有许多方法可以从记录集中读取数据。您可以手动循环,也可以使用GetRows方法构建二维数组。这个二维数组的作为第一个索引而作为第二个,两个维度都是从0开始的。

以下代码使用此方法并将数据写入工作表 - 仅交换行和列。我使用Worksheetfunction.Transpose进行了测试以更改此设置,但遇到了运行时错误Type mismatch

Dim myData
myData = rst.GetRows

Dim r As Range
With ThisWorkbook.Sheets(1)
    Set r = .Range(.Cells(1, 1), .Cells(UBound(x, 1) + 1, UBound(x, 2) + 1))        
    r.Value = x
End With

答案 1 :(得分:0)

感谢您的回答。我还认为ODBC驱动程序和函数CopyFromRecordset存在问题。我已经解决了我的问题,在sql数据库的每个值上循环,并在我的Excel中粘贴了一个数组:

ReDim Contract_Array(nb_row - 1, Nb_col_DB_Contracts - 1)
For row_runner = 0 To nb_row - 1
    For col_runner = 0 To Nb_col_DB_Contracts - 1 
        Contract_Array(row_runner, col_runner) = rst(col_runner)
    Next col_runner
    rst.MoveNext
Next row_runner

sh_test_sql.Range("A1:G2").Value = Contract_Array

感谢您的帮助!