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コンストラクターは1つの引数、TComponentへのポインターを取ります。これは、オブジェクトの所有者として機能し、後でメモリーをクリアする役割を果たします。あなたが試みることができる1つのことはこれをすることです:

TBlobField *blob = new TBlobField(Table1);

私はC++Builderでデータベースプログラミングをあまり行っていないことを認めなければなりませんが、上記は機能するはずです。

編集:もう1つ、使用方法がTBlobFieldテーブルに関連付けられることはありません。この記事は、about.comのintersting: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 でいくつかの問題が発生したため、まったく同じアプリケーションでこの方法を使用し、パラドックス ブロブ フィールドに画像を保存する必要がありました。詳細については、このリンクを参照してください (残念ながら Delphi):

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

于 2011-05-27T10:51:15.570 に答える