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

2024-01-06

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

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

我在调用之前和之后检查了 BlobStream (BlobStream.Size) 的大小FTrxPhotoValue[i].SaveToStream(BlobStream)它的大小确实增加了,但 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);

你应该Free调用后的流SaveToStream。流只会在以下期间更新底层字段:Destroy.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi - 如何将位图保存到 SQLite 数据库中的 BLOB 字段 的相关文章

  • 尝试将 SQLite DB 从数据复制到 SD 卡

    我正在使用以下代码 该代码发布在 Stack Overflow 上的某个位置 并根据我的目的进行了修改 try File sd Environment getExternalStorageDirectory File data Enviro
  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • 如何更改 TPageControl 上标签的方向?

    我是 Delphi 的新手 再次强调 我在 1994 年就使用过 Delphi 我现在有 Delphi 2009 Pro 来自Java 我发现对象继承非常晦涩 我的用户想要选项卡位于左侧的选项卡式页面 但是 TPageControl 不允许
  • iphone sqlite 静态链接?

    有人静态链接 sqlite 而不是使用动态链接 吗 我遇到的问题是 越狱手机的用户没有与普通 iPhone 所采用的 sqlite 版本相同的版本 因此导致崩溃 我假设在我的应用程序中静态链接已知版本的 sqlite 就是答案 我需要全文支
  • 所见即所得与 Unicode

    我在 Delphi 中编写了一个 Windows 程序 该程序使用 GetCharWidth 和 Em Square 将文本非常精确地放置并换行到屏幕和打印机 这对于 ANSI 文本效果很好 您只需要检索和计算 255 个字符的宽度 但当您
  • EF Core 2.1 启动缓慢

    在获得了 EF6 的一些经验后 例如this https stackoverflow com questions 48441674 extremely slow ef startup 15 minutes 我想尝试一下 EF Core 因为
  • 将 [字节数组] 分配给没有 Unicode 转换的 Variant

    考虑以下代码片段 在 Delphi XE2 中 function PrepData StrVal string Base64Val AnsiString OleVariant begin Result VarArrayCreate 0 1
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • “库例程调用不按顺序” sqlite3_prepare_v2(CREATE TABLE)

    你知道为什么我打电话时会收到 Library Routine Called Out Of Sequence 吗 sqlite3 prepare v2 CREATE TABLE 在空数据库上 我创建一个空数据库 然后打开它 后来我将所有必须写
  • Delphi - 获取和设置 ListView 的滚动条位置

    这似乎是一个愚蠢而简单的问题 然而 我一直无法找到令人满意的答案 基本上 我有一个列表视图 样式 vsReport 与数据 有时 我必须更新它 因此 我必须清除列表视图并用更新的数据再次填充它 但是 当我这样做时 滚动条位置将重置为 0 我
  • 供所有 Win32 程序员在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例

    我正在寻找良好的资源来学习使用 Win32 GDI API 或任何替代它的内容 以便使用 Win32 API 直接在玻璃窗体上进行绘制和绘制 当我使用 Delphi 时 我将其标记为 Delphi 或 Visual C 您能找到的任何代码示
  • 无法在 Sqlite3 中添加默认值为 NULL 的 NOT NULL 列

    尝试将 NOT NULL 列添加到现有表时出现以下错误 为什么会发生这种情况 我尝试了 rake db reset 认为现有记录是问题所在 但即使重置数据库后 问题仍然存在 你能帮我解决这个问题吗 迁移文件 class AddDivisio
  • TStream.Position 与 TStream.Seek 比较

    要移动 TStream 类中的 当前字节 指针 我们可以使用属性 Position 例如 MyStream Position 0 或使用 Seek 方法 例如 MyStream Seek 0 soFromBeginning 问题是 哪一个更
  • Flutter 中有预填充数据库使用的示例吗?

    Flutter 中有预填充数据库使用的示例吗 我不需要 CRUD 示例 此时我只需要从数据库读取数据即可 我是 Flutter 新手 所以一步一步的教程会很好 您可以将您的应用程序与预填充的 sqlite 数据库捆绑在一起assets文件夹
  • SQLite-Net 扩展 - GetAllWithChildrenAsync 未提取所有内容

    我正在尝试使用 SQLite Net 扩展来创建关系数据库 我在尝试从数据库中提取 Term 对象时遇到了问题 它成功地撤回了其关联的课程 但未撤回与课程关联的评估和笔记 我不确定问题是否在于如何将对象插入数据库 如何从数据库中提取对象 或
  • Delphi定时器比毫秒更精确

    我在 Delphi 中有一个程序 它以 25 赫兹 每秒 25 次 的速度从外部应用程序获取帧 然后通过创建 1 2 个额外帧将其转换为 60 赫兹 每秒 60 帧 我需要通过连续构建帧缓冲区并从单独的线程输出帧来输出这些额外的帧 问题是
  • PhoneGap 上的 SQLite 数据库

    我想使用 PhoneGap 为 iPhone 实现 SQLite 数据库 我了解 iPhone 本机应用程序中 SQLite 数据库的一些基础知识 但是如何在 PhoneGap 中实现 SQLite 数据库呢 我们最终使用了PhoneGap
  • 读取存储在注册表中的 GUID 值

    我尝试读取存储为的 GUID 值binaryDelphi 注册表中的值 当我用BintoHex读取它时 但结果是相反的 看来我必须交换字节 但我认为 BinToHex 可以做到 我参考了这个线程 但找不到正确的解决方案 如何在 Delphi
  • Delphi XE2,vcl样式重新创建窗口句柄

    在运行时应用新样式后 我的应用程序的 MainForm 创建一个新的窗口句柄 有什么方法可以阻止此操作或重新分配句柄 因为我收到了大量以下错误 系统错误 代码 1400 无效的窗口句柄 有什么方法可以操纵强制分配新句柄的进程吗 我通过执行以

随机推荐