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