powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / QueryTable refresh 1004
2 сообщений из 2, страница 1 из 1
QueryTable refresh 1004
    #34784558
nvadia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Недавно столкнулся с проблемой возникающей при выводе данных на лист Excel с использованием ADODB и QueryTable:

сразу после инициализации всех объектов метод QueryTable.Refresh работает только 1 раз
при повторном вызове возникает Run-time error 1004: Application-defined or object-defined error

Справиться с ситуацией мне не помогли ни закрытие-открытие рекордсета и Connection ни изменения разных параметров рекордсета, Connection или QueryTable.

Хочу поделиться найденным решением:

необходимо и достаточно перед повторным Refresh обновить значение свойства QueryTable.RecordSet

Подойдет даже такое:

Код: plaintext
1.
2.
	set Qt.Recordset = Qt.Recordset
	Qt.Refresh

хотелось бы знать что при этом происходит...

Вот рабочий пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Sub DataRetrive()
    Dim Cn      As ADODB.Connection
    Dim Qt      As QueryTable
    Dim Rs      As ADODB.Recordset
    Dim StartRn As Range
    
    Set StartRn = ThisWorkbook.Worksheets("Примечания").Range("A7")
    On Error Resume Next
    Set Qt = StartRn.QueryTable
    Set Rs = Qt.Recordset
    Set Cn = Rs.ActiveConnection
    On Error GoTo  0 
    If Cn Is Nothing Then Set Cn = New ADODB.Connection
    If Rs Is Nothing Then Set Rs = New ADODB.Recordset
    If Cn.State = adStateClosed Then Cn.Open "Provider=sqloledb;Data Source=Zeon;Initial Catalog=Synthetic", "SyntheticMaster", "nosmoking"
    If Rs.State = adStateClosed Then
        Rs.Open "notes", Cn, adOpenForwardOnly, adLockReadOnly, adCmdTable
    Else
        Rs.Requery
    End If
    If Qt Is Nothing Then
        Set Qt = StartRn.Worksheet.QueryTables.Add(Rs, StartRn)
    Else
        Set Qt.Recordset = Rs
    End If
    Qt.Refresh
End Sub

обратите внимание на Rs.Requery. Проверено с помощью SQL Profiler, Qt.Refresh не обращается к серверу. Возможно из-за типа рекордсета
...
Рейтинг: 0 / 0
QueryTable refresh 1004
    #34785386
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nvadiaНедавно столкнулся с проблемой возникающей при выводе данных на лист Excel с использованием ADODB и QueryTable:Вот в этом и есть твоя ошибка. Либо ADO, либо QueryTable. Никогда не смешивай их!
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / QueryTable refresh 1004
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]