2017-09-07 68 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

相關問題