Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2014, 21:36   #1
WarPig
Пользователь
 
Регистрация: 14.06.2014
Сообщений: 11
По умолчанию Фильтрация

Здравствуйте. В общем, имеется БД MS Access, в которой 4 таблицы: delivery(id, stock_num, asset_name, id_sort, amount, id_units, sum, del_date, id_pic), units(id, unit_name), sort(id, sort_name, sort_number) и pic(id, pic_name, pic_post). Таблицы units, sort и pic являются справочниками для таблицы delivery (думаю, понятно, по каким полям они связаны). В Delphi создал форму для добавления/удаления данных, в которой находится DBGrid, кнопки и компоненты для работы с БД. В ADOTable таблицы delivery для отображения в DBGrid скрыл поля id, id_sort, id_units, id_pic; но добавил LookUp поля sort, units, pic, в которых данные из одноименных таблиц нужных мне полей. Занес данные в таблицу. Далее, на другой форме имеется DBGrid, DBLookupComboBox, ADOQuery и два DataSource. DBLookupComboBox принимает данные из таблицы sort. Мне нужно сделать так, чтобы при выборе в DBLookupComboBox в DBGrid отображались записи, в которых есть выбранное название.
Написал такой код:
Код:
procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
begin
ADOQuery1.SQL.text:='select * from delivery where sort='+char(39)+''+DBLookupComboBox1.text+''+char(39) +'';
ADOQuery1.Open;
end;
Думал, прокатит, но в delivery нет поля sort, я его создал только для отображения в DBGrid.
Я в БД нуб и, в основном, все делал по примерам.
WarPig вне форума Ответить с цитированием
Старый 15.06.2014, 08:21   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Для простоты переделаем ADOQuery на ADOTable для DBLookupComboBox (хотя, и квери здесь ни в чем не провинился).
В инспекторе объектов (называют "время разработки" или "design-time") делаем следующие манипуляции:
- ADOTable1.TableName = sort (не забыв указать в свойстве Connection что требуется)
- Datasource1.DataSet = ADOTable1
- DBLookupComboBox.ListSource = Datasource1;
- DBLookupComboBox.KeyField = id
- DBLookupComboBox.ListField = sort_name

При создании формы не забываем активировать ADOTable1.
Теперь не понадобится создавать лишнее поле sort в таблице delivery:
Код:
ADOQuery1.SQL.text:='select * from delivery where id_sort='+IntToStr(DBLookupComboBox1.KeyValue);
Прик вне форума Ответить с цитированием
Старый 15.06.2014, 13:01   #3
WarPig
Пользователь
 
Регистрация: 14.06.2014
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
Для простоты переделаем ADOQuery на ADOTable для DBLookupComboBox (хотя, и квери здесь ни в чем не провинился).
В инспекторе объектов (называют "время разработки" или "design-time") делаем следующие манипуляции:
- ADOTable1.TableName = sort (не забыв указать в свойстве Connection что требуется)
- Datasource1.DataSet = ADOTable1
- DBLookupComboBox.ListSource = Datasource1;
- DBLookupComboBox.KeyField = id
- DBLookupComboBox.ListField = sort_name

При создании формы не забываем активировать ADOTable1.
Теперь не понадобится создавать лишнее поле sort в таблице delivery:
Код:
ADOQuery1.SQL.text:='select * from delivery where id_sort='+IntToStr(DBLookupComboBox1.KeyValue);
Спасибо большое
Еще такой вопрос: а если этих комбобоксов будет два, чтобы фильтровали по двум полям, то есть один фильтрует результат фильтрации второго и наоборот. Как это можно организовать?
WarPig вне форума Ответить с цитированием
Старый 15.06.2014, 21:08   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
... where id_sort='+IntToStr(DBLookupComboBox1.KeyValue) + 
  ' and  id_sort2 ='+IntToStr(DBLookupComboBox2.KeyValue);
идея понятна?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.06.2014, 21:50   #5
WarPig
Пользователь
 
Регистрация: 14.06.2014
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
... where id_sort='+IntToStr(DBLookupComboBox1.KeyValue) + 
  ' and  id_sort2 ='+IntToStr(DBLookupComboBox2.KeyValue);
идея понятна?
Делал так же, но вылетала ошибка, теперь понял, в чем была была проблема.
Всем спасибо!
WarPig вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация prod Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 16.01.2013 14:56
Фильтрация delfin07 БД в Delphi 0 04.01.2013 12:20
Фильтрация auffasst Общие вопросы Delphi 3 21.06.2010 18:10
Фильтрация Tvik БД в Delphi 21 10.03.2010 13:22
Фильтрация Лукманов Александр БД в Delphi 1 26.06.2008 10:18