【问题标题】:Load a picture from an Access database to a TImage component将图片从 Access 数据库加载到 TImage 组件
【发布时间】:2013-09-01 17:13:05
【问题描述】:

我正在尝试将图片从数据库中的特定位置加载到图像中,但我的代码遇到了一些我无法解决的问题。

基本上,我想在适用于不同帐户的不同用户的应用程序中加载由唯一 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;

结束;

但我总是收到访问冲突错误。任何人有任何想法是什么问题? 我从中加载图像的文件存储在 OLE 对象列中。

【问题讨论】:

  • 请注意您的代码容易受到SQL injection 攻击。您可以找到更有趣的解释 here 以及使用 Delphi 的 ADO here 克服的方法。

标签: image delphi ms-access load delphi-7


【解决方案1】:

然后我使用以下方法将图片加载到空的 TImage 中:

那么Image5.Picture也是空的,Graphic对象还没有赋值;你不能打电话给LoadFromStream

您必须知道图形类型,创建并加载该图形,然后将其分配给 Image 组件,例如 shown in this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多