首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 實作資料庫圖像存取(Paradox + BLOB 欄位)

     編輯:Delphi

範例概述

示範如何在資料庫中存取圖像檔案。使用元件:TListBox(顯示檔案清單)、TImage(顯示圖像)、TTable(資料集)。主介面如圖 1。

主介面

圖 1 主介面

資料庫設計

建立基於 Paradox 7 的 Image.db,結構如圖 2:含 Name(字串)與 Data(BLOB)兩欄位。

資料庫設計

圖 2 設計完成的資料庫

資料庫置於程式同目錄。TTable.TableName = 'Image.db',Active = True。

程式邏輯

1. 表單建立時初始化資料(FormCreate)

若資料表為空(EOF and BOF),依序插入四筆圖像記錄(鳥.bmp、樣品.bmp、葉子.bmp、荷花.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;

      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;

  // 將資料表所有 Name 欄位填入 ListBox
  with Table1 do begin
    First;
    while not Eof do begin
      ListBox1.Items.Add(FieldByName('Name').AsString);
      Next;
    end;
  end;
end;

2. ListBox 點選顯示圖像(ListBox1Click)

遍歷資料表尋找對應 Name,讀取 BLOB 欄位資料流,載入 TBitmap 指派給 Image1.Picture:

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);
    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, 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}
{ FormCreate 與 ListBox1Click 實作同上 }
end.

執行結果

  • 初始畫面:ListBox 列出四個圖像名稱(圖 3)。
  • 選取項目後,Image 顯示對應圖像(圖 4)。

程式執行初始畫面

圖 3 程式執行初始畫面

程式執行結果

圖 4 程式執行結果

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved