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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2012, 17:04   #1
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
Вопрос как включить все ADO компоненты, или фильтрация в мастер и детальной таблицах

Здравствуйте форумчане у меня такая дилемма . короче работаю на делфи 2010 и с компонентами адо квери и адо табле адо два адо табле подключены к адо конекшн и образуют отображение данных мастер - детальная связь. вот и подчиненной-детальной таблице мне нужно делать фильтрацию и я для этого использую код
Код:
begin
DataModule3.adotable5.MasterFields:='';
DataModule3.adotable5.IndexFieldNames:='';
DataModule3.ADOTable5.mastersource.Enabled:=false;
DataModule3.adotable5.filtered:=false;
DataModule3.adotable5.Filter:=Combobox1.Text+ '=' +QuotedStr(Edit1.Text) ;
DataModule3.adotable5.filtered:=true;
end;
как вы понимаете из за этого кода данные в первой таблице дб грид не отображаются фильтрация идет только по второй таблице вот и для этого я отменяю фильтрацию и восстанавливаю связь отображение другим кодом
Код:
begin
DataModule3.ADOConnection1.Close;
DataModule3.adotable5.Close;
DataModule3.adotable5.Filter:='';
DataModule3.adotable5.mastersource:=DataModule3.DataSource1;
DataModule3.adotable5.mastersource.DataSet.Active:=true;
DataModule3.adotable5.IndexFieldNames:='PKey' ;
DataModule3.adotable5.MasterFields:='Код';
DataModule3.adotable5.mastersource.Enabled:=true;
DataModule3.ADOConnection1.Open;
DataModule3.adotable5.Open;
DataModule3.ADOTable1.Filtered:= false;
end;
и всё вроде бы ничего но у меня на DataModule3 куча других компонентов табле квери но из за того что я отключаю и потом подключаю DataModule3.ADOConnection1.Open; то данные отображаемые из других компонентов не отображаются в других дбгридах на других формах пустые мертвые и поэтому мне приходиться оживлять открывать другие компоненты самым что не наесть дебильным образом при выключении формы close и переходе на другую форму где лежат другие дбгриди с другими наборами данных от других компонентов я вынужден включить их все заново
Код:
begin
DataModule3.adotable1.Open;
DataModule3.adotable2.Open;
DataModule3.adotable3.Open;
DataModule3.adotable4.Open;
DataModule3.adotable5.Open;
DataModule3.adotable6.Open;
DataModule3.adotable7.Open;
DataModule3.adotable8.Open;
DataModule3.adotable9.Open;
DataModule3.adotable10.Open;
DataModule3.adotable11.Open;

Form6.adotable3.Open;

DataModule3.ADOQuery1.Open;
DataModule3.ADOQuery2.Open;
DataModule3.ADOQuery3.Open;
DataModule3.ADOQuery4.Open;
DataModule3.ADOQuery5.Open;
DataModule3.ADOQuery6.Open;
DataModule3.ADOQuery7.Open;
DataModule3.ADOQuery8.Open;
DataModule3.ADOQuery9.Open;
DataModule3.ADOQuery10.Open;
DataModule3.ADOQuery11.Open;
DataModule3.ADOQuery12.Open;
DataModule3.ADOQuery13.Open;
DataModule3.ADOQuery14.Open;
DataModule3.ADOQuery15.Open;
DataModule3.ADOQuery16.Open;
DataModule3.ADOQuery17.Open;
DataModule3.ADOQuery18.Open;
DataModule3.ADOQuery19.Open;
DataModule3.ADOQuery20.Open;
DataModule3.ADOQuery21.Open;
DataModule3.ADOQuery22.Open;
DataModule3.ADOQuery23.Open;
DataModule3.ADOQuery24.Open;
DataModule3.ADOQuery25.Open;
DataModule3.ADOQuery26.Open;
DataModule3.ADOQuery27.Open;
DataModule3.ADOQuery28.Open;
DataModule3.ADOQuery29.Open;
DataModule3.ADOQuery30.Open;
DataModule3.ADOQuery31.Open;
DataModule3.ADOQuery32.Open;
DataModule3.ADOQuery33.Open;
DataModule3.ADOQuery34.Open;
DataModule3.ADOQuery35.Open;
DataModule3.ADOQuery36.Open;
DataModule3.ADOQuery37.Open;
DataModule3.ADOQuery38.Open;
close;
вот а сам вопрос в том что может быть кто ни будь подскажет мне как все это хозяйство оптимизировать может кто знает более элегантный код или другой способ фильтрации, поиска данных без отключения DataModule3.ADOConnection1.Close;

Последний раз редактировалось Stilet; 22.06.2012 в 20:39.
reihtmonbern вне форума Ответить с цитированием
Старый 22.06.2012, 19:17   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

как-тонепонятно к чему всё это ... почему просто не фильтровать детальный датасет обычным способом не отключая при этом связь с мастером? он и так прекрасно всё фильтрирует
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 23.06.2012, 04:53   #3
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
как-тонепонятно к чему всё это ... почему просто не фильтровать детальный датасет обычным способом не отключая при этом связь с мастером? он и так прекрасно всё фильтрирует
Если не разрывать связь с мастером то фильтрация будет происходить только непосредственно по тем строкам которые связаны со строкой из мастера а мне нужно реализовать фильтрацию по всему набору данных не я конечно понимаю что для этого можно использовать другой датасет подключенный дополнительно к этой же таблице и в ней не будет реализовано взаимоотношение, конечно ещё можно использовать sql перекрестные запросы = но для всего этого мне придется городить в проекте ещё кучу адоквери датасетов и дбгридов.
reihtmonbern вне форума Ответить с цитированием
Старый 23.06.2012, 07:59   #4
alexiz
Пользователь
 
Регистрация: 19.08.2010
Сообщений: 54
По умолчанию

А почему бы не задействовать возможности SQL?
Зачем все эти танцы с фильтрацией.
Ваша благодарность может быть материальной:
WM R103871054215, WM Z710411027344, ЯндД: 410011167596676
alexiz вне форума Ответить с цитированием
Старый 23.06.2012, 09:18   #5
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию

Цитата:
Сообщение от alexiz Посмотреть сообщение
А почему бы не задействовать возможности SQL?
Зачем все эти танцы с фильтрацией.
Потому что я sql уже натанцевался в сласть надоело хочу теперь с фильтрацией потанцевать не надо философствовать и спрашивать зачем и почему . Говорите по существу.
reihtmonbern вне форума Ответить с цитированием
Старый 23.06.2012, 10:22   #6
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
Сообщение от reihtmonbern Посмотреть сообщение
...не надо философствовать и спрашивать зачем и почему . Говорите по существу.
а как мы можем говорить по существу если нам не понятна логика задачи? ... люди (обычно) стремятся упростить работу, а ты наоборот - нагородил кучу непонятных элементов вместо того чтобы просто подойти к этому с другой стороны
ЗЫ: по теме: ну так не фильтрируй detail-dataset, а фильтрируй нужный тебе master-dataset при этом не разрывая соединения, но можешь просто закрыть detail на момент фильтрации по detailTable.Close;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 23.06.2012, 14:44   #7
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
а как мы можем говорить по существу если нам не понятна логика задачи? ... люди (обычно) стремятся упростить работу, а ты наоборот - нагородил кучу непонятных элементов вместо того чтобы просто подойти к этому с другой стороны
ЗЫ: по теме: ну так не фильтрируй detail-dataset, а фильтрируй нужный тебе master-dataset при этом не разрывая соединения, но можешь просто закрыть detail на момент фильтрации по detailTable.Close;
Да мне то как раз надо не мастеру а по detail нужно фильтровать вот и всё а в плане sql я эту задачу просто реализовал мне просто хотелось бы увидеть ваши предложения в плане кода есть ли какая нибудь возможность фильтровать по detail таблице не разрывая соединения и что бы фильтрация происходила во всем строкам таблице а не по тем что относится к той или иной строке из мастера ладно ни чё страшного чё нить придумаю
reihtmonbern вне форума Ответить с цитированием
Старый 23.06.2012, 17:50   #8
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

тогда примерно так:
для фильтрации
Код:
AdoTable5.Close;
AdoTable5.MasterSource:=nil;
AdoTable5.Filtered:=False;
AdoTable5.Open;
AdoTable5.Filter:=<наши условия фильтра>;
AdoTable5.Filtered:=True;
для возврата в исходное положение
Код:
AdoTable5.Close;
AdoTable5.MasterSource:=DataSource1;
AdoTable5.Filtered:=False;
AdoTable5.Open;
P.S. (на заметку) похожую твоей задаче решал совсем недавно. нужно было в "мастере" отфильровать данные которые соответствуют отпределённым условиям в "клиенте". решалось все это на Firebird+FIBPlus применением SQL условий в Conditions ... решение получилось очень коротким и функциональным
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 23.06.2012 в 17:56.
Yurk@ вне форума Ответить с цитированием
Старый 23.06.2012, 20:18   #9
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию

спасибо попробую..
reihtmonbern вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация в таблицах Fokuss БД в Delphi 4 18.01.2011 07:07
Фильтрация и ADO Derius БД в Delphi 33 22.05.2010 15:15
как включить все 4 ядра netbioz Компьютерное железо 0 09.04.2010 15:17
Как редактировать дату в связаных таблицах ADO Alexsandr БД в Delphi 1 27.05.2008 09:38
Удаление в связаных таблицах ADO Alexsandr БД в Delphi 7 18.02.2008 23:15