2013-07-05 49 views
0

問候名爲「ProductImage」 我使用該列來保存位圖圖像德爾福大師:)顯示位圖圖像德爾福7個

我的表在Access 2010,列類型之一是OLE對象。

問題是,如何在Delphi 7中使用DBImage或TImage顯示該圖像? 我已經試過這

procedure TF_Search2.DBGrid1CellClick(Column: TColumn); begin Image7.Picture.Assign(DataModule1.T_Products.FieldByName('ProductImage').LoadFromFile('c:\test.jpg')); end;

這是錯誤:在這部分需要參數 'LoadFromFile(' C:\ test.jpg放在 ')' 我試着用也 「TBlobField」,但我得到的錯誤:未申報的標識符TBlobField 我讀到它應該在單位和使用。我不明白這是什麼意思。 我應該在安裝文件夾上添加什麼或什麼?

任何幫助,將不勝感激。

謝謝你

+1

「但它不工作」是遠遠不夠的。它以什麼方式失敗?錯誤消息等。 –

+0

嗨@david,謝謝你的回覆。 是的,這是錯誤的:這部分需要參數'LoadFromFile('c:\ test.jpg')' 除了那個代碼之外有什麼辦法嗎? – user1822457

+0

請修改該問題以包含缺少的詳細信息。 –

回答

2

該字段還包含一個OLE頭。我遠古時代忽略了這一點(我認爲前79個字節),但我再也找不到代碼了。但是,互聯網一如既往地擁有解決方案。 Imho這個比我的'skip'解決方案要好。

這裏就是其中之一:How to read and write images from/to an access DB (page 4)

編輯:我剛纔看到你的問題是你的語法。

procedure TF_Search2.DBGrid1CellClick(Column: TColumn); 
begin 
    Image7.Picture.Assign(DataModule1.T_Products.FieldByName('ProductImage').LoadFromFile('c:\test.jpg')); 
end; 

這是無效的delphi語法和相當混亂。 Picture.Assign方法需要一個圖片對象。所以你第一次想要做的就是從access-DB中獲取圖片。

你想從訪問數據庫中讀取圖像數據並將其顯示在圖像組件中?

請按照鏈接中的步驟操作。

編輯:我確實發現了一些很老的代碼,我修改(不能測試):

aBitmapStream := TMemoryStream.Create; 

tblDrawing_BitmapColumnBLobField.SaveToStream (aBitmapStream); 

// This hack enables Access BMP-Blobs to be imported 
aBitmapStream.Seek (78,soFromBeginning); 
myBitmap := TBitmap.Create; 
myBitmap.LoadFromStream (aBitmapStream); 

Image7.Picture.Assign (myBitmap); 

myBitmap.Free; 
aBitmapStream.Free; 
+0

嗨@alzamair, 謝謝你的鏈接。 我會試試看,結果 – user1822457

+0

這個零件有錯誤: 'function JpegStartsInBlob(PicField:TBlobField):integer; var bS:TADOBlobStream; buffer:Word; hx:string;' 錯誤:未聲明的標識符TBlobField,未聲明的標識符TADOBlobStream 這是爲什麼? – user1822457

+0

你的舊代碼像魔術一樣工作! 非常感謝@alzaimar:D – user1822457