0

今週初めに質問に答えてもらいましたが、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 では機能しません。したがって、画像ファイルを保持する別の場所を見つける必要があります。

4

1 に答える 1

0

問題を解決できました。ブロブ ストリームを使用した以下のコードを参照してください。

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;

ただし、これらすべてが別の問題を引き起こします。別の質問として尋ねます。次の質問に進んでください。

于 2014-11-30T21:54:12.390 に答える