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

Delphi 圖像存取資料庫替代方案:Assign 方法處理 JPEG/BMP 欄位

     編輯:Delphi

Assign 方法優於 Stream 的適用場景

前文介紹的 TStream 方案適用 Access/SQL Server,但 Paradox 資料庫的 Graphic 欄位無法使用 Stream 讀寫。利用 TPicture.Graphic.Assign 直接指派圖像物件,可跨資料庫類型通用(含 Paradox)。

核心實作代碼

1. 選擇圖像並儲存至資料庫:

procedure TForm1.SelectImageClick(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
    Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;

procedure TForm1.SaveToDBClick(Sender: TObject);
var Ext: String;
begin
  if Image1.Picture.Graphic <> nil then
  begin
    ADOTable1.Edit;
    ADOTable1.FieldByName('MyImage').Assign(Image1.Picture.Graphic); // 關鍵:直接指派
    Ext := UpperCase(ExtractFileExt(OpenPictureDialog1.FileName));
    if Ext = '.BMP' then
      ADOTable1.FieldByName('IsBmp').Value := 1
    else if (Ext = '.JPG') or (Ext = '.JPEG') then
      ADOTable1.FieldByName('IsBmp').Value := 0;
    ADOTable1.Post;
  end;
end;

2. 讀取資料庫並顯示(AfterScroll 事件):

procedure TForm1.ADOTable1AfterScroll(DataSet: TDataSet);
var JpegImage: TJPEGImage;
begin
  Image1.Picture.Graphic := nil;
  if ADOTable1.FieldByName('IsBmp').AsString = '1' then // BMP
    Image1.Picture.Bitmap.Assign(ADOTable1.FieldByName('MyImage')) // 必須用 Bitmap
  else if ADOTable1.FieldByName('IsBmp').AsString = '0' then // JPEG
  begin
    JpegImage := TJPEGImage.Create;
    try
      JpegImage.Assign(ADOTable1.FieldByName('MyImage'));
      Image1.Picture.Graphic := JpegImage;
    finally
      JpegImage.Free;
    end;
  end;
end;

關鍵技術細節

  • uses 子句必須包含 JPEG 單元
  • BMP 讀取時 必須使用 Picture.Bitmap.Assign,不可用 Picture.Graphic.Assign,否則報錯
  • JPEG 讀取需建立 TJPEGImage 中介物件,指派後設定給 Picture.Graphic
  • 儲存時記錄副檔名對應的 IsBmp 標誌(0=JPEG, 1=BMP, 其他=無圖像)

此方案在 Delphi 6.0 + SQL/Access/Paradox 測試通過,為跨資料庫圖像存取提供更通用的解決路徑。

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