VB6 ADODB.Connection Execute() Повторить до успешного

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

Вместо простого сбоя и отображения пары сообщений об ошибках я хотел бы попытаться восстановить соединение и выполнить запрос до успешного завершения (я понимаю, что это, вероятно, неправильное использование ресурсов), но даже тогда я пытаюсь выполнить здесь. Или, если возможно, отобразить окно сообщения о том, что соединение было потеряно, которое затем будет закрыто после установления соединения.

Любые предложения будут ценны.

Public connMain As ADODB.Connection
Public rsMain As ADODB.Recordset 

......

Function Picture_Exists() As Boolean
On Error Resume Next 
sqlstr = "select * .... "
Set rsMain = connMain.Execute(sqlstr)

2 ответа

Ваше соединение, вероятно, сбрасывается в конце базы данных из-за неиспользования. Не рекомендуется поддерживать соединение, когда оно не используется; соединения дороги с точки зрения ресурсов, поэтому любая такая практика не будет хорошо масштабироваться. Dbadmins, скорее всего, не оставит неиспользованными соединения открытыми очень долго.

Ваше потенциальное решение говорит, чтобы попытаться подключиться, и если вы не можете игнорировать ошибку. Мы не говорим "никогда" в этом бизнесе очень часто, но вы никогда не должны использовать "On Error Resume Next" без оценки Err.Number, чтобы увидеть, равно ли оно 0 (если это так, ошибки нет). Это называется "встроенной обработкой ошибок".

В любом случае я бы не стал использовать этот метод. Я бы оценил свойство State объекта Connection, и если он будет закрыт (cn.State = adoStateClosed), я бы снова его открыл.

Вы можете попробовать следующее:

On Error Resume  ''''instead of On Error Resume Next

Dim rsMain As New ADODB.Recordset
sqlstr = "select * .... "
If rsMain.State = adStateOpen Then rsMain.Close
rsMain.Open sqlstr, sProvider, adOpenKeyset, adLockOptimistic
Другие вопросы по тегам