1

我是一名使用 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 字段中。

请任何人来帮助我

:'(

4

2 回答 2

1

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

TBlobField *blob; blob=new (TBlobField);

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

TBlobField *blob = new TBlobField;

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

TBlobField *blob = new TBlobField(Table1);

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

编辑:还有一件事,你使用的方式TBlobField永远不会与表格相关联。您可能会发现来自 about.com 的这篇文章很有趣:在 BLOB 字段中存储记录数据 [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

于 2010-02-09T17:26:09.583 回答
0

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

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

于 2011-05-27T10:51:15.570 回答