Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.10.2010, 14:13
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
Подмигивание При щелчке на ячейке DBGrid загружать изображение в Image1 из БД

И снова здравствуйте...
У меня клиентское приложение по продаже автомобилей.
Автомобили, имеющиеся в наличии выводятся в DBGrid.
При щелчке на ячейке с названием машины на форме должна возникать фотография этой машины, которая должна загружаться из БД (объект Image1), в БД есть поле Photo (тип-текстовый), где прописан путь к изображению (напр.: L:\Проектир_ИС_лаб\bmw.bmp). Как это сделать, подскажите пожалуйста!
Ответить с цитированием
  #2  
Старый 09.10.2010, 14:40
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Классика жанра)
Берёшь Image1 с панели additional. Visible:=false;
В коде на

Код:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Image1.Picture.LoadFromFile('');
Image1.Top:=;
Image1.Left:=;
Image1.Visible:=true;
end;

Image можно поместить где-то просто на форме, а можно просчитать форматы колонки по которой прошёлся клик, и подставить картинку туда
Ответить с цитированием
  #3  
Старый 09.10.2010, 14:44
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

Спасибо за отклик Бесспорно это всё верно, но у меня в БД 20 записей о разных моделях автомобилей и соответственно фотографии у каждой тоже разные
Ответить с цитированием
  #4  
Старый 09.10.2010, 14:52
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Код:
Image1.Picture.LoadFromFile('');
Вместо кавычек подставляете значение того поля, в котором у вас храниться "путь" к файлу. Я же так понял у вас в БД есть поле Photo с "путём" к этой картинке. Вот и вытаскивайте его от туда

Что то вроде
Код:
Image1.Picture.LoadFromFile(Table1.FieldByname('Photo').AsString);

Последний раз редактировалось Uniq!, 09.10.2010 в 14:55.
Ответить с цитированием
  #5  
Старый 09.10.2010, 15:02
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

Просто так из таблицы невозможно взять ресурс, Дельфи видит её как переменную, а не как таблицу. Ну ладно, спасибо за идеи, буду думать.
Ответить с цитированием
  #6  
Старый 09.10.2010, 15:16
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Что значит нельзя? o.O
Напишите связку по какому пинципу вы связываете данные и по какому драйверу?

Table1 это лишь пример. Если вы используете Query поставляйте query или ADOQuery?
всё зависит от структуры вашей связки
Ответить с цитированием
  #7  
Старый 09.10.2010, 15:31
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

ADOConnection1 связан с БД Avto.mdb
ADOQuery1 связан с ADOConnection1
DataSource1 связан с ADOQuery1
Код:
Image1.Picture.LoadFromFile(ADOQuery1.FieldByname('Photo').AsString);
И вновь та же самая ошибка(
Ответить с цитированием
  #8  
Старый 09.10.2010, 15:32
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

Код:
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);}

Image1.Picture.LoadFromFile(ADOQuery1.FieldByname('Photo').AsString);
end;
end.
Ответить с цитированием
  #9  
Старый 09.10.2010, 15:49
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

а ошибка то какая?)
Не вижу ни кода ни сообщения.

Скорее всего формат загружаемый <> доступным для Image1

Последний раз редактировалось Uniq!, 09.10.2010 в 16:00.
Ответить с цитированием
  #10  
Старый 09.10.2010, 16:02
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

Ошибка raised exception class Einvalid Graphic with message 'Bitmap image is not valid'.
Ответить с цитированием
  #11  
Старый 09.10.2010, 16:03
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

ЧТД (что и требовалось доказать)

Картинки загружаются какие? jpeg или БМП?
Ответить с цитированием
  #12  
Старый 09.10.2010, 16:06
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

По заданию написанному в методичке необходимо bmp, ну и у меня соответственно bmp
Ответить с цитированием
  #13  
Старый 09.10.2010, 16:12
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Так мой косяк.

В целом и общем: можно сделать так:
Вытасикваем вместо TImage
Код:
DBImage:

Его свойства:
 DataSource: DataSource1
 DataField: Photo
И в БД тип поля должен быть не String а Graphic

Кода никакого, ибо загрузка идёт по стандартной навигации

С Memo и Label советую сделать так же. DBMemo1 вместо Memo1 и DBLabel вместо Label свойства теже
DataSource : datasource1
DataField: Comments

DataSource : datasource1
DataField: Name
Стандартная база по имени: biolife.db
Там рыбки в виде graphic
Откройте и посомтри что за поле типа graphic и как оно содавалось.

Последний раз редактировалось Uniq!, 09.10.2010 в 16:17.
Ответить с цитированием
  #14  
Старый 09.10.2010, 16:16
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

Всё, разобралась, огромное спасибо :-*
Ответить с цитированием
  #15  
Старый 09.10.2010, 16:25
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Есть только одно замечание, если вы по совету Уника сохраняете фотку в БД, то делайте это в отдельной таблице и загружайте данные из нее по мере надобности, а не подобным запросом:
Код:
SELECT Name, Price, Data, Comments, Photo
Ибо тянуть вы будете кучу ненужных вам в данный момент фоток.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:47.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025