Gary Heath Ответов: 1

Почему этот набор записей SQL не открывается в outlook VBA ? ! ?


Я использую аналогичный код в других областях моей программы, Моя база данных, кажется, работает нормально, строка SQL работает нормально в Management Studio, но каждый раз, когда я добираюсь до этой точки, программа выходит из рутины, она просто переходит к концу Sub, как только попадает в нее .Открытая линия ... Если есть проблема с базой данных, то наверняка я должен получить ошибку при проверке состояния (которое возвращает 0) ?!?


Sub LoopDatabaseLeague()

On Error GoTo LoopDatabaseLeagueError

SQLstr = "SELECT Name, LeagueType_ID From League Where League.[LeagueType_ID] = '2';"

myEmailFolder = ""

Set KA_RS_League = New ADODB.Recordset

If KA_RS_League.State = adStateOpen Then KA_RS_League.Close <<< State = 0

KA_RS_League.Open SQLstr, KA_DB, adOpenDynamic, adLockOptimistic <<< This line skips to the end

Do Until KA_RS_League.EOF
    KA_Which_Newsletter.ComboBox1.AddItem (KA_RS_League![Name])
    If FindString(mySubject, KA_RS_League![Name]) Then
        myEmailFolder = KA_RS_League![Name]
    End If
    KA_RS_League.MoveNext
Loop
    
KA_RS_League.Close

LoopDatabaseLeagueError:

End Sub


Что я уже пробовал:

Другой код, поискал в интернете, искал коды ошибок

CHill60

Вы "проглатываете" ошибку, имея пустой обработчик ошибок-это очень плохая практика. Прокомментируйте On Error GoTo LoopDatabaseLeagueError, запустите код и скажите нам, в чем на самом деле заключается ошибка

Gary Heath

Это имеет очень мало значения, вместо того, чтобы следующий оператор был конечным Sub, это строка, следующая за вызовом этого модуля :-(

Нет ли где-нибудь переменной, которая содержит результат оператора ? Если да, то что / где я могу его найти ?!?

CHill60

Это имеет огромное значение. Избавившись от on error goto, вы получите видимое исключение, которое поможет вам выяснить, в чем проблема. У вас есть "понятия не имею, почему программа не может просто сказать мне это !!!"... Он не говорит вам этого, потому что вы сказали программе ничего не говорить вам о каких-либо ошибках.

Gary Heath

Я попробовал Goto 0 & Goto Next, но он мне ничего не сказал, я имел в виду, что если нет подключения к базе данных, где я создаю набор записей, то почему он не сообщает об этом ни в одном из вариантов Goto ?!?

CHill60

Обратите внимание на ссылку ответа рядом с комментариями? Если вы используете эту ссылку, то плакат будет уведомлен о вашем ответе. Другими словами, я мог бы оказать вам дополнительную помощь еще 4 часа назад

Gary Heath

Ах да, он появляется только тогда, когда мой курсор находится над ним, так что я его не заметил !! Постараюсь запомнить в будущем ...

1 Ответов

Рейтинг:
9

Gary Heath

Я терял связь с базой данных где-то на линии, понятия не имея, почему и почему программа не может просто сказать мне это !!!

В любом случае, теперь все решено, спасибо за вашу помощь ...


Richard MacCutchan

Он сказал бы вам, если бы вы не решили игнорировать ошибки в своей программе.

CHill60

Виртуальная 5 для этого комментария :-)

Richard MacCutchan

Я часто задаюсь вопросом,сколько реально выпущенных бизнес-приложений работает по всему миру с такой ерундой.

Gary Heath

Как я уже сказал CHill60, Ричард, я попробовал Goto 0 & Goto Next, он просто выпал из рутины, и набор записей был закрыт / не существовал в моей логике ... это было потому, что соединение с базой данных, очевидно, где-то сбрасывалось, но я не знаю где. Теперь я закрыл его в конце предыдущего модуля и снова подключился в начале этого модуля, и это работает нормально.

Чего я не понимаю, так это почему программа будет обрабатывать строки ...

Set KA_RS_League = новый набор записей ADODB.Recordset
Если KA_RS_League.State = adStateOpen, затем KA_RS_League.Закрывать

.. без подключения, независимо от Goto, который я использовал, я не получал никакого сообщения об ошибке или кода, просто сообщение "вне контекста" в часах.

Все еще все улажено, ура :-)