简单问题解决立即给分,谢谢~~~
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就出错,大家帮帮忙啊~
[解决办法]
conn1 和 rs定义在模块中 或者 窗体级
[解决办法]
搞笑!
每次数据触发都创建新的Connection和打开数据集!
应保持数据集打开,而不是每次数据触发都创建新的Connection和打开数据集!
[解决办法]
1,你断开的时候顺序反了
rs.close
conn1.close
2.
strInsert = "insert into GprsTest(记录时间,DateRec) values( ' " & Now & " ', ' " & b & " ') "
conn1.excute strinsert
3 Set DataGrid.DataSource = rs
datgrid.refresh (或者是update)
[解决办法]
rs.Open strInsert, conn1, adOpenDynamic, adLockOptimistic
这一句可以用
conn1.excute strInsert
来代替
另外就是楼上说的
断开一个连接前要先把它的下层对象全部关闭
否则就不要关闭了,直接set nothing就可以
不过好的习惯是关闭掉
[解决办法]
不过一般都是把conn1作为公共变量来用
可以避免频繁的打开关闭连接带来的资源浪费