将blob字段加载到ListBox中

时间:2014-11-29 20:59:25

标签: delphi listbox firedac delphi-xe7

我在本周早些时候回答了一个问题,我需要进一步处理我使用XE7的问题,我在将一个blob字段(Image.jpg)从表格加载到ListBox或甚至变量变量时遇到问题我可以稍后进入列表框。我的代码适用于字符串字段,如下所示。

// draw address line and postcode to listbox
ListBox2.Clear;
ListBox2.BeginUpdate;
// Read From Database to Listbox
FDQueryUpdate.Close;
FDQueryUpdate.SQL.Text := 'SELECT Address1, Postcode, Photo FROM Address';
try
  FDQueryUpdate.Open;
  Item := TlistBoxItem.Create(ListBox2);
  while not FDQueryUpdate.Eof do
  begin
  // create and format listbox to show bottomdetail
    Item := TlistBoxItem.Create(ListBox2);
    Item.StyleLookup := 'listboxitembottomdetail';
    // draw address to text part and postcode to bottom detail of Listbox item
    Item.Text := (FDQueryUpdate.Fields[0].AsString);
    Item.ItemData.Detail := (FDQueryUpdate.Fields[1].AsString);

    TBlobField(FDQueryUpdate.FieldByName('Photo')).SaveToFile('c:\sample_2.jpg');
    Item.ItemData.Bitmap.LoadFromFile('c:\sample_2.jpg');

    ListBox2.AddObject( Item );
    FDQueryUpdate.Next;
  end;
finally
ListBox2.EndUpdate;
FDQueryUpdate.Close;
end;

一直在研究这个问题,我现在可以通过将DBase Blob保存为光盘上的图像文件,然后从光盘重新加载它来使程序在Windows中工作,从而将sample_2.jpg图片添加到列表框中。

然而,这在Android中不起作用,因为我无法将文件保存在任何地方,因此我必须找到一些其他地方来保存图像文件

1 个答案:

答案 0 :(得分:0)

管理来破解我的问题,请使用blob流查看下面的代码:

var
  Stream: TStream;

// draw address line and postcode to listbox
ListBox2.Clear;
ListBox2.BeginUpdate;
// Read From Database to Listbox
FDQueryUpdate.Close;
FDQueryUpdate.SQL.Text := 'SELECT Address1, Postcode, Photo FROM Address';
try
  FDQueryUpdate.Open;
  Item := TlistBoxItem.Create(ListBox2);
  while not FDQueryUpdate.Eof do
  begin
    // create and format listbox to show bottomdetail
    Item := TlistBoxItem.Create(ListBox2);
    Item.StyleLookup := 'listboxitembottomdetail';
    // draw address to text part and postcode to bottom detail of Listbox item
    Item.Text := (FDQueryUpdate.Fields[0].AsString);
    Item.ItemData.Detail := (FDQueryUpdate.Fields[1].AsString);
    // prefer using blob stream this way
    Stream := FDQueryUpdate.CreateBlobStream(FDQueryUpdate.FieldByName('Photo'), bmRead);
    try
      Item.ItemData.Bitmap.LoadFromStream(Stream);
    finally
      Stream.Free;
    end;

    ListBox2.AddObject(Item);
    FDQueryUpdate.Next;
  end;
finally
  ListBox2.EndUpdate;
  FDQueryUpdate.Close;
end;

然而,所有这些都引发了另一个问题,我要问这是一个单独的问题,请跟我到下一个问题。