При щелчке на ячейках Dbgrid загружать изображения в Image1 из БД

  • Автор темы Guest
  • Дата начала
G

Guest

#1
И снова здравствуйте... :rolleyes:
У меня клиентское приложение по продаже автомобилей.
Автомобили, имеющиеся в наличии выводятся в DBGrid (25 разных записей).
При щелчке на ячейке с названием машины на форме должна возникать фотография этой машины, которая должна загружаться из БД (объект Image1), в БД есть поле Photo (тип-текстовый), где прописан путь к изображению (напр.: L:\Проектир_ИС_лаб\bmw.bmp)
Вот как я пыталась это сделать:

Код:
unit LAB6Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, RpRender, RpRenderHTML, RpCon,
RpConDS, RpDefine, RpRave, DB, ADODB, Grids, DBGrids;

type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
RvProject1: TRvProject;
RvDataSetConnection1: TRvDataSetConnection;
RvRenderHTML1: TRvRenderHTML;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Memo1: TMemo;
BitBtn3: TBitBtn;
RvProject2: TRvProject;
RvDataSetConnection2: TRvDataSetConnection;
Image1: TImage;
Label1: TLabel;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
DataSource1: TDataSource;
DataSource2: TDataSource;
procedure BitBtn1Click(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject); {информация о моделях, имеющихся в наличии}
begin
ADOQuery1.Active:=False;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT Name, Price, Data, Comments, Photo');
ADOQuery1.SQL.Add('FROM Table1');
ADOQuery1.Open;
ADOQuery1.Active:=True;
end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
FN: string;
begin
Label1.Caption:=ADOQuery1.FieldByName('Name').AsString;
Memo1.Lines.Text:=ADOQuery1.FieldByName('Comments').AsString;
FN:=ADOQuery1.FieldByName('Photo').AsString;
if FileExists(FN) then
Image1.Picture.LoadFromFile(FN);
end;
end.
Но программа вылетает с ошибкой raised exception class Einvalid Graphic with message 'Bitmap image is not valid'
Также пробовала делать
Код:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Label1.Caption:=ADOQuery1.FieldByName('Name').AsString;
Memo1.Lines.Text:=ADOQuery1.FieldByName('Comments').AsString;
Image1.Picture.LoadFromFile(Table1.FieldByname('Photo').AsString);
end;
Но тут уже ошибка "неизвестная переменная", да это и понятно... <_<
Подскажите пожалуйста, как сделать чтобы при щелчках на ячейках фотографии машин загружались и отображались нормально! :what?:
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#2
А разве нету компонента по типу dbimage?

Добавлено: А и еще. В папке дельфей(ну или там куда вы при утсановке сказали установить common files) есть папка демос. Там есть пример работы со стандартной базой, и там есть картинки.. С рыбками)
 

DarkKnight

Well-known member
01.08.2010
653
0
#3
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Label1.Caption:=ADOQuery1.FieldByName('Name').AsString;
Memo1.Lines.Text:=ADOQuery1.FieldByName('Comments').AsString;
Image1.Picture.LoadFromFile(Table1.FieldByname('Photo').AsString);
end;
Вообще смысл и подход верный, можно и так, можно через событие TADOTable (ADOTable1AfterScroll), обязательно проверить сначало на существование файла....
А вообще хочется увидить работу результат : ShowMessage(Table1.FieldByname('Photo').AsString);

Но тут уже ошибка "неизвестная переменная", да это и понятно...
Хм... а какая там переменная неизвестная????