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

时间:2010-02-09 12:37:36

标签: c++builder paradox

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

请任何人,来帮助我们

:'(

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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