TClientDataSet (記憶體資料集)ftGraphic 欄位型別 (對應 TGraphicField)c:\temp\test1.bmp, c:\temp\test2.bmpunit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBClient;
type
TForm1 = class(TForm)
ClientDataSet1: TClientDataSet;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
PicPath1 = 'c:\temp\test1.bmp';
PicPath2 = 'c:\temp\test2.bmp';
procedure TForm1.FormCreate(Sender: TObject);
begin
{ 建立資料表結構 }
with ClientDataSet1 do begin
FieldDefs.Add('Name', ftWideString, 8);
FieldDefs.Add('Age', ftInteger);
FieldDefs.Add('Picture', ftGraphic); // 圖片欄位
CreateDataSet;
end;
{ 新增第一筆資料 }
ClientDataSet1.Append;
ClientDataSet1['Name'] := '張三';
ClientDataSet1['Age'] := 66;
TGraphicField(ClientDataSet1.FieldByName('Picture')).LoadFromFile(PicPath1);
ClientDataSet1.Post;
{ 新增第二筆資料 }
ClientDataSet1.Append;
ClientDataSet1['Name'] := '李四';
ClientDataSet1['Age'] := 16;
TGraphicField(ClientDataSet1.FieldByName('Picture')).LoadFromFile(PicPath2);
ClientDataSet1.Post;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
BlobStream: TClientBlobStream;
GraphicField: TGraphicField;
Bitmap: TBitmap;
begin
{ 查找指定記錄 }
if ClientDataSet1.Locate('Name', '李四', []) then
begin
{ 取得 Graphic 欄位 }
GraphicField := ClientDataSet1.FieldByName('Picture') as TGraphicField;
{ 建立 Blob 讀取流 }
BlobStream := TClientBlobStream.Create(GraphicField, bmRead);
try
{ 載入至 TBitmap 顯示 }
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromStream(BlobStream);
Canvas.Draw(10, 10, Bitmap); // 直接繪於表單畫布示範
finally
Bitmap.Free;
end;
finally
BlobStream.Free;
end;
end;
end;
end.
ftGraphic 專為圖形物件 (TPicture/TGraphic) 設計,自動處理圖檔標頭;ftBlob 為通用二進位資料,需自行管理格式。bmRead/bmWrite/bmReadWrite 決定存取模式。TGraphic 註冊格式。try...finally 釋放流與位圖物件,避免記憶體洩漏。TDataSetProvider + TSQLConnection 將含圖片資料寫入 SQL Server VARBINARY(MAX) / IMAGE 欄位。ftGraphic 欄位,同樣流程處理。TJPEGImage 壓縮再 SaveToStream,大幅減少空間。TBlobField / TStream)。Locate 區分大小寫視 Options 屬性而定,實務上常搭配主鍵查找。利用 TClientDataSet 的 ftGraphic 欄位搭配 TGraphicField.LoadFromFile 與 TClientBlobStream,可輕鬆實現圖片在記憶體資料集中的儲存、讀取與顯示。此模式適用於桌面應用的離線資料處理、報表列印預覽、本地快取等場景。