这几天在做一个数据采集的上位机软件,设想把采集的数据存入数据库(每次采样1000个数据)。网上找了一下没有很好的答案,今天花了点时间做了个试验程序,代码如下:(调试通过)
'先在Access表中建一个字段类型为OLE的字段
Dim adoConn As New ADODB.Connection
Dim ListRS As New ADODB.Recordset
Dim a(1000)
Dim b(1000)
Private Sub Form_Load()
Dim c as Double
adoConn.Open "连接数据库字串。。。"
For i = 0 To 1000
c = -i / 100
'a()为要存的数组,数据类型为文本。
'本想做二进制的但是在vb中Double数据用Hex()转换有问题,还没找到简洁的方法,无奈只好用文本格式(固定长度)。
'注意:必须固定长度
a(i) = IIf(c >= 0, Format(c, "+000.000"), Format(c, "000.000"))
Next
End Sub
' 保存数组到数据库
Private Sub Command1_Click()
strsql = "select * from a"
ListRS.Open strsql, adoConn, adOpenStatic, adLockOptimistic
ListRS.AddNew '新增一条记录
For i = 0 To UBound(a)
ListRS.Fields("testdata").AppendChunk a(i) 'a()是数组名
Next i
' ListRS.Fields("testdata").Value = a
ListRS.Update
'完成后关闭对象
ListRS.Close
End Sub
'从数据库中读出存储的数组
Private Sub Command2_Click()
strsql = "select * from a"
ListRS.Open strsql, adoConn, adOpenStatic, adLockOptimistic
PackageSize = 16 '每个数据的长度
lngActualSize = ListRS.Fields("testdata").ActualSize '数据库中二进制字段的数据长度
lChunkCount = lngActualSize \ PackageSize '求出数据的个数
'逐个读出存储在数据库中的数据
For i = 0 To lChunkCount - 1
b(i) = ListRS.Fields("testdata").GetChunk(PackageSize)
Next
For i = 0 To 1000
Debug.Print b(i)
Next
ListRS.Close
End Sub