Импорт базы данных SQLight в Excel - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь импортировать данные из базы данных SQLight в EXCEL с помощью vba, и вот мой код:

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, ном.Text и Дата Integer)

VBA работает хорошо, когда я запрашиваю Integer, но каждый раз, когда его просят импортировать данные из столбца Name, который является Text, а не Integer, он не работает.

С кодом выше я просто получаю первый столбец Chrono в Integer.

Что также очень странно, так это то, что если я использую этот код:

strSQL = "SELECT * FROM " & Contract_Table

' OPEN RECORDSET]
rst.Open strSQL, conn

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

, я вижу текст, который хочу импортировать, но он не работает с набором записей.Вы знаете, откуда возникла проблема?Мне нужно вставить большую таблицу на лист Excel, и я уже несколько дней ищу ответ.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Спасибо за ваш ответ.Я также думаю, что есть проблема с драйвером 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

Спасибо за вашу помощь!

0 голосов
/ 06 июня 2018

Кажется, что, хотя данные присутствуют в наборе записей, метод 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...