熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

Delphi實現在數據庫中存取圖像

2013-11-11 21:06:40  來源: Delphi編程 

  本實例演示如何在數據庫中存取圖像文件

  向窗體上添加一個TListBox組件一個TImage組件和一個TTable組件設計完成的主界面如圖所示

主界面

  本系統中需要設計一個新的基於Paradox 的數據庫Imagedb為設計完成的Imagedb數據庫

設計完成的數據庫

  為了方便測試程序Imagedb數據庫存儲在實例程序所在的路徑下

  設置TTable組件的TableName屬性為ImagedbActive屬性為True

  在程序運行初期首先會判斷Imagedb數據庫中是否存在記錄如果沒有記錄存在那麼就執行以下代碼向Imagedb數據庫中添加bmp文件

procedure TFormFormCreate(Sender: TObject);
var
mem:TMemoryStream;
begin
if TableEof and TableBof then
begin
with Table do
begin
Insert;
FieldByName(Name)AsString:=;
mem:=TMemoryStreamCreate();
memLoadFromFile(bmp);
TBlobField(FieldByName(Data))LoadFromStream(mem);
Post;
end;
end;
end;

  然後按照相同的方式順序向Imagedb數據庫中添加樣品wav葉子wav荷花圖像文件

  最後通過下面的代碼把Imagedb數據庫中存儲的文件名字添加到窗體的TListBox組件中

with Table do
begin
First;
while not Eof do
begin
ListBoxItemsAdd(FieldByName(Name)AsString);
Next;
end;
end;

  在程序運行過程中如果用戶在窗體的TListBox組件中選擇了圖像文件程序會通過TTable組件的First方法把數據表中的第條記錄作為當前記錄然後通過一個循環來遍歷數據庫中的記錄如果某條記錄中Name字段的內容和用戶的選擇相同那麼就把該記錄中Data字段中的圖像信息讀取出來並且把圖像顯示在窗體上的TImage組件上代碼如下

procedure TFormListBoxClick(Sender: TObject);
var
mem:TStream;
bmp:TBitmap;
begin
with Table do
begin
First;
while not Eof do
begin
if FieldByName(Name)AsString=ListBoxItems[ListBoxItemIndex] then
break;
Next;
end;
bmp:=TBitmapCreate;
mem:=CreateBlobStream(FieldByName(Data)bmRead);
memPosition:=;
bmpLoadFromStream(mem);
selfImagePictureAssign(bmp);
bmpFree;
memFree;
end;
end;

  程序代碼如下

unit Unit;
interface
uses
Windows Messages SysUtils Variants Classes Graphics Controls Forms
Dialogs StdCtrls DB DBTablesmmsystem ExtCtrls;
type
TForm = class(TForm)
ListBox: TListBox;
Table: TTable;
Image: TImage;
procedure FormCreate(Sender: TObject);
procedure ListBoxClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form: TForm;
implementation
{$R *dfm}
procedure TFormFormCreate(Sender: TObject);
var
mem:TMemoryStream;
begin
if TableEof and TableBof then
begin
with Table do
begin
Insert;
FieldByName(Name)AsString:=;
mem:=TMemoryStreamCreate();
memLoadFromFile(bmp);
TBlobField(FieldByName(Data))LoadFromStream(mem);
Post;
Insert;
FieldByName(Name)AsString:=樣品;
mem:=TMemoryStreamCreate();
memLoadFromFile(樣品bmp);
TBlobField(FieldByName(Data))LoadFromStream(mem);
Post;
Insert;
FieldByName(Name)AsString:=葉子;
mem:=TMemoryStreamCreate();
memLoadFromFile(葉子bmp);
TBlobField(FieldByName(Data))LoadFromStream(mem);
Post;
Insert;
FieldByName(Name)AsString:=荷花;
mem:=TMemoryStreamCreate();
memLoadFromFile(荷花bmp);
TBlobField(FieldByName(Data))LoadFromStream(mem);
Post;
memFree;
end;
end;
with Table do
begin
First;
while not Eof do
begin
ListBoxItemsAdd(FieldByName(Name)AsString);
Next;
end;
end;
end;
procedure TFormListBoxClick(Sender: TObject);
var
mem:TStream;
bmp:TBitmap;
begin
with Table do
begin
First;
while not Eof do
begin
if FieldByName(Name)AsString=ListBoxItems[ListBoxItemIndex] then
break;
Next;
end;
bmp:=TBitmapCreate;
mem:=CreateBlobStream(FieldByName(Data)bmRead);
memPosition:=;
bmpLoadFromStream(mem);
selfImagePictureAssign(bmp);
bmpFree;
memFree;
end;
end;
end

  保存文件然後按F鍵運行程序程序運行的初始畫面如圖所示

  在TListBox組件中選中一項後就會顯示相對應的圖像文件如圖所示

程序運行的初始畫面

程序運行結果


From:http://tw.wingwit.com/Article/program/Delphi/201311/8527.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.