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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2014, 14:55   #1
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию Фильтр по двум таблицам

есть БД, в ней несколько таблиц, связь один ко многим. Как организовать фильтр в двух определенных таблицах по разным столбцам.
вот мои код который делает фильтр по одной таблице. Как сделать фильтр по двум таблицам. Условие для фильтрации задается через EDIT.


Код:
begin
   If Length(Edit1.Text)>0 then
  begin
  Datamodule2.ADOTable1.filtered:=false;
  Datamodule2.ADOTable1.filter:='[Tab_nomer] LIKE '+ #39 + '%' + Edit1.Text + '%' + #39;
  Datamodule2.ADOTable1.filtered:=true;
  end;
end;
Scorpuha вне форума Ответить с цитированием
Старый 10.02.2014, 15:21   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

1 ADOTable = 1 таблица.
К сожалению, не совсем понятна постановка задачи. В самом общем случае, если доступ к обеим таблицам через ADOTable, то добавьте аналогичный код для 2й таблицы.
Для того, чтобы можно было подсказать что-либо определённое, полнее раскройте тему. Эти 2 таблицы связаны с 2мя отдельными DBGrid'ами? Какая структура БД? И т.д.
Streletz вне форума Ответить с цитированием
Старый 10.02.2014, 15:53   #3
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

если добавляю аналогичный код для второй таблицы то выдает ошибку "не удается открыть фильтр"

Код:
begin
   If Length(Edit1.Text)>0 then
  begin
  Datamodule2.ADOTable1.filtered:=false;
  Datamodule2.ADOTable1.filter:='[Tab_nomer] LIKE '+ #39 + '%' + Edit1.Text + '%' + #39;
  Datamodule2.ADOTable1.filtered:=true;
  Datamodule2.Attestat.filtered:=false;
  Datamodule2.Attestat.filter:='[Id_sotrud] LIKE '+ #39 + '%' + Edit1.Text + '%' + #39;
  Datamodule2.Attestat.filtered:=true;

  end
База Аксесс, для двух таблиц два отдельных ДБгрида.
Scorpuha вне форума Ответить с цитированием
Старый 10.02.2014, 16:12   #4
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

разобрался, во втором варианте фильтрации поправил код на
Код:
Datamodule2.Attestat.filtered:=false;
  Datamodule2.Attestat.filter:='[Id_sotrud]='+ Edit1.Text;
  Datamodule2.Attestat.filtered:=true;
т.к. поле Id_sotrud имеет тип числовой, а поле Tab_nomer - текстовый
Scorpuha вне форума Ответить с цитированием
Старый 11.02.2014, 16:47   #5
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Я конечно не знаю вашей постановки задачи, но как-то это всё не правильно выглядет, фильтруются две табилцы по разным полям, причём одно явно ади и параметр для фильтров один и тот же, мб вы постановке не совсем правильн опоняли? не может быть ади сотр равным табельному номеру...
Dozent вне форума Ответить с цитированием
Старый 11.02.2014, 16:54   #6
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

тут тоже решил задачку, пришлось добавлять в таблицу Attestat поле Tabel и организовывать новые связи.
Scorpuha вне форума Ответить с цитированием
Старый 11.02.2014, 17:14   #7
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от Scorpuha Посмотреть сообщение
если добавляю аналогичный код для второй таблицы то выдает ошибку "не удается открыть фильтр"

Код:
begin
   If Length(Edit1.Text)>0 then
  begin
  Datamodule2.ADOTable1.filtered:=false;
  Datamodule2.ADOTable1.filter:='[Tab_nomer] LIKE '+ #39 + '%' + Edit1.Text + '%' + #39;
  Datamodule2.ADOTable1.filtered:=true;
  Datamodule2.Attestat.filtered:=false;
  Datamodule2.Attestat.filter:='[Id_sotrud] LIKE '+ #39 + '%' + Edit1.Text + '%' + #39;
  Datamodule2.Attestat.filtered:=true;

  end
База Аксесс, для двух таблиц два отдельных ДБгрида.
Я бы заменил ADOTable1 на ADOQuery и объединил с помощью конструкция JOIN . Но если для вас проще использовать ADOTable1 . То учитесь Lookup http://basicsprog.ucoz.ru/publ/3-1-0-10
xxbesoxx вне форума Ответить с цитированием
Старый 11.02.2014, 17:18   #8
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ой помойму Lookup тут излишний... проще уж джойном или фильтр по таблице сделать
Dozent вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по двум таблицам Pamparam SQL, базы данных 3 06.07.2013 01:30
Запрос по двум таблицам Alina111 SQL, базы данных 2 11.01.2013 20:20
Запрос к двум таблицам, одна из них - соотнесение M-K SQL, базы данных 3 13.02.2012 15:57
перемещение по двум таблицам Alexi Общие вопросы Delphi 5 04.06.2009 13:30