Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

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

 
Term ©   (2003-10-20 16:41) [0]

Сделал так:
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;

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


 
Term ©   (2003-10-20 16:54) [1]

есть кто живой.... ответьте.... я в тупике


 
Johnmen ©   (2003-10-20 16:55) [2]

VarArrayOf([DataSet.FieldByname("NUM_K").AsInteger...


 
Term ©   (2003-10-20 17:01) [3]


> VarArrayOf([DataSet.FieldByname("NUM_K").AsInteger

не помогло, но попробывал переоткрывать таблицу и вроде заработало.


 
Term ©   (2003-10-20 17:38) [4]

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


procedure TFirst_Tab.TreeView1Click(Sender: TObject);
begin
SELECT_NODE:=First_Tab.TreeView1.Selected;
First_Tab.Caption:=SELECT_NODE.Text;;
if SELECT_NODE.Text<>"Все" then
begin
DataModule1.Ucheniki.Close;
DataModule1.Ucheniki.Filtered:=true;
DataModule1.Ucheniki.Open;
end
else DataModule1.Ucheniki.Filtered:=false;
end;


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


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

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


 
Nikolay M. ©   (2003-10-20 17:46) [6]


> 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:54) [7]

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


 
Sandman25 ©   (2003-10-20 18:03) [8]

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

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

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


 
Term ©   (2003-10-20 19:18) [9]

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


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

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

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


 
Nikolay M. ©   (2003-10-20 19:57) [11]

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


 
Term ©   (2003-10-21 09:15) [12]

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


 
Term ©   (2003-10-21 09:49) [13]

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


 
Mike Kouzmine ©   (2003-10-21 09:53) [14]

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


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

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


 
Nikolay M. ©   (2003-10-21 10:02) [16]


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

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

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


 
Johnmen ©   (2003-10-21 10:17) [17]

>Term ©

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


 
Term ©   (2003-10-21 10:18) [18]

примерная структура баз:
Ученики Курсы
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;

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


 
Term ©   (2003-10-21 10:20) [19]


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

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


 
Term ©   (2003-10-21 10:41) [20]

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


 
Term ©   (2003-10-21 10:52) [21]

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


 
Johnmen ©   (2003-10-21 10:55) [22]

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

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


 
Term ©   (2003-10-21 11:06) [23]

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


 
Johnmen ©   (2003-10-21 11:31) [24]

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



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.034 c
1-41211
Ivolg
2003-11-01 19:05
2003.11.13
Listbox строчки!!!


1-41363
RoLeX
2003-10-30 14:29
2003.11.13
Как сделать, чтобы в Edit1 можно было воодить только цифры???


6-41839
Michael_X
2003-09-05 15:01
2003.11.13
Winsock2


3-40978
Relaxxx
2003-10-16 17:54
2003.11.13
помигите з запросом


3-40800
-=GUEST=-
2003-10-21 17:27
2003.11.13
Один DataSet - два курсора