在 C++ Builder 中使用带有 BLOB 字段的图像和数据

Posted

技术标签:

【中文标题】在 C++ Builder 中使用带有 BLOB 字段的图像和数据【英文标题】:Using Images and data with BLOB fields in C++ Builder 【发布时间】:2010-02-09 12:37:35 【问题描述】:

我是一名使用 Borland 的 C++ Builder 5 的 C++ 程序员。我正在开发一个数据库应用程序 它现在给我带来了严重的悲伤......

我在 C++ Builder 中使用 Paradox 7.0 表,但我根本找不到将数据插入 BLOB 的方法。 我也无法使用 TDBImage VCL 组件保存或查看图片。我最近失败的尝试是试图 使用似乎是铁一般的代码将图像保存到 BLOB 字段。

//-----------------------------------------
Table1->Edit();
Open->Execute();
String file=Open->FileName;
ShowMessage(file);

TBlobField *blob; blob=new (TBlobField);

blob->FieldName="Image";
blob->LoadFromFile(file);

Table1->Post();
//-----------------------------------------

这段代码编译失败,定位BlobField没有动态对象分配功能什么的。

我也无法为 OLE2 组件添加 OCX 控制器,也无法将其保存在自己的 BLOB 字段中。

请大家帮帮我

:'(

【问题讨论】:

能否请您发布确切的错误信息,这真的很有帮助。 可能是时候更新了。即使您可以使用第 6 版,您也会做得更好。 【参考方案1】:

让我印象深刻的是你的台词:

TBlobField *blob; blob=new (TBlobField);

首先,我不确定您为什么要使用该语法而不是:

TBlobField *blob = new TBlobField;

其次,TBlobField 构造函数有一个参数,一个指向 TComponent 的指针,它充当对象的所有者,并且是负责事后清除内存的对象。您可以尝试的一件事是这样做:

TBlobField *blob = new TBlobField(Table1);

我必须承认,虽然我没有在 C++ Builder 中做过太多的数据库编程,但是,上面应该可以工作。

编辑: 还有一件事,您使用TBlobField 的方式永远不会与表格相关联。您可能会发现来自 about.com 的这篇文章很有趣:Storing Record Data in a BLOB Field [1]。它是用 Delphi 编写的,但由于 VCL 框架,应该很容易移植到 C++。

您可以尝试使用以下代替,虽然它没有经过测试,所以您这样做可能会遇到一些问题,如果有请告诉我:

TField *field = Table1->FieldByName("image");
TBlobField *blob = dynamic_cast<TBlobField *>(field);
if (blob)

    blob->LoadFromFile(file);

[1]http://delphi.about.com/od/database/a/record2blob.htm

【讨论】:

【参考方案2】:

在 Delphi 中有一个名为 TDataSet.CreateBlobStream 的函数。由于早在 Delphi 7 中的一些问题,我不得不为完全相同的应用程序采用这条路线,将图像存储在一个悖论 blob 字段中。 有关更多信息,请参阅此链接(不幸的是 Delphi):

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TDataSet_CreateBlobStream.html

【讨论】:

以上是关于在 C++ Builder 中使用带有 BLOB 字段的图像和数据的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Borland C++ Builder 中使用 SetWindowsHookEx 和 LowLevelKeyboardProc

在 Embarcadero 的 C++ Builder 中使用 RegEx 将文本拆分为单个单词

在西雅图 C++ Builder 10 中使用 Web.Win.Sockets

C++ Builder 2009 - 简单的整数列表

C++ Builder托盘控件

我应该在 Delphi 而不是 C++ Builder 中编写组件吗?如何向组件添加事件?