2017-09-07 64 views
2

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

但是,我的代码似乎没有将位图保存到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); 

回答

4

您应该在SaveToStream之后致电Free。该流只会在Destroy期间更新基础字段。

+0

我在SaveToStream调用后添加了BlobStream.Free,但现在出现访问冲突错误... –

+0

您能否显示完整的代码并标记访问冲突行? –

+4

迭代'for i:= 0到Length(FTrxPhotoValue)-1 do'。 – Victoria

相关问题