我是使用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字段中。
请任何人,来帮助我们
:'(
答案 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 :(得分:0)
在Delphi中有一个名为TDataSet.CreateBlobStream的函数。由于Delphi 7中的一些问题,我不得不采用这条路线来完全相同的应用程序,将图像存储在一个悖论blob字段中。 有关详细信息,请参阅此链接(遗憾的是Delphi):