Delphi - 如何将位图保存到 SQLite 数据库中的 BLOB 字段
Delphi - How to save bitmap to BLOB field in SQLite database
我正在尝试将一组 TBitmap 图像添加到 ClientDataSet 的不同记录(在 ftBlob 字段中),然后将这些记录保存到 SQLite 数据库。 BLOB 字段 (DocImage) 是数据库中的必填字段。
但是,我的代码似乎根本没有将位图保存到 ClientDataSet 中的 blob 字段...所以当我调用 BdmMain.cdsTrxDoc.ApplyUpdates(0)
时,我得到错误:"Field 'DocImage' must have a value."
我在调用 FTrxPhotoValue[i].SaveToStream(BlobStream)
之前和之后检查了我的 BlobStream (BlobStream.Size) 的大小,它的大小确实增加了,但 BlobField 的数据大小仍然为 0。
这是代码片段:
FTrxIDValue: Integer;
FTrxDocIDValue: array of Integer;
FTrxPhotoValue: array of TBitmap;
// ...
for i := 0 to Length(FTrxPhotoValue) do
begin
BdmMain.cdsTrxDoc.Insert;
BdmMain.cdsTrxDoc['TrxID'] := FTrxIDValue;
BdmMain.cdsTrxDoc['DocID'] := FTrxDocIDValue[i];
BlobField := BdmMain.cdsTrxDoc.FieldByName('DocImage');
BlobStream := BdmMain.cdsTrxDoc.CreateBlobStream(BlobField, bmWrite);
FTrxPhotoValue[i].SaveToStream(BlobStream);
end;
// ...
BdmMain.cdsTrxDoc.ApplyUpdates(0);
您应该 Free
调用 SaveToStream
后的流。流将仅在 Destroy
.
期间更新基础字段
我正在尝试将一组 TBitmap 图像添加到 ClientDataSet 的不同记录(在 ftBlob 字段中),然后将这些记录保存到 SQLite 数据库。 BLOB 字段 (DocImage) 是数据库中的必填字段。
但是,我的代码似乎根本没有将位图保存到 ClientDataSet 中的 blob 字段...所以当我调用 BdmMain.cdsTrxDoc.ApplyUpdates(0)
时,我得到错误:"Field 'DocImage' must have a value."
我在调用 FTrxPhotoValue[i].SaveToStream(BlobStream)
之前和之后检查了我的 BlobStream (BlobStream.Size) 的大小,它的大小确实增加了,但 BlobField 的数据大小仍然为 0。
这是代码片段:
FTrxIDValue: Integer;
FTrxDocIDValue: array of Integer;
FTrxPhotoValue: array of TBitmap;
// ...
for i := 0 to Length(FTrxPhotoValue) do
begin
BdmMain.cdsTrxDoc.Insert;
BdmMain.cdsTrxDoc['TrxID'] := FTrxIDValue;
BdmMain.cdsTrxDoc['DocID'] := FTrxDocIDValue[i];
BlobField := BdmMain.cdsTrxDoc.FieldByName('DocImage');
BlobStream := BdmMain.cdsTrxDoc.CreateBlobStream(BlobField, bmWrite);
FTrxPhotoValue[i].SaveToStream(BlobStream);
end;
// ...
BdmMain.cdsTrxDoc.ApplyUpdates(0);
您应该 Free
调用 SaveToStream
后的流。流将仅在 Destroy
.