Private Sub tcpServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
       
        Dim strData As String
        Dim b As String
        Dim i As Integer
        Dim strselect As String
        Dim strInsert As String
        Dim SysTime As Date
        
        tcpServer(Index).GetData b
       
         sockbusy(Index) = 0   
    
     sqlserverconnect = "driver={sql server};" & "server=MVP;" & "database=GprsTest;" & "uid=sa;" & "pwd=123"
                
        Set conn1 = New ADODB.Connection       
  
        conn1.Open sqlserverconnect        
               
        Set rs = New ADODB.Recordset
          
    SysTime = Now
    
    strInsert = "insert into GprsTest(记录时间,DateRec) values(' " & Now & " ',' " & b & " ')"
    rs.Open strInsert, conn1, adOpenDynamic, adLockOptimistic
 
    strselect = "SELECT  *  FROM GprsTest order by 记录时间"
    rs.Open strselect, conn1, adOpenKeyset, adLockOptimistic
    Set DataGrid.DataSource = rs
    nRCCount = rs.RecordCount
    
    DataGrid.FirstRow = nRCCount
  
  
   'conn1.Close
   
   'rs.Close   
    
    
     End Sub我发现程序运行起来以后,每当有数据过来,那系统资源就不断被消耗,虽然每次消耗不多,但时间长了总不是办法,我想每次都把rs.close 和 set rs=nothing, 但是发现我的datagrid就不能显示数据了,另外,即便不让datagrid显示数据,就是把显示的那部分注释掉,还是一样的消耗,并且,一到rs.close就出错,大家帮帮忙啊~

解决方案 »

  1.   

    conn1 和 rs定义在模块中 或者 窗体级
      

  2.   

    搞笑!
    每次数据触发都创建新的Connection和打开数据集!
    应保持数据集打开,而不是每次数据触发都创建新的Connection和打开数据集!
      

  3.   

    1,你断开的时候顺序反了
    rs.close
    conn1.close2.
    strInsert = "insert into GprsTest(记录时间,DateRec) values(' " & Now & " ',' " & b & " ')"
    conn1.excute strinsert3 Set DataGrid.DataSource = rs
    datgrid.refresh (或者是update)
      

  4.   

    rs.Open strInsert, conn1, adOpenDynamic, adLockOptimistic
    这一句可以用
    conn1.excute strInsert
    来代替另外就是楼上说的
    断开一个连接前要先把它的下层对象全部关闭
    否则就不要关闭了,直接set nothing就可以
    不过好的习惯是关闭掉
      

  5.   

    不过一般都是把conn1作为公共变量来用
    可以避免频繁的打开关闭连接带来的资源浪费