Timeout expired - откуда это взялось

PavelT100
Дата: 15.10.2003 14:54:24
VB6. MS SQL Server 2000. Вот такой у меня обработчик ошибок, процедура ToLog записывает данные в лог

Public cnnPBD As Connection   

....
Call ToLog("Error Number: " & Err.Number & vbCrLf & _
" Source : " & Err.Source & vbCrLf & _
" Description: " & Err.Description)

Dim er As ADODB.Error
If cnnPBD.Errors.count > 0 Then
Call ToLog("Error in cnnPBD")
For Each er In cnnPBD.Errors
Call ToLog("Number : " & er.Number & vbCrLf & _
"Source : " & er.Source & vbCrLf & _
"Desription: " & er.Description)
Next
Call ToLog("cnnPBD.CommandTimeout = " & cnnPBD.CommandTimeout)
End If


В ходе работы произошла ошибка, и вот что мне записали в лог:

1:56:30 последнее хорошее сообщение
2:03:04 Error Number: -2147467259
Source : Microsoft OLE DB Provider for SQL Server
Description: Timeout expired
2:03:05 Error in cnnPBD
2:03:06 Number : -2147467259
Source : Microsoft OLE DB Provider for SQL Server
Desription: Timeout expired
2:03:06 cnnPBD.CommandTimeout = 0


Ну как такое может быть. Ведь cnnPBD.CommandTimeout = 0, а это значит что не может быть Timeout expired, или я заблуждаюсь ?
Glory
Дата: 15.10.2003 15:00:11
Так что же вы нам обработчик ошибок показываете. Вы нам строку которая ошибку генерирует покажите. А также часть кода до нее.
GreenSunrise
Дата: 15.10.2003 15:02:47
Есть таймаут на выполнение команды (CommandTimeout), а есть таймаут на открытие коннекта (ConnectionTimeout). Две большие разницы.
PavelT100
Дата: 15.10.2003 15:35:35
На тот момент, когда произошла ошибка, открытие соединние уже произошло, так что это можно исключить.
Ошибка произошла где то вот здесь, точнее я сказать к сожалению не могу, сам бы хотел узнать, раньше этот код выполняля без ошибок и если я сейчас снова запушу программу, то вряд ли она упадет снова в ближайшее время.

Sub Check_Excipients(CurTime As Date)

Dim count(0 To 4) As Integer: Erase count

cnnPBD.Execute ("UPDATE z_fexcip SET checked = 0")
Dim ereg As New VBScript_RegExp_55.RegExp: ereg.Global = True

Dim rs As ADODB.Recordset
Set rs = cnnPBD.Execute("SELECT codcip, compos FROM formes WHERE codcip <> '' AND compos LIKE '%effet notoire%'")
Do While Not rs.EOF
st$ = rs!compos
i% = InStr(st$, "effet notoire")
If i% > 0 Then
i% = i% + 13
If Mid$(st$, i%, 1) = " " Then i% = i% + 1
If Mid$(st$, i%, 1) = ":" Then i% = i% + 1
st$ = LTrim$(Mid$(st$, i%))
start% = 1: i% = 3
Do While i% <= Len(st$)
ch$ = Mid$(st$, i%, 1)
If ch$ = "(" Then
jk% = InStr(i%, st$, ")")
If jk% > 0 Then ch$ = ")": i% = jk%
End If
If ch$ = "," And Not IsNumeric(Mid$(st$, i% + 1, 1)) Or ch$ = "." Or ch$ = "-" And Mid$(st$, i% + 1, 1) = " " Or i% = Len(st$) Then
If InStr(s2$, "ETHANOL") > 0 Then
s2$ = "ETHANOL"
Else
s2$ = Replace(s2$, "AMIDONS ", "AMIDON ")
If s2$ <> "" Then
cnum% = AddExcipientDCI(s2$, CurTime, count(4))
cnnPBD.Execute ("
IF EXISTS (SELECT cnum FROM z_fexcip WHERE cip=" & rs!codcip & " AND cnum=" & cnum% & ")" & _
"
UPDATE z_fexcip SET checked = 1 WHERE cip=" & rs!codcip & " AND cnum=" & cnum% & " " & _
"
ELSE " & _
"
INSERT INTO z_fexcip (cip, cnum, modif, checked) VALUES (" & _
rs!codcip & "
," & cnum% & "," & DTimeModifFormat(CurTime) & ",1)")
count(1) = count(1) + 1
End If
Next1: If ch$ <> "
," Then Exit Do
start% = i% + 1
End If
i% = i% + 1
Loop
End If
count(0) = count(0) + 1
rs.MoveNext
Loop
rs.Close

cnnPBD.Execute ("
DELETE FROM z_fexcip WHERE checked <> 1")
Call ToLog("
EXCIPIENTS scanned " & count(0) & ", modified " & count(1) & "/" & count(3) & "/" & count(4))
End Sub

Function AddExcipientDCI(st As String, CurTime As Date, ByRef count As Integer) As Integer
Dim s2 As String: s2 = MakeShortDCIName(st)
Dim rs As ADODB.Recordset: Set rs = cnnPBD.Execute("
SELECT cnum, ext FROM z_dci WHERE nom=" & strp(s2))

If rs.EOF Then
AddExcipientDCI = Insert_In_Z_DCI("
", s2, 8, st, CurTime)
count = count + 1
Else
If rs!ext <> 8 Then cnnPBD.Execute ("
UPDATE z_dci SET ext=8, modif=" & DTimeModifFormat(CurTime) & " WHERE cnum=" & rs!cnum)
AddExcipientDCI = rs!cnum
End If

rs.Close
End Function