powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не срабатывает обработчик ошибок On Error Resume Next в макросе, где SQL-запрос
4 сообщений из 4, страница 1 из 1
Не срабатывает обработчик ошибок On Error Resume Next в макросе, где SQL-запрос
    #36207466
tolikt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Макросом на лист Excel получаю данные запросом из dbf-файла.
Ищутся совпадения определённого ИНН в поле code_pr, в котором этот ИНН обычно внесён в виде 7777777777/777001001
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
    Dim DirPath As String
    Dim Data As Variant

    Dim cnn As ADODB.Connection
    Dim strCnnString As String
    Dim rst As ADODB.Recordset
    Dim sqlString As String
    
    DirPath = "D:\MyBases\Base09"
        
    Set cnn = New ADODB.Connection
    ' Строка подключения ODBC.
    ' Можно использовать драйвер подключения либо dBASE, либо Visual FoxPro
    strCnnString = "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & DirPath & ";"
    strCnnString = "Driver={Microsoft Visual FoxPro Driver};DriverID=277;UID=;PWD=;" & _
    "SourceDB=" & DirPath & ";SourceType=DBF;Exclusive=Yes;" & _
    "BackgroundFetch=Yes;Collate=RUSSIAN;Null=Yes;Deleted=Yes;" 'Machine
    
    cnn.Open strCnnString
    ' Используем метод Execute для создания набора записей.
    Set rst = New ADODB.Recordset
    rst.CursorLocation = adUseClient

    sqlString = "SELECT code " & _
    "FROM partner " & _
    "WHERE code_pr LIKE '7777777777%'"
    
    Set rst = cnn.Execute(sqlString)

Err.Clear
On Error Resume Next
    Data = rst.GetRows    ' ЗДЕСЬ ПРОИСХОДИТ ОСТАНОВ с ошибкой 3021
If Err.Number =  3021  Then
On Error GoTo  0 
ReDim Data( 5 ,  0 )
Err.Clear
End If

Если данный ИНН есть в dbf-файле, то всё ОК. Но если данного ИНН нет, то происходит остановка макроса на строке с rst.GetRows. Хотя перед ней стоит оператор On Error Resume Next. И ошибка как раз имеет номер 3021, т.е. та, которая должна обрабатываться.

В чём тут грабли?
...
Рейтинг: 0 / 0
Не срабатывает обработчик ошибок On Error Resume Next в макросе, где SQL-запрос
    #36207640
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может лучше проверять сам рекордсет
Код: plaintext
If rst.EOF
?

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Не срабатывает обработчик ошибок On Error Resume Next в макросе, где SQL-запрос
    #36207781
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если вместо
On Error Resume Next
пересылать на
If Err.Number = 3021 Then?

типа
On Error GoTo Errh:

Errh:
If Err.Number = 3021
Не будет работать?
...
Рейтинг: 0 / 0
Не срабатывает обработчик ошибок On Error Resume Next в макросе, где SQL-запрос
    #36207973
tolikt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вариант, предложенный PlanB, проверил ещё до создания темы - не работает.
Помогло предложение HandKot.
Так и сделал, спасибо.

ЗЫ. Лобовой вариант без запроса, а именно: открыть в Excel сам файл partner.dbf, через Find найти нужные записи, закрыть partner.dbf, как оказалось, в моём случае работает ничуть не медленнее, чем через запрос :-). Т.е. цикл около 500 раз с поиском в partner.dbf, состоящем из примерно 5000 записей.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не срабатывает обработчик ошибок On Error Resume Next в макросе, где SQL-запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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