Форум: "Базы";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизКак правильно обрабатывать событие 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.036 c