在Delphi完成在數據庫中存取圖象的圖文演示無錯。本站提示廣大學習愛好者:(在Delphi完成在數據庫中存取圖象的圖文演示無錯)文章只能為提供參考,不一定能成為您想要的結果。以下是在Delphi完成在數據庫中存取圖象的圖文演示無錯正文
本實例演示若何在數據庫中存取圖象文件。
向窗體上添加一個TListBox組件、一個TImage組件和一個TTable組件,設計完成的主界面如圖1所示。
圖1 主界面
本體系中須要設計一個新的基於Paradox 7的數據庫Image.db,圖2為設計完成的Image.db數據庫。
圖2 設計完成的數據庫
為了便利測試法式,Image.db數據庫存儲在實例法式地點的途徑下。
設置TTable組件的TableName屬性為Image.db,Active屬性為True。
在法式運轉早期,起首會斷定Image.db數據庫中能否存在記載,假如沒有記載存在,那末就履行以下代碼向Image.db數據庫中添加“鳥.bmp”文件:
procedure TForm1.FormCreate(Sender: TObject);
var
mem:TMemoryStream;
begin
if Table1.Eof and Table1.Bof then
begin
with Table1 do
begin
Insert;
FieldByName('Name').AsString:='鳥';
mem:=TMemoryStream.Create();
mem.LoadFromFile('鳥.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Post;
end;
end;
end;
然後依照雷同的方法次序向Image.db數據庫中添加“樣品.wav”、“葉子.wav”和“荷花”圖象文件。
最初經由過程上面的代碼把Image.db數據庫中存儲的文件名字添加到窗體的TListBox組件中:
with Table1 do
begin
First;
while not Eof do
begin
ListBox1.Items.Add(FieldByName('Name').AsString);
Next;
end;
end;
在法式運轉進程中,假如用戶在窗體的TListBox組件當選擇了圖象文件,法式會經由過程TTable組件的First辦法把數據表中的第1筆記錄作為以後記載,然後經由過程一個輪回來遍歷數據庫中的記載。假如某筆記錄中Name字段的內容和用戶的選擇雷同,那末就把該記載中Data字段中的圖象信息讀掏出來,而且把圖象顯示在窗體上的TImage組件上。代碼以下:
procedure TForm1.ListBox1Click(Sender: TObject);
var
mem:TStream;
bmp:TBitmap;
begin
with Table1 do
begin
First;
while not Eof do
begin
if FieldByName('Name').AsString=ListBox1.Items[ListBox1.ItemIndex] then
break;
Next;
end;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Data'),bmRead);
mem.Position:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.Free;
mem.Free;
end;
end;
法式代碼以下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables,mmsystem, ExtCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Table1: TTable;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
mem:TMemoryStream;
begin
if Table1.Eof and Table1.Bof then
begin
with Table1 do
begin
Insert;
FieldByName('Name').AsString:='鳥';
mem:=TMemoryStream.Create();
mem.LoadFromFile('鳥.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Post;
Insert;
FieldByName('Name').AsString:='樣品';
mem:=TMemoryStream.Create();
mem.LoadFromFile('樣品.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Post;
Insert;
FieldByName('Name').AsString:='葉子';
mem:=TMemoryStream.Create();
mem.LoadFromFile('葉子.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Post;
Insert;
FieldByName('Name').AsString:='荷花';
mem:=TMemoryStream.Create();
mem.LoadFromFile('荷花.bmp');
TBlobField(FieldByName('Data')).LoadFromStream(mem);
Post;
mem.Free;
end;
end;
with Table1 do
begin
First;
while not Eof do
begin
ListBox1.Items.Add(FieldByName('Name').AsString);
Next;
end;
end;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
mem:TStream;
bmp:TBitmap;
begin
with Table1 do
begin
First;
while not Eof do
begin
if FieldByName('Name').AsString=ListBox1.Items[ListBox1.ItemIndex] then
break;
Next;
end;
bmp:=TBitmap.Create;
mem:=CreateBlobStream(FieldByName('Data'),bmRead);
mem.Position:=0;
bmp.LoadFromStream(mem);
self.Image1.Picture.Assign(bmp);
bmp.Free;
mem.Free;
end;
end;
end.
保留文件,然後按F9鍵運轉法式,法式運轉的初始畫面如圖3所示。
在TListBox組件當選中一項後,就會顯示絕對應的圖象文件,如圖4所示。
圖3 法式運轉的初始畫面