VBA中的错误:在'读取授权数据包'丢失与MySQL服务器的连接,系统错误2

这是我的macros执行约10分钟后得到的错误。 macros基本上每5秒钟执行一次更新MySQL数据库的任务。

在这里输入图像说明

什么可能是错的?

我的macros如下:

Public RunWhen As Double Public Const cRunIntervalSeconds = 10 ' five seconds Public Const cRunWhat = "UpdateMarketData" ' the name of the procedure to run Sub UpdateMarketData() Dim Cn As ADODB.Connection Dim Server_Name As String Dim Database_Name As String Dim User_ID As String Dim Password As String Dim SQLStr As String Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rad = 0 TextStrang = TextStrang & "'" field2 = "cid" field1 = "bid" table1 = "MMbanner" For rowCursor = 3 To 4 SQLStr = "UPDATE tbl_MarketData SET Mid = '" & Cells(rowCursor, 2) & "',Bid = '" & Cells(rowCursor, 5) & "',Offer = '" & Cells(rowCursor, 6) & "',DateEntered = '" & Format(DateTime.Now(), "yyyy-MM-dd hh:mm:ss") & "' WHERE IndexCode = '" & Cells(rowCursor, 1) & "'" Debug.Print SQLStr Set Cn = New ADODB.Connection Cn.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=<Servername>; PORT=Portno; DATABASE=Databasename; USER=Username; PASSWORD=Password; OPTION=0;" Cn.Execute SQLStr rad = rad + 1 Next Set rs = Nothing Cn.Close Set Cn = Nothing Call StartTimer End Sub Sub StartTimer() RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds) Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _ Schedule:=True End Sub Sub StopTimer() On Error Resume Next Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _ Schedule:=False End Sub 

您的for循环通过Set Cn = New ADODB.Connection等创build两个单独的连接,但是Cn.Close只在for循环之后调用一次。 因此,所创build的第一个连接没有明确closures, 可能仍被服务器视为活动的。 最终你会用尽可用的连接,事情会停下来。

不知道这是你的问题的原因,但它绝对值得修复。 我会创build并在for循环之前打开连接for但将Cn.Execute部分保留在循环体内