Проблема с подключением к объекту ODBC. Открытое ограничение до 65 000 строк. - PullRequest
2 голосов
/ 03 мая 2019

Новое в программировании, SQL и VBA.Я часто работаю с таблицами данных приличного размера и думал, что было бы полезно добавить возможность выполнения SQL-запросов для применения к существующей таблице Excel.Исследования привели меня к соединениям ADODB и обнаружили здесь отличный базовый фрагмент: https://blog.learningtree.com/excel-as-a-database-how-to-query-economic-data-with-sql/

Кажется, я сталкиваюсь с ограничениями на количество доступных строк до запуска следующей строки кода.В моем источнике оператора SQL я могу вернуть 65 тысяч строк, больше при определении размера исходной таблицы, и я получаю ошибку Object is not Существует.Можете ли вы запустить ADODB recordset.Open асинхронно, чтобы обеспечить полный возврат объекта?- Любая помощь будет очень высоко ценится.Спасибо!

попытался вставить WAIT inline: rs.Open strSQL, Application.Wait (Now + TimeValue("0:00:30")), cn, но ошибки все равно отсутствуют.См. Код ниже

Sub ExcelTbl_SQL()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset

    strFile = ThisWorkbook.FullName
    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
                & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    cn.Open strCon

    strSQL = "SELECT * FROM [Sheet1$A1:AI146103] WHERE GROUP = 'HIX'"

    rs.Open strSQL, cn

    Dim ws As Worksheet

    Set ws = Application.Sheets.Add    
    ws.Range("A1").CopyFromRecordset rs

    rs.Close    
    cn.Close
    'Debug.Print rs.GetString    
End Sub

Вот результаты, которые я получаю:

  • Работы: strSQL = "SELECT * FROM [Sheet1$A1:AI65000] WHERE GROUP = 'HIX'"

  • Ошибка: strSQL = "SELECT * FROM [Sheet1$A1:AI65437] WHERE GROUP = 'HIX'"

Ошибка времени выполнения '-2147217865 (80040e37)': ядру базы данных Microsoft Access не удалось найти объект «Лист1 $ A1: AI65437».

1 Ответ

1 голос
/ 03 мая 2019

Я думаю, это потому, что вы вызываете библиотеку старой версии через эту часть строки подключения:

Provider=Microsoft.ACE.OLEDB.12.0

Вы должны попробовать

Provider=Microsoft.ACE.OLEDB.16.0

Upd: Ответ был здесь Excel как база данных - запросить более 65536 строк? интересно. Вы не можете упомянуть строки, или вы получите ошибку.

...