【问题标题】:Delphi - How to save bitmap to BLOB field in SQLite databaseDelphi - 如何将位图保存到 SQLite 数据库中的 BLOB 字段
【发布时间】:2017-09-07 14:39:16
【问题描述】:

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

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

我在调用FTrxPhotoValue[i].SaveToStream(BlobStream) 之前和之后检查了我的 BlobStream (BlobStream.Size) 的大小,它确实增加了大小,但 BlobField 的数据大小仍然为 0。

这是一个sn-p的代码:

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);

【问题讨论】:

    标签: sqlite delphi bitmap blob firemonkey


    【解决方案1】:

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

    【讨论】:

    • 我在调用 SaveToStream 后添加了 BlobStream.Free 但现在我收到访问冲突错误...
    • 你能显示完整的代码并标记访问冲突的行吗?
    • 迭代for i := 0 to Length(FTrxPhotoValue)-1 do
    猜你喜欢
    • 2015-11-15
    • 2015-03-26
    • 2021-07-10
    • 2014-04-07
    • 2011-02-14
    • 2020-11-30
    • 2020-02-10
    • 2013-01-18
    • 2017-03-14
    相关资源
    最近更新 更多