2013-09-01 107 views
0

我試圖從數據庫中的特定位置將圖片加載到圖像,但是我的代碼正在運行,導致我無法解決一些問題。將Access數據庫中的圖片加載到TImage組件

基本上我想在一個應用程序中加載一個由唯一ID指定的圖像,該應用程序針對具有不同帳戶的不同用戶。圖像應該基本上加載用戶以前保存的圖片。

所以首先我用下面的查詢,以確定我需要的圖片:

procedure TForm12.BitBtn1Click(Sender: TObject); 
begin 
    with ADOQuery7 do 
    begin 
    Close; 
    Sql.Clear; 
    Sql.Add('SELECT Profile_Picture FROM profile WHERE username='+QuotedStr(edit12.text)); 
    Open; 
    end; 
end; 

,工作正常,確實針對具有與指定的用戶名的圖像領域。然後,我使用以下內容將圖片加載到空的TImage中:

procedure TForm12.BitBtn2Click(Sender: TObject); 
var 
    AStream: TMemoryStream; 
begin 
    AStream := TMemoryStream.Create; 
    try 
    if ADOquery7.Active then 
    begin 
     TBlobField(ADOQuery7.FieldByName('Profile_Picture')).SaveToStream(AStream); 
     AStream.Position := 0; 
     Image6.Picture.Graphic.LoadFromStream(AStream); 
    end; 
    finally 
    AStream.Free; 
    end; 

end;

但我總是得到訪問衝突錯誤。任何人都有什麼想法是什麼問題? 我加載圖像的文件存儲在一個OLE Object-column中。

+0

請注意,您的代碼容易發生[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)攻擊。你可以找到一個更有趣的解釋[這裏](http://stackoverflow.com/q/332365/859646)和一個方法來克服Delphi的ADO [這裏](http://stackoverflow.com/questions/16924629/parameters -in-SQL的Delphi-7)。 – JRL

回答

1

然後我使用下面的圖象裝載到空的TImage:

Image5.Picture然後也是空的,圖形對象尚未分配;你不能撥打LoadFromStream就可以了。

您必須知道圖形類型,創建並加載該圖形,然後將其分配給圖像組件,例如shown in this answer

相關問題