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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2008, 11:27   #1
Avalonix
Пользователь
 
Регистрация: 20.04.2008
Сообщений: 57
По умолчанию Грмотная настройка фильтра в компоненте Table

Помогите разобраться с такой вещью. Вот есть две таблицы: стран и городов. В таблице городов как форейгн кей идет код страны. Сделал на форме два компонента DBLookupCombobox, для каждой таблицы. Нужно чтобы при выборе какой то одной страны в одном DBLookupCombobox, в другом были доступны города соответствующие только выбраной стране! Те надо в компоненте Table соответствующего городам отфильтровать города, форейгн кей которых равен коду выбраной страны. Я так предполагаю при выборе из списка у нас в свойство DBLookupCombobox.ListFieldIndex закладывается номер выбраного поля из выпадающего списка. Кажется начинаются они с 0, а вот коды стран с 1 (несоответствие).. Как выкрутиться, как настроить фильтр. Заранее благодарен!
Avalonix вне форума Ответить с цитированием
Старый 23.05.2008, 12:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А может лучше вторую сделать подчиненной а первую главной?
Master-Details имею ввиду?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.05.2008, 12:53   #3
Avalonix
Пользователь
 
Регистрация: 20.04.2008
Сообщений: 57
По умолчанию

Хотелось бы заставить работать в таком варианте. Может тогда при помощи Query запросом отфильтровать? опять же тогда вопрос как результаты фильтрации записхать в DBLookupCombobox? Далее еще предполагается после фильтрации городов, при дальнейшем выборе города, фильтровались улицы принадлежащие только этому городу...
Avalonix вне форума Ответить с цитированием
Старый 23.05.2008, 13:24   #4
AlexandrSid
Форумчанин
 
Регистрация: 31.10.2007
Сообщений: 103
По умолчанию

Я так понял через BDE работаешь.
В ADO просто устанавливаешь фильтр на таблицу, т.е.

ADOTable1-DataSourse1-DBLookUpCombobox1 Страна
ADOTable2-DataSourse2-DBLookUpCombobox2 Город

У DBLookUpCombobox1 на событие CloseUp пишешь.

Код:
procedure TForm1.DBLookUpCombobox1CloseUp(Sender:TObject);
begin
 ADOTable2.Filter:='IDStrana='+ADOTable1.FieldByName('ID').AsString;
 ADOTable2.Filtered:=True;
end;
Думаю в BDE будет так же.

Последний раз редактировалось AlexandrSid; 23.05.2008 в 13:26.
AlexandrSid вне форума Ответить с цитированием
Старый 23.05.2008, 14:20   #5
Avalonix
Пользователь
 
Регистрация: 20.04.2008
Сообщений: 57
По умолчанию

Поясните пожалуйста строку ADOTable2.Filter:='IDStrana='+ADOTa ble1.FieldByName('ID').AsString;
что предполагает собой например IDStrana и FieldByName('ID') (непонятно что за ID)
в моей таблице стран поля называются: strany_cod(PK); strany_naimen.
в таблице городов поля: gorod_cod(PF), gorod_naimen, gorod_kstrany(FK)
Avalonix вне форума Ответить с цитированием
Старый 23.05.2008, 15:02   #6
AlexandrSid
Форумчанин
 
Регистрация: 31.10.2007
Сообщений: 103
По умолчанию

Цитата:
Поясните пожалуйста строку ADOTable2.Filter:='IDStrana='+ADOTa ble1.FieldByNam e('ID').AsString;
Установть фильтр в таблице ADOTable2 (города), КодСтраны в таблице города равен коду страны выбранной в таблице ADOTable1 (страна) т.е. в поле DBLookUpCombobox1

ADOTable1.FieldByName('ID') код страны в табице страны (PK)
IDStrana код страны в таблице города (FK)
Т.е. для твоих таблиц будет

Код:
procedure TForm1.DBLookUpCombobox1CloseUp(Sender:TObject);   
begin  
 ADOTable2.Filter:='gorod_kstrany='+ADOTable1.FieldByName(strany_cod).AsString;   
 ADOTable2.Filtered:=True;   
end;
где ADOTable1 таблица страны, а ADOTable2 таблица города

Последний раз редактировалось AlexandrSid; 23.05.2008 в 15:08.
AlexandrSid вне форума Ответить с цитированием
Старый 23.05.2008, 15:32   #7
Avalonix
Пользователь
 
Регистрация: 20.04.2008
Сообщений: 57
По умолчанию

первый комбобокс со странами дает выбрать страну, но при закрытии вылетает ошибка "Operation not applicable" Может это потому что я использую просто Table, а не ADOTable. Я с базой (Oracle) соединяюсь посредством ODBC
Avalonix вне форума Ответить с цитированием
Старый 23.05.2008, 15:36   #8
AlexandrSid
Форумчанин
 
Регистрация: 31.10.2007
Сообщений: 103
По умолчанию

Покажи код
AlexandrSid вне форума Ответить с цитированием
Старый 23.05.2008, 15:40   #9
Avalonix
Пользователь
 
Регистрация: 20.04.2008
Сообщений: 57
По умолчанию

Возможно мой косяк где то... сейчас еще перепроверю

Код:
procedure TFormMPO.DBLComboBoxMPO_stranyCloseUp(Sender: TObject);
begin
 DataModule1.TableGoroda.Filter:='gorod_kstrany='+DataModule1.TableStrany.FieldByName('strany_cod').AsString;
 DataModule1.TableGoroda.Filtered:=True;
end;

Последний раз редактировалось Avalonix; 23.05.2008 в 15:52.
Avalonix вне форума Ответить с цитированием
Старый 23.05.2008, 16:09   #10
AlexandrSid
Форумчанин
 
Регистрация: 31.10.2007
Сообщений: 103
По умолчанию

Сейчас попробую с TTable може что подскажу.
Попробуй сделать тоже самое через ADOTabel

Последний раз редактировалось AlexandrSid; 23.05.2008 в 16:12.
AlexandrSid вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Настройка .htaccess Mikola PHP 3 07.03.2009 22:21
Опции фильтра в ADOTable alain БД в Delphi 0 02.05.2008 22:17
настройка TCP/IP Sergey2008 Свободное общение 0 19.02.2008 19:09
Настройка интернета. Marsik Помощь студентам 3 02.01.2008 09:16
Настройка паскаля Snake_ua Паскаль, Turbo Pascal, PascalABC.NET 7 18.10.2007 17:56