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

Вниз

Работа с TTable...   Найти похожие ветки 

 
Nick   (2003-07-15 09:46) [0]

Добрый день.

У меня такой вопрос.
Существует две таблицы (TTable), позиционирую на запись в DBGrid-е (Table1), нажимаю на кнопку и открывается другая форма на ней DBGrid (Table2).
Хочу сделать фильтрацию, чтоб при нажатии на кнопку, в DBGrid-е (Table2) отображались записи, принадлежащие той записи, на которую я позиционировался в DBGrid-е (Table1).
Как это сделать?

Спасибо.


 
Anatoly Podgoretsky ©   (2003-07-15 09:49) [1]

Filter


 
Nick   (2003-07-15 10:10) [2]

>>Filter
Что бы это значило, если вы мне хотите сказать какой метод надо использовать, то это я и сам знаю!
А вот что писать после
Table2.Filter:=.....
Вот в чем вопрос??? Уважаемый Anatoly!


 
NickBat ©   (2003-07-15 10:11) [3]

Судя по всему это мастер-детайл. Зачем еще фильтр городить?


 
Nick   (2003-07-15 10:16) [4]


> Судя по всему это мастер-детайл. Зачем еще фильтр городить?

Хорошо мастер-детайл. Как его сделать, если можно поподробнее, плиз


 
Соловьев ©   (2003-07-15 10:16) [5]


> Судя по всему это мастер-детайл.

это и есть фильтр :)


 
Nick   (2003-07-15 10:31) [6]

Так что на счет филтра или мастер-детайл???


 
Соловьев ©   (2003-07-15 10:38) [7]


> А вот что писать после
> Table2.Filter:=.....

procedure Table2.AfterScroll
...
Table2.Filter := "ID="+Table1.FieldByName("ID").AsString;
...


 
myor ©   (2003-07-15 10:39) [8]

а слабо самому поиграться со свойствами mastersource и masterfields table2?


 
Anatoly Podgoretsky ©   (2003-07-15 10:42) [9]

Nick (15.07.03 10:10)
А на этот вопрос только ты можешь ответить!
Это где то заесь "записи, принадлежащие той записи"
Мастер/детайл применить можно (ответ в той же области), но не к чему, так как ты открываешь в другой форме изолированную таблицу, фильтр будет экономичнее.

Ну ты понял, что данных не достаточно для ответа!


 
DenK_vrtz ©   (2003-07-15 10:46) [10]

Nick (15.07.03 10:10), а ты думаешь тут ясновицы сидят, и структуру твоих таблиц в мониторах видно. Ошибаешься!
Может книги почитать? или F1 нажать, для приличия.


 
Nick   (2003-07-15 11:04) [11]


> Anatoly Podgoretsky

ОК, например:
Table1 Name(WWW), Adres(222), и т.д.
Table2 Name(такой же как и в Table1(WWW)), Programm(111, 123, ...), и т.д.
Так вот мне надо чтобы в Table2 показывались записи, которые соответствуют полю Name, т.е. если Name=WWW, тогда Programm=111, Programm=123, ...
Этого достаточно или еще данных предоставить?


 
Nick   (2003-07-15 11:08) [12]


> Соловьев

Не работает, пишет, что поле не найдено(Table2: Field "А" no found). "А"- это первая буква в записи Table1. Вот так!


 
vopros ©   (2003-07-15 11:13) [13]

filter="field(имя поля укажи)="А*""


 
Anatoly Podgoretsky ©   (2003-07-15 11:20) [14]

filter="www=" + Значение из Table1;
Для ответа по поводу мастер-детайл данных недостаточно.



 
Nick   (2003-07-15 11:28) [15]


> filter="www=" + Значение из Table1;

Так вот это WWW я должен выбрать в DBgrid-e (Table1), и приравнять к значению table2, если в этом Table2 есть WWW, если нет тогда должен быть пустой DBGrid (Table2).


> Для ответа по поводу мастер-детайл данных недостаточно.

Напишите какие надо еще данные!


 
Соловьев ©   (2003-07-15 11:47) [16]


> Не работает, пишет, что поле не найдено(Table2: Field "А"
> no found). "А"- это первая буква в записи Table1. Вот так!

полный код в студию!


 
Anatoly Podgoretsky ©   (2003-07-15 12:00) [17]

Nick (15.07.03 11:28)
Рассуждаешь верно и именно так и работает. Значение должно соответствовать рпавилам для конкретным типам, используемому движку.

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


 
Nick   (2003-07-15 12:01) [18]


> полный код в студию!

Пожалуйста!
procedure TDataModule2.KopiAfterScroll(DataSet: TDataSet);
begin
Kopi.Filter := "Name_Org="+DataModule2.Glav.FieldByName("Name_Org").AsString;
Kopi.Filtered:=true;
end;


 
Anatoly Podgoretsky ©   (2003-07-15 12:07) [19]

Невнимательно прочитал вот это Значение должно соответствовать рпавилам для конкретным типам, используемому движку.
У тебя по всей видимости это строковые данные, так вот для BDE их положено брать в кавычки!


 
Nick   (2003-07-15 12:11) [20]


