Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: При щелчке на ячейках Dbgrid загружать изображения в Image1 из БД  (Прочитано 7650 раз)
0 Пользователей и 1 Гость смотрят эту тему.
СвоЕобразнаЯ
Участник

ru
Offline Offline

« : 09-10-2010 11:19 » 

И снова здравствуйте... Прошу любить и жаловать
У меня клиентское приложение по продаже автомобилей.
Автомобили, имеющиеся в наличии выводятся в 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;
Но тут уже ошибка "неизвестная переменная", да это и понятно... Не надо
Подскажите пожалуйста, как сделать чтобы при щелчках на ячейках фотографии машин загружались и отображались нормально! Да можно...
Записан
zubr
Гость
« Ответ #1 : 09-10-2010 14:03 » 

Скорее всего формат изображений не соответствует bmp. Если это jpg, то можно сделать следующее:
1. Подключить модуль jpeg
2. Использовать объект класса TJpegImage:
Код:
var
  jpg: TJpegImage;

begin
jpg := TJpegImage.Create;
try
  jpg.LoadFromFile(FN);
  Image1.Picture.Bitmap.Assign(jpg);
finally
  jpg.Free;
end;
Записан
СвоЕобразнаЯ
Участник

ru
Offline Offline

« Ответ #2 : 09-10-2010 14:14 » 

Большое спасибо, всё заработало Улыбаюсь)
А никто не знает ли как сделать чтобы все записи отчёта были бы на одной page?
Вот в  Delphi написан у меня отчёт по запросу к БД. Всё работает нормально, но т.к. отчёт представляет из себя прайс-лист то необходимо чтобы все записи были на одной pаge и чтобы не надо было бы все страницы в каждой из которых написана всего одна строчка сто раз перещёлкивать кнопкой |>. Как это сделать? Может свойства какие-нибудь есть у RvProject1? Краснею
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #3 : 14-10-2010 15:15 » new

скорее, у бэнда должно быть свойство, типа NewPage или StartNewPage, или ещё чего-нибудь Ага за старт новой страницы отвечает не отчёт, а элементы отчёта.
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines