Как загрузить из базы SQLite изображение в Timage при выборе в ListView?
База данных формата: text, img(blob)
В ListView загружены данные из колонки text.
Как при нажатии на item в ListView получить в Timage изображение соответствующее выбранному значению item?
Буду очень благодарен за пример подобного кода.
Александр Вишнев, когда загружаешь данные из БД в список, каждому итему нужно сохранять его id в базе. При клике получай id. Делай запрос указывая этот ид
Hemul GM, всё равно не понял.
Допустим, если сделать id в БД для каждой строки, и получать его совместно с текстом итема. Как мне при нажатие узнать, что при нажатие на именно этот выбранный итем, надо загрузить изображение именно из этого id...
При ...select id, text... получаю текст в listview и id строки текста в поле Tag.
но при нажатии на item в listview в выборке, например из 10 итемов все 10 item.tag = одному и тому же значению.
procedure Form1.ListView1ItemClick(const Sender: TObject;
const AItem: TListViewItem);
var
i:integer;
begin
i:=FDQuery2.FieldByName('id').AsInteger;
Label2.Text:=IntToStr(i);
end;
procedure Form1.sEdit2ChangeTracking(Sender: TObject);
var
i, id : Integer;
m,SQL,rs : string;
begin
ListView1.Items.Clear;
FDQuery2.Close;
FDQuery2.Active:=True;
FDQuery2.SQL.Clear;
SQL := 'SELECT id, text, FROM vdb WHERE text MATCH :search ORDER BY rank';
FDQuery2.SQL.Text := SQL;
FDQuery2.ParamByName('search').AsString := '^'+sEdit1.Text+'*';
FDQuery2.Open;
ListView1.BeginUpdate;
for i:=0 to FDQuery2.RecordCount -1 do
begin
mr:=(FDQuery2.FieldByName('text').AsString);
id:=(FDQuery2.FieldByName('id').AsInteger);
ListView1.Items.Add.Data['txtMain'] := mr;
ListView1.Items.Item[i].Tag:=id;
ListView1.Selected := ListView1.Items[0];
FDQuery2.Next;
end;
ListView1.EndUpdate;
end;
procedure Form1.ListView1ItemClick(const Sender: TObject;
const AItem: TListViewItem);
var
i: Integer;
imcc: string;
BlobStream: TStream;
begin
i:=AItem.Tag;
Label2.Text:=IntToStr(i);
FDQuery2.Close;
FDQuery2.SQL.Clear;
FDQuery2.SQL.Add('select imc from vdb WHERE id='+IntToStr(i));
FDQuery2.OpenOrExecute;
if
imcc='i'
then
FDQuery2.Close;
FDQuery2.SQL.Clear;
FDQuery2.SQL.Add('select imd from vdb WHERE id='+IntToStr(i));
FDQuery2.OpenOrExecute;
BlobStream := FDQuery2.CreateBlobStream(FDQuery2.FieldByName('imd'), TBlobStreamMode.bmRead);
if (FDQuery2.FieldByName('imd').AsString = FDQuery2.FieldByName('imd').AsString)
then Image1.Bitmap.LoadFromStream(BlobStream);
Panel1.Visible:=True;
Не могу прописать логику, что если imcc='' то Panel1.Visible:=False;
Hemul GM, из бд получаю содержание поля imc, если в нем содержится буква i то Panel1.Visible:=true в ином случае Panel1.Visible:=false.
Но Panel1.Visible:=false не работает.