> Рассуждаешь верно и именно так и работает. Значение должно
> соответствовать рпавилам для конкретным типам, используемому
> движку.

В том-то и дело, что не работает!
На счет идексов:
У Table2 установлен в качестве индекса Name, а есть еще индексы: Programm, Postav_Programm.
Я их свяжу и что, в листинге прописать? Или ничего не надо?


 
VAleksey ©   (2003-07-15 12:15) [21]

Слушай, используй onFilterRecord и не парься со строками.

ЗЫ
Эту строку помести в событие.

Accept := Kopi.FieldByName("Name_Org").AsString = DataModule2.Glav.FieldByName("Name_Org").AsString


 
Zacho ©   (2003-07-15 12:18) [22]


> Nick (15.07.03 12:01)

Насколько позволяют мои телепатические способности, я понял что тебе нужно так:
procedure TDataModule2.GlavAfterScroll(DataSet: TDataSet);
begin
Kopi.Filter := "Name_Org="+DataSet.FieldByName("Name_Org").AsString;
end;

Естественно, должно быть Kopi.Filtered:=true;


 
Anatoly Podgoretsky ©   (2003-07-15 12:23) [23]

Zacho © (15.07.03 12:18)
Если это строковые то это работать не будет, отсутствуют кавычки, если это числовые то правильно. Он молчит от типе полей.

VAleksey © (15.07.03 12:15)
Лишнее, у него одназначное соответствиее, фильтр самое то, быстрее может быть только SetRange, но с ним иногда бывают ошибки, не знаю как в Парадоксе и требует наличие и активацию индекса, а фильтру ничего этого не требуется.


 
Nick   (2003-07-15 12:23) [24]


> Слушай, используй onFilterRecord и не парься со строками.

Да но,он выводит весь Table. Мне надо чтоб при отсутствии такой "Name_Org" был пустой DBGrid, в противном отображал записи.


 
Nick   (2003-07-15 12:25) [25]


> Если это строковые то это работать не будет, отсутствуют
> кавычки, если это числовые то правильно. Он молчит от типе
> полей

У меня строковые данные!!!!!!!!!!!!


 
myor ©   (2003-07-15 12:33) [26]

попробуй мастер-детал через дата-модуль.


 
Zacho ©   (2003-07-15 12:34) [27]


> Nick (15.07.03 12:25)

Тогда так:
procedure TDataModule2.GlavAfterScroll(DataSet: TDataSet);
begin
Kopi.Filter := "Name_Org="+AnsiQuotedStr(DataSet.FieldByName("Name_Org").AsString,"""");
end;

Обрати внимание: это обработчик AfterScroll "главного" набора данных, а фильтр устанавливается в "подчиненном".


 
Zacho ©   (2003-07-15 12:36) [28]


> myor © (15.07.03 12:33)

???
Какое отношение к этому имеет DataModule ?


 
Nick   (2003-07-15 12:47) [29]


> Zacho

Да работает без ошибок, но ошибка в том, что если Name_Org отсутстует в Kopi, все равно выдаетт одно и тоже!
Например: Name_Org=WWW в Glav, а в Kopi Name_Org такого значения нет, тогда мне надо пустой DBGrid, а он все равно выдает записи не зависимо от этого!


 
Zacho ©   (2003-07-15 12:50) [30]


> Nick (15.07.03 12:47)

Kopi.Filtered:=true ?

И, уже точно не помню, но возможно надо так:
procedure TDataModule2.GlavAfterScroll(DataSet: TDataSet);
begin
Kopi.Filtered:=false;
Kopi.Filter := "Name_Org="+AnsiQuotedStr(DataSet.FieldByName("Name_Org").AsString,"""");
Kopi.Filtered:=true;
end;


 
myor ©   (2003-07-15 12:55) [31]

Zacho © (15.07.03 12:36)

к мастер-детал, конечно, никакого. но, см. замечание Anatoly Podgoretsky © (15.07.03 10:42) по поводу экономичности фильтра для двух форм. если есть опасение, что nick заблудится в двух формах- пусть использует дата-модуль (по его прямому назначению).


 
Nick   (2003-07-15 12:57) [32]

Не ужели заработало!!!
Огромно спасибо всем кто принимал участие в обсуждении, особенно
Zacho, Anatoly Podgoretsky!!!!!!!!
Спасибо.
Если еще будут вопросы буду знать к кому обращаться.


 
Anatoly Podgoretsky ©   (2003-07-15 12:59) [33]

" and Name_Org<>nul" это уже точно не покажет, правда и без этого тоже не показывает, но может это особенность Парадокса или ты что нибудь не так делаешь.



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

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

Наверх




Память: 0.54 MB
Время: 0.021 c
1-10259
Andy BitOff
2003-07-21 14:47
2003.08.04
Запрет выполнения любых сообщений?


14-10384
Babay
2003-07-16 05:04
2003.08.04
Составление файла ресурсов


1-10161
Man
2003-07-19 17:41
2003.08.04
как открыть текстовый файл ReadOnly


4-10506
SeNtiMeL
2003-06-01 19:42
2003.08.04
Как TEdit другого приложения присвоить текст и послать ENTER


8-10308
softal
2003-04-11 20:52
2003.08.04
DirectSound3D