この例では、データベース内の画像ファイルにアクセスする方法を示します。
TListBox コンポーネント、TImage コンポーネント、および TTable コンポーネントをフォームに追加します。設計されたメイン インターフェイスを図 1 に示します。
図 1 メインインターフェイス
このシステムでは、Paradox 7 に基づいた新しいデータベース Image.db を設計する必要があります。図 2 は、完成した Image.db データベースを示しています。
図 2 設計されたデータベース
プログラムのテストを容易にするために、Image.db データベースはサンプル プログラムが配置されているパスに保存されます。
TTable コンポーネントの TableName プロパティを Image.db に設定し、Active プロパティを True に設定します。
プログラムの実行開始時に、まず Image.db データベースにレコードがあるかどうかを確認します。レコードが存在しない場合は、次のコードを実行して、「bird.bmp」ファイルを Image.db データベースに追加します。
プロシージャ TForm1.FormCreate(送信者: TObject);
変数
mem:TMemoryStream;
始める
Table1.Eof と Table1.Bof の場合
始める
Table1 で行う
始める
入れる;
FieldByName('名前').AsString:='鳥';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
役職;
終わり;
終わり;
終わり;
次に、同じ方法で、「sample.wav」、「leaf.wav」、「lotus」イメージ ファイルを Image.db データベースに順番に追加します。
最後に、次のコードを使用して、Image.db データベースに保存されているファイル名をフォームの TListBox コンポーネントに追加します。
Table1 で行う
始める
初め;
Eofではないが、
始める
ListBox1.Items.Add(FieldByName('Name').AsString);
次;
終わり;
終わり;
プログラムの実行中に、ユーザーがフォームの TListBox コンポーネントで画像ファイルを選択すると、プログラムは TTable コンポーネントの First メソッドを使用して、データ テーブルの最初のレコードを現在のレコードとして設定し、その後走査します。ループを通じてデータベースにアクセスします。あるレコードの Name フィールドの内容がユーザーの選択と同じである場合、レコードの Data フィールドの画像情報が読み取られ、その画像がフォーム上の TImage コンポーネントに表示されます。コードは次のとおりです。
プロシージャ TForm1.ListBox1Click(送信者: TObject);
変数
メモリ:TStream;
bmp:TBitmap;
始める
Table1 で行う
始める
初め;
Eofではないが、
始める
if FieldByName('Name').AsString=ListBox1.Items[ListBox1.ItemIndex] then
壊す;
次;
終わり;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Data'),bmRead);
mem.位置:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.無料。
mem.無料;
終わり;
終わり;
プログラムコードは次のとおりです。
ユニットユニット1;
インタフェース
用途
ウィンドウ、メッセージ、SysUtils、バリアント、クラス、グラフィックス、コントロール、フォーム、
ダイアログ、StdCtrls、DB、DBTables、mmsystem、ExtCtrls;
タイプ
TForm1 = クラス(TForm)
リストボックス1: Tリストボックス;
表 1: T テーブル。
画像1: T画像;
プロシージャ FormCreate(Sender: TObject);
プロシージャ ListBox1Click(送信者: TObject);
プライベート
{プライベート宣言}
公共
{公的宣言}
終わり;
変数
フォーム1: TForm1;
実装
{$R *.dfm}
プロシージャ TForm1.FormCreate(送信者: TObject);
変数
mem:TMemoryStream;
始める
Table1.Eof と Table1.Bof の場合
始める
Table1 で行う
始める
入れる;
FieldByName('名前').AsString:='鳥';
mem:=TMemoryStream.Create();
mem.LoadFromFile('bird.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
役職;
入れる;
FieldByName('名前').AsString:='サンプル';
mem:=TMemoryStream.Create();
mem.LoadFromFile('sample.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
役職;
入れる;
FieldByName('名前').AsString:='葉';
mem:=TMemoryStream.Create();
mem.LoadFromFile('leaf.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
役職;
入れる;
FieldByName('名前').AsString:='ロータス';
mem:=TMemoryStream.Create();
mem.LoadFromFile('Lotus.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
役職;
mem.無料;
終わり;
終わり;
Table1 で行う
始める
初め;
Eofではないが、
始める
ListBox1.Items.Add(FieldByName('Name').AsString);
次;
終わり;
終わり;
終わり;
プロシージャ TForm1.ListBox1Click(送信者: TObject);
変数
メモリ:TStream;
bmp:TBitmap;
始める
Table1 で行う
始める
初め;
Eofではないが、
始める
if FieldByName('Name').AsString=ListBox1.Items[ListBox1.ItemIndex] then
壊す;
次;
終わり;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Data'),bmRead);
mem.位置:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.無料。
mem.無料;
終わり;
終わり;
終わり。
ファイルを保存し、F9 キーを押してプログラムを実行します。プログラムの初期画面が図 3 に示されています。
TListBox コンポーネントで項目を選択すると、図 4 に示すように、対応する画像ファイルが表示されます。
図 3 プログラム実行時の初期画面