image欄位及TBlobField配合參數的sql command存取方法

有關Delphi 的語法, 程式, 等
回覆文章
頭像
tim
文章: 1318
註冊時間: 2008年 11月 26日, 00:49

image欄位及TBlobField配合參數的sql command存取方法

文章 tim » 2008年 11月 28日, 16:06

BDE, SQL Server, image, TBlobField, Params

http://delphi.ktop.com.tw/topic.asp?TOPIC_ID=64122

這種欄位一般是用 TBlobField 來處理, 配合 TMemoryStream 來進行會比較理想, 請參考,

代碼: 選擇全部

var
 ms: TMemoryStream;
 size: integer;
...
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('INSERT INTO B ');
Query.SQL.Add(' (ID, NAM, PCT, PRICE) ');
Query.SQL.Add('valueS ');
Query.SQL.Add(' (:ID, :NAM, :PCT, :PRICE) ');
Query.ParamByName('ID').value = A.FieldByName('ID').value;
Query.ParamByName('NAM').Valie = A.FieldByName('NAM').value;

size := TBlobField(A.FieldByName('PCT')).BlobSize;
ms := TMemoryStream.Create;
ms.Size := size;
TBlobField(A.FieldByName('PCT')).SaveToStream(ms);
Query.ParamByName('PCT').SetBlobData(ms.Memory, ms.Size);

Query.ParamByName('PRICE').value = A.FieldByName('PRICE').value;
Query.ExecSQL;
ms.Free;
但仍提醒, 除了效能上會較差外, 還得注意到使用 BDE 這組資料存取時, 對於 Blob 資料的預設大小為 32k, 若該欄位資料會大於 32k時, 請在 TDatabase 元件上的 BLOB SIZE 設為更大, 如 1024 就有 1mb 囉, 請特別注意!!
多多留言, 整理文章, 把經驗累積下來.....

回覆文章