我正在尝试将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);
答案 0 :(得分:4)
调用Free
后,您应该SaveToStream
。该流只会在Destroy
期间更新基础字段。