Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.034 c
4-42255
w666w
2003-09-15 15:02
2003.11.13
Drag & Drop - без WinAPI никуда...


1-41546
Висилич
2003-10-28 00:01
2003.11.13
Использование обектов в процедурах.


1-41568
senya
2003-10-27 15:32
2003.11.13
DBGrid - одна строка в нескольких


14-42093
Kein
2003-10-21 21:53
2003.11.13
помогите отладить алгоритм!!!!!!!


1-41258
RoLeX
2003-10-31 17:29
2003.11.13
Как в DateTimePicker сравнить даты???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский