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

Тема в разделе "Delphi - FAQ", создана пользователем -, 9 окт 2010.

  1. Гость

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

    Код (Delphi):
    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'
    Также пробовала делать
    Код (Delphi):
    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?:
     
  2. vital

    vital Больной Компом Детектед
    Команда форума

    Регистрация:
    29 янв 2006
    Сообщения:
    2.434
    Симпатии:
    18
    Счет:
    0,00. руб
    А разве нету компонента по типу dbimage?

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

    DarkKnight Модератор
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Счет:
    0,00. руб
    Вообще смысл и подход верный, можно и так, можно через событие TADOTable (ADOTable1AfterScroll), обязательно проверить сначало на существование файла....
    А вообще хочется увидить работу результат : ShowMessage(Table1.FieldByname('Photo').AsString);

    Хм... а какая там переменная неизвестная????
     

Поделиться этой страницей