在 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 将文本拆分为单个单词