這幾天在做一個數據採集的上位機軟件,設想把採集的數據存入數據庫(每次採樣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