第一次在这里海报。
所以,我有这个旧的 VB6 软件,它决定在插入表期间中断,返回错误“用户 'sa' 登录失败”。但是,在已经发生了不确定数量的插入之后,此错误需要一段时间才会发生。
所有这些插入都不会在事务期间发生。并且所说的表不是临时表(用#或##声明),也不是视图。应用程序中还有其他地方可以更多地使用数据库/连接。我们使用的是 SQL Server 2008 R2,通过 ADO 连接。
关于错误可能是哪里或什么的任何想法?是应用程序的问题吗?是不是数据库有问题?
更新:这是执行插入的代码部分
//gAdoVIN is our ADODB.Connection object, it opens once (when the app starts) and closes once (when the app closes)
For iRow = 1 To grdItens.LinhasPreenchidas - 1 //runs about 400~1000 times
Dim sEstab() As String
sEstab = Split(grdItens.TextMatrixO(iRow, iColCdEstab), ",")
For iSplit = 0 To UBound(sEstab)
If sEstab(iSplit) <> "" Then
GsSql = "Some query here"
//b_SqlADO Opens records, and dispose it if necessary
b_SqlADO GsSql, gAdoVIN, rcCot
Do While Not rcCot.EOF //runs about 3 times
GsSql = "Insert into " & sTabTemp & " (Some Fields) values (Some Values)"
gAdoVIN_Execute GsSql //fails here after a while
rcCot.MoveNext
Loop
cVlr = grdItens.TextMatrixO(iRow, iColValor) + ((grdItens.TextMatrixO(iRow, iColValor) * sicrAcrs_RelcSem) / 100)
GsSql = "Some other query"
b_SqlADO GsSql, gAdoVIN, rcTemp
If rcTemp.EOF Then
rcTemp.AddNew
End If
//Updates some fields
rcTemp.Update
End If
Next iSplit
Next iRow
以及 gAdoVIN_Execute 的代码
Public Sub gAdoVIN_Execute(sSql As String, Optional ByRef lRecordsAffected_LOG As Long = 0, Optional lOptions_LOG As Long = -1)
//Some Log Operation
//here is where the insert is executed
gAdoVIN.EXECUTE sSql, lRecordsAffected_LOG, lOptions_LOG
//Another Log Operation
End Sub
更新2:当插入失败并返回错误时,再次运行它而不做任何其他事情不会失败。这是一种解决方法,所以它并没有完全解决问题,只是让它暂时起作用。