访问VBA:如何将OLE字段内容转储为字节

时间:2018-02-17 15:10:55

标签: vba access-vba

我有一个包含OLE字段的表,我希望将某些字段的内容视为字节。到目前为止,我只能在带有BinData数组的Watch窗口中查看它。 我尝试使用CByte函数将其转换为字节数组,但它 给出了#34;类型不匹配"错误。

有没有办法将OLE字段内容作为字节数组获取?

我的代码将逐字节字段内容读入Bindata数组:

Sub DumpField()

Dim BinData(100) As Variant
Dim r As ADODB.Recordset
Dim i As Integer

Set r = New ADODB.Recordset
With r
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Open "SELECT [fBinary] FROM tbDesc WHERE ID=100", CurrentProject.Connection
If .BOF Then MsgBox "No Records"
Exit Sub
End If

For i = 0 To r.Fields(0).ActualSize - 1
BinData(i) = r.Fields(0).GetChunk(1)
Next i

End With
End Sub

1 个答案:

答案 0 :(得分:1)

OLE字段内容是一个字节数组。但是,使用CByte会尝试将某些内容转换为单个字节,然后失败。

您可以通过以下方式打印单个字节:

Debug.Print r.Fields(0).Value(0) 'First byte

或者以下列方式之一存储字节数组:

1:只使用变体

Dim BinData As Variant
BinData = r.Fields(0).Value

2:创建适当大小的字节数组,然后将字节数组设置为OLE对象值

Dim BinData() As Byte
Dim objSize As Long
objSize = UBound(r.Fields(0).Value)
Redim BinData(0 To objSize)
BinData = r.Fields(0).Value