Невозможно запустить запрос Access через соединение ADODB в Excel

#excel #vba #ms-access #ado

#excel #vba #ms-access #ado

Вопрос:

Я пытаюсь вставить результаты запроса access на лист в Excel.

Когда я запускаю следующий код, ничего не происходит. Никаких ошибок или предупреждений, просто ничего не вставляется. Однако, когда я запускаю тот же код, но использую таблицу вместо имени запроса, он успешно извлекает таблицу. Но когда я заменяю его именем запроса, он ничего не возвращает.

В прошлом я делал то же самое, но вместо вызова имени запроса я сохранял SQL-запрос в виде строки в макросе и вызывал запрос, ссылаясь на строку. Я пробовал это, и в этом случае это не сработало.

Запрос, который я пытаюсь извлечь, ссылается на другие запросы в виде таблиц, и я думаю, именно поэтому у меня возникают проблемы. Как я уже сказал, я много раз извлекал данные из Access с помощью этого кода, но смог сделать это только тогда, когда я ссылаюсь только на таблицы, а не на запросы.

 Dim Con As ADODB.Connection
Set Con = New ADODB.Connection

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

Dim iCols As Integer

Set Con = New ADODB.Connection

With Con
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open AccessDBPath
End With

Set rs = New ADODB.Recordset
rs.Open "query1", Con

Sheets("NAHV").Range("E2").CopyFromRecordset rs
  

Я попытался заменить rs.Откройте строку с командой Execute:

 Set rs = Con.Execute("query1")
  

и это также не сработало.

Я также попытался заменить полный блок на

 Dim cn As Object, rs As Object
Dim myFile As String: myFile = AccessDBPath
Set cn = CreateObject("ADODB.Connection")
With cn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = "Data Source=" amp; myFile amp; ";"
    .Open
End With
Set rs = cn.Execute("query1")

Sheets("NAHV").Range("E2").CopyFromRecordset rs
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
  

и это тоже не сработало.

Комментарии:

1. Возвращает ли запрос какие-либо данные в самом Access?

2. Да, он запускается без проблем с доступом и возвращает данные.

3. Хорошо, тогда я сожалею, что не знаю. Я протестировал ваш первый код, и у меня все работает нормально. Я тестировал с запросом, который содержит две таблицы.

4. Чтобы уточнить, проблема не в том, что запрос содержит более одной таблицы. Проблема (я думаю) в том, что запрос содержит другие запросы.

5. Пожалуйста, покажите содержимое query1 . Я не могу воспроизвести ваши результаты ни с помощью методов code block, используя сохраненный запрос, ссылающийся на другие запросы.