<track id="pdikh"><span id="pdikh"><em id="pdikh"></em></span></track>
<track id="pdikh"></track>

<bdo id="pdikh"></bdo><tbody id="pdikh"><nobr id="pdikh"><address id="pdikh"></address></nobr></tbody>
  • <bdo id="pdikh"></bdo>

    <menuitem id="pdikh"><dfn id="pdikh"></dfn></menuitem>

    <tbody id="pdikh"></tbody>
    1. 首頁 > 編程 > Delphi > 正文

      在Delphi實現在數據庫中存取圖像的圖文演示無錯

      2020-01-31 20:52:48
      字體:
      來源:轉載
      供稿:網友

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

      向窗體上添加一個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 程序運行的初始畫面

      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表

      圖片精選

      www con.co.三级免费视频不卡丨秋霞中文不卡无码午夜av影院丨丨吉沢明步高清无码电影免费一区二区丨japanese色国产在线观看
      <track id="pdikh"><span id="pdikh"><em id="pdikh"></em></span></track>
      <track id="pdikh"></track>

      <bdo id="pdikh"></bdo><tbody id="pdikh"><nobr id="pdikh"><address id="pdikh"></address></nobr></tbody>
    2. <bdo id="pdikh"></bdo>

      <menuitem id="pdikh"><dfn id="pdikh"></dfn></menuitem>

      <tbody id="pdikh"></tbody>