2013-02-06 62 views
0

爲什麼不工作的代碼:數據庫圖像的TImage

保存圖像就是用這個代碼(也是我在報告中看到的圖像)的罰款:

gallery.append; 
    gallery.FieldByName('Image').Assign(pic.Picture.Bitmap); 
    gallery.post; 

但是這個代碼:

Gallery.Insert; 
S := CreateBlobStream(gallery.FieldByName('Image'), bmWrite); 
Image1.Picture.Bitmap.SaveToStream(S); 
gallery.Post; 
S.Free; 

導致錯誤「數據集未處於編輯或插入模式」。所以我用了第一個。

但得到它回到在TImage中的形式導致「無效的位圖格式」

var S : TStream ; 
s := gallery.CreateBlobStream(gallery.FieldByName('Image'), bmRead); 
Pic.Picture.Bitmap.LoadFromStream(S); 
s.Free; 

錯誤顯示任何圖像。我也嘗試了使用來自About.com的教程的DBimage,並不斷收到錯誤。 數據庫是Access 2010,圖像字段是OLE(blob)。 有點卡住了。

小號

+0

嘗試將s的位置設置爲0後,從字段中讀取並在加載位圖之前,在最後一個片段中。 –

+0

' var S:TStream; s:= gallery.CreateBlobStream(gallery.FieldByName('Image'),bmRead); s.position:= 0; Pic.Picture.Bitmap.LoadFromStream(S); s.Free; 仍然給出錯誤「位圖圖像無效」 – Sardukar

+0

順便說一句大多數教程說我應該添加JPEG到我的用途......當我這樣做時,我得到的JPEG下劃線與紅色捲曲線與錯誤..所以我認爲教程已過時。 – Sardukar

回答

0

我弄明白:

這是怎麼了,你可以從一個Access數據庫的TImage顯示JPG圖片:

  1. Access數據庫字段是OLE(或BLOB) 。
  2. 使用該代碼保存圖片到數據庫

    gallery.append; gallery.FieldByName('Image')。Assign(pic.Picture.Bitmap); gallery.post;

該圖庫是包含圖像的AdoTable和Image是Access字段名稱。 現在要顯示的圖像返回到Delphi的TImage組件:uses子句中 1.包含單元用途(文件--use單元)把一個:

Uses Jpeg 

然後使用此代碼以顯示圖像:

var 
jpg:TJPegImage; 

begin 
jpg :=TjpegImage.Create; 
jpg.Assign(TblobField(gallery.FieldByName('Image'))); 
pic.Picture.Bitmap.Assign(jpg); 
jpg.Free; 
end; 

這有多酷。