【发布时间】:2021-10-08 07:36:36
【问题描述】:
我正在尝试使用 Excel 中的 vba 检索存储在 sqlite3 数据库中的一些二进制数据。它运行平稳,只是只检索了部分 blob 数据。 Blob 的长度为 11204 字节。返回的记录集字段的大小是正确的。但是,只有前 255 个字节包含有效值,后面是一堆 0。更奇怪的是,在浩瀚的 0 的海洋中到处都有一些有效字节。 查询成功后,我使用了三种不同的方式来检索数据:getrows()、rst.Fields().Value 和 adoStream.Read(),都得到了相同的结果。
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
conn.Open "DRIVER=SQLite3 ODBC Driver;Database=" & fileName & ";"
query = "SELECT * FROM " & dataTable & ";"
rst.Open query, conn, 1, 1
data = rst.getrows()
Set adoStream = CreateObject("ADODB.Stream")
adoStream.Type = 1 'adTypeBinary
adoStream.Open
With rst
.MoveLast
.MoveFirst
For i = 1 To .RecordCount
data = rst.fields(dataField).value
rst.Save adoStream, 0
data = adoStream.Read(adoStream.Size)
next i
end With
我尝试了一些不同的数据库,但都是一样的。 谁能告诉我这里发生了什么? 谢谢。
【问题讨论】:
-
看起来您正在将整个记录集持久化到流中?您只是想要 blob 字段内容吗?
-
也许可以试试
adoStream.Write rst.fields(dataField).value -
恐怕这里的问题与流无关。在 getrows() 没有所有有效数据之后,我使用流作为检索 blob 的替代方法。 rst.Fields().Value 首先表现不正常 - 它具有正确的大小 (11204),但不是所有数据。 @Tim Williams我只想获取blob字段内容(表中的所有字段都是blob)。尝试了你的建议,但它没有解决问题。谢谢。