现有段程序,需要每3秒从数据库中选取记录,但是由于连接的是远程数据,需要走internet连接,但是网络不稳定,经常在"While Not rs.EOF"报错"对象关闭,不允许操作"。我该如何处理,谢谢!程序如下:
Private Sub Timer1_Timer()
Dim rs As New ADODB.Recordset
Dim autoid, MessageContent As String 
Dim tempsql As StringDateSendStr = Format(Now, "yyyy-mm-dd hh:mm:ss") 
'On Error GoTo lastcode
If IsLeftPoint Then
Set rs = New ADODB.Recordset
    If Wavecom1.SendBufCount > 0 And Wavecom1.SendBufCount <= 10 Then
    
    tempsql = "select top 10  AutoID,isnull(UserNumber,'0') as UserNumber,isnull(MessageContent,'') as MessageContent,isnull(userid,'') as userid from T_Out_Modem   "
    Set rs = ExecSql(tempsql, CONN2)
    
    While Not rs.EOF      
      If IsLeftPoint Then
         autoid = CStr(rs("autoid"))
         UserNumber = rs("UserNumber")
         MessageContent = rs("MessageContent")
         UserId = rs("userid")                    
         
         Wavecom1.SendSM UserNumber, MessageContent
         Send_T_Revert
         CONN2.Execute ("delete  T_Out_Modem  where  autoid='" + autoid + "'")
         rs.MoveNext
      Else
       Exit Sub
      End If
        ' DoEvents
    Wend
  
    rs.Close
    Set rs = Nothing
  End IfEnd If
End Sub

解决方案 »

  1.   

    试试将commandtimeout设长一点或许会有改变
      

  2.   

    首先要把CONN2的游标类型设置成客户端的,然后
    Set rs = ExecSql(tempsql, CONN2)
    Set rs.ActiveConnection=Nothing就可以解决你的问题,不是网络不稳定的问题
      

  3.   

    楼上的 ltpao(啊炮)和 cuizm(射天狼)你们能够说的再具体点吗?我不是很明白。
      

  4.   

    确切的说是如何设置conn2的游标类型为客户端的,还有在操作之前如何判断数据库是否断开呢?我很菜,不怕大家笑话。
      

  5.   

    是不是这样设置conn2.CursorLocation = adUseClient?
      

  6.   

    if conn.state <> adstateopen then
    '这里是连接数据库的代码
    endif