Delphi - 如何在SQLite数据库中将位图保存到BLOB字段

时间:2017-09-07 14:39:16

标签: sqlite delphi bitmap blob firemonkey

我正在尝试将TBitmap图像数组添加到ClientDataSet的不同记录中(在ftBlob字段中),然后将这些记录保存到SQLite数据库中。 BLOB字段(DocImage)是数据库中的必填字段。

但是,我的代码似乎根本没有将位图保存到ClientDataSet中的blob字段......所以当我调用BdmMain.cdsTrxDoc.ApplyUpdates(0)时,我收到错误:“字段'DocImage'必须有一个值“。

我在调用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);

1 个答案:

答案 0 :(得分:4)

调用Free后,您应该SaveToStream。该流只会在Destroy期间更新基础字段。