我正在尝试使用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工作表上粘贴一个大表,我现在一直在寻找答案。
提前谢谢!
答案 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
感谢您的帮助!