2014-11-29 5 views
0

나는 이번 주 초에 질문에 대답했고, 나는 XE7을 사용하고 있고 테이블에서 BLOB 필드 (Image.jpg)를로드하는 데 문제가있다. ListBox 또는 심지어 나중에 Listbox에 입력 할 수있는 변수에 저장됩니다. 문자열 필드에 대해 잘 작동하는 코드는 아래와 같습니다. 추가되는blob 필드를 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; 

이에 근무하고 난 지금 sample_2.jpg 사진의 결과로, 다음, 디스크에 이미지 파일로 디베이스의 Blob을 저장하는 디스크에서 다시로드하여 Windows에서 작동 할 수있는 프로그램을 얻을 수 목록 상자에. 나는 어디서나 파일을 저장할 수

그러나이 때문에 나는 이미지 파일을 저장할 다른 장소를 찾아야한다, 안드로이드에서 작동하지 않습니다

답변

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; 

그러나이 모든 것은 내가 별도의 질문으로 물어 내 다음 질문으로 나를 따른다 또 다른 문제를 발생시킵니다.

+0

'Stream.Position : = 0;'줄에 여분의'end;'가있는 것 같습니다. 오류가 발생 했어야하지만 실제 코드에는이 코드가 없을 수도 있습니다. –

+0

예 게시 한 후 코드에없는 것으로 나타났습니다. – Cazhou