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, type var procedure TForm1.FormCreate(Sender: TObject); procedure TForm1.ListBox1Click(Sender: TObject); end. |
儲存檔案,然後按F9鍵執行程式,程式執行的初始畫面如圖3所示。
在TListBox元件中選中一項後,就會顯示相對應的影象檔案,如圖4所示。
圖3 程式執行的初始畫面
|