Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно обрабатывать событие OnFilterRecord?


Страницы:   1 2

Term ©   (2003-10-20 16:41:00) 

Сделал так:
procedure TDataModule1.UchenikiFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept:=DataModule1.Kurs.Locate("NUM_K;KURS",VarArrayOf([DataModule1.Ucheniki.FieldByname("NUM_K").AsInteger,SELECT_NODE .Text]),[]);
end;

но проблема в том что отфильтровывается только текущая запись, а все остальные нет...
как сделать так чтобы фильтровалась вся база???
посоветуйте плиз...


Johnmen   (2003-10-21 11:31:00) [1]

"Многие-ко-многим" в твоем случае:
1. Таблица курсов. Есть поле IDC
2. Таблица учеников. Есть поле IDU
3. Таблица связи. Поля ID_C и ID_U, ссылающиеся на IDC и IDU соответственно.


Term   (2003-10-21 11:06:00) [2]

ну как я мог понять, центральное звено в задаче, ученики а не изучаемые ими курсы, а то что получиться если человек захочет изучать два предмета, то что его данные вводить дважды???
проще наверное же в подчинённую таблицу добавить ему еще одно название предмета(или курса).... поэтому я сделал таблицу учеников мастер....


Johnmen   (2003-10-21 10:55:00) [3]

>Term © (21.10.03 10:20)
>нет один ко многим, т.к. один ученик может посещать несколько курсов

А что, на одном курсе м.б. только один ученик ? :)))
Короче, определись со структурой и построй правильный, нужный тебе, запрос...


Term   (2003-10-21 10:52:00) [4]

никто не знает..... или другие причины


Term   (2003-10-21 10:41:00) [5]

есть у кого нить мнение...


Term   (2003-10-21 10:20:00) [6]


> Johnmen © (21.10.03 10:17) [17]

нет один ко многим, т.к. один ученик может посещать несколько курсов, обычный мастер делать


Term   (2003-10-21 10:18:00) [7]

примерная структура баз:
Ученики Курсы
Num_K(автоинкр)----------Num_K
FIO Kurs
...
...

предположим Иванов и Петров посещают программирование,
а Сидоров и Фёдоров курсы пользователей.
значения то Num_K для каждого ученика то разные...
если так:

> Ucheniki.Filter := "NUM_K="+ Kurs.FieldByname("NUM_K").Asstring;

то буду получать только 1-го какогото а нужно всеху кого в подчинённой таблице есть название выбранного в дереве курса
поэтому вначале делал так, получал в гриде список, вроде всё нормально всё отсеялось верно, но прочитать тут получалось только первую запись:
procedure TDataModule1.UchenikiFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept:=DataModule1.Kurs.Locate("NUM_K;KURS",VarArrayOf([DataModule1.Ucheniki.FieldByname("NUM_K").AsInteger,SELECT_NODE .Text]),[]);
end;

поэтому я и не знаю как поступить


Johnmen   (2003-10-21 10:17:00) [8]

>Term ©

То есть связь "многие-ко-многим".
И как она реализована ?


Nikolay M.   (2003-10-21 10:02:00) [9]


> отфильтровать УЧЕНИКОВ, а не курсы

А, т.е. наоборот? В дереве - курсы, рядом - ученики. При выборе курса фильтруем учеников.
?

Тогда с точностью до наоборот:
Ucheniki.Filter := "NUM_K="+ Kurs.FieldByname("NUM_K").Asstring;
И при чем тут еще SELECT_NODE.Text, если связь идет по целочисленному полю?
Имхо, блуждание в 3 соснах...


Term   (2003-10-21 09:57:00) [10]

но тут должно быть так что один ученик ходит на несколько курсов, а наоборот то как???


Mike Kouzmine   (2003-10-21 09:53:00) [11]

Надо наоборот. Курсы мастер - ученики деталь.


Term   (2003-10-21 09:49:00) [12]

ктонить.... хелп


Term   (2003-10-21 09:15:00) [13]

извиняюсь но может просто не могу объяснить....
ученики мастер она связанна, с курсами полем NUM_K(цифровое поле).
т.е. нужно отфильтровать УЧЕНИКОВ, а не курсы.
Если у учеников есть в подчинённой таблице курс который я выбрал в дереве, иначе я бы не задавал этот вопрос, т.к. отфильтровать нужно одну таблицу а данные находятся в другой, поэтому я стал мучиться с OnFilterRecord, и так и не решил этот вопрос...


Nikolay M.   (2003-10-20 19:57:00) [14]

В дереве - ученики? Фильтруются - курсы? Некое соответствие кода и объяснения ситуации.
Если я все правильно понял, то что мешает сделать тупо фильтр по курсам
kurs.Filter := "(NUM_K=" + #39 + Ucheniki.FieldByname("NUM_K").AsInteger + #39 + ") AND (KURS=" + #39 + SELECT_NODE.Text + #39 + ")";


Term   (2003-10-20 19:28:00) [15]

в общем на форме у меня TTreeView ветви значения из справочника.
Есть таблица Ученики и зависимая изучаемые ими курсы, вот в неё и заносятся значения из справочника.
Мне нужно отфильтровать тех Учеников у которых в подчинённой таблице есть значение, то которое выбрано в TTreeView.
поэтому
> with Ucheniki do
> begin
> Filtered := False;
> Filter := "num_k="+Kurs.FieldByName("num_k").AsString;
> Filtered := True;
> end

не подходит оно мне выдаст токо 1 запись, а надо все у кого есть соотв. курсы


Term   (2003-10-20 19:18:00) [16]

так это и есть мастер-детайл токо, выбрать отфильтровать нужно мастер на основании того если в зависимой таблице запись удовлетворяющая определённому условию


Sandman25   (2003-10-20 18:03:00) [17]

Например, так:

with Ucheniki do
begin
Filtered := False;
Filter := "num_k="+Kurs.FieldByName("num_k").AsString;
Filtered := True;
end;

Но лучше сделать обычный master-detail.


Term   (2003-10-20 17:54:00) [18]

а как тут тогда поступать???
мне нужно отфильтровать значения мастер таблицы по значениям зависимой, поле связи NUM_K


Nikolay M.   (2003-10-20 17:46:00) [19]


> procedure TDataModule1. UchenikiFilterRecord(DataSet: TDataSet;
> var Accept: Boolean);
> begin
> Accept:=DataModule1.Kurs.Locate("NUM_K;KURS",VarArrayOf([DataModule1. Ucheniki.FieldByname("NUM_K").AsInteger,SELE CT_NODE
> .Text]),[]);
> end;

Дык а что ты хочешь? У тебя в фильтре используется значение фильтруемого датасета. Если я все правильно понял...


Term   (2003-10-20 17:44:00) [20]

и вот еще такой вопрос я посмотрел скоко записей возвращает таблица.... оказалось что во всех случаях 1 ЗАПИСЬ, хотя
в гриде выводятся все записи которые нужны... а прочитать могу только первую.... почему...????


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо