![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с TTable... [D5, Paradox]
Nick © (2003-07-15 09:46:00)Добрый день.
У меня такой вопрос.
Существует две таблицы (TTable), позиционирую на запись в DBGrid-е (Table1), нажимаю на кнопку и открывается другая форма на ней DBGrid (Table2).
Хочу сделать фильтрацию, чтоб при нажатии на кнопку, в DBGrid-е (Table2) отображались записи, принадлежащие той записи, на которую я позиционировался в DBGrid-е (Table1).
Как это сделать?
Спасибо.
Anatoly Podgoretsky (2003-07-15 12:59:00) [1]" and Name_Org<>nul" это уже точно не покажет, правда и без этого тоже не показывает, но может это особенность Парадокса или ты что нибудь не так делаешь.
Nick (2003-07-15 12:57:00) [2]Не ужели заработало!!!
Огромно спасибо всем кто принимал участие в обсуждении, особенно
Zacho, Anatoly Podgoretsky!!!!!!!!
Спасибо.
Если еще будут вопросы буду знать к кому обращаться.
myor (2003-07-15 12:55:00) [3]Zacho © (15.07.03 12:36)
к мастер-детал, конечно, никакого. но, см. замечание Anatoly Podgoretsky © (15.07.03 10:42) по поводу экономичности фильтра для двух форм. если есть опасение, что nick заблудится в двух формах- пусть использует дата-модуль (по его прямому назначению).
Zacho (2003-07-15 12:50:00) [4]
> 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;
Nick (2003-07-15 12:47:00) [5]
> Zacho
Да работает без ошибок, но ошибка в том, что если Name_Org отсутстует в Kopi, все равно выдаетт одно и тоже!
Например: Name_Org=WWW в Glav, а в Kopi Name_Org такого значения нет, тогда мне надо пустой DBGrid, а он все равно выдает записи не зависимо от этого!
Zacho (2003-07-15 12:36:00) [6]
> myor © (15.07.03 12:33)
???
Какое отношение к этому имеет DataModule ?
Zacho (2003-07-15 12:34:00) [7]
> Nick (15.07.03 12:25)
Тогда так:
procedure TDataModule2.GlavAfterScroll(DataSet: TDataSet);
begin
Kopi.Filter := "Name_Org="+AnsiQuotedStr(DataSet.FieldByName("Name_Org").AsString,"""");
end;
Обрати внимание: это обработчик AfterScroll "главного" набора данных, а фильтр устанавливается в "подчиненном".
myor (2003-07-15 12:33:00) [8]попробуй мастер-детал через дата-модуль.
Nick (2003-07-15 12:25:00) [9]
> Если это строковые то это работать не будет, отсутствуют
> кавычки, если это числовые то правильно. Он молчит от типе
> полей
У меня строковые данные!!!!!!!!!!!!
Nick (2003-07-15 12:23:00) [10]
> Слушай, используй onFilterRecord и не парься со строками.
Да но,он выводит весь Table. Мне надо чтоб при отсутствии такой "Name_Org" был пустой DBGrid, в противном отображал записи.
Anatoly Podgoretsky (2003-07-15 12:23:00) [11]Zacho © (15.07.03 12:18)
Если это строковые то это работать не будет, отсутствуют кавычки, если это числовые то правильно. Он молчит от типе полей.
VAleksey © (15.07.03 12:15)
Лишнее, у него одназначное соответствиее, фильтр самое то, быстрее может быть только SetRange, но с ним иногда бывают ошибки, не знаю как в Парадоксе и требует наличие и активацию индекса, а фильтру ничего этого не требуется.
Zacho (2003-07-15 12:18:00) [12]
> 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;
VAleksey (2003-07-15 12:15:00) [13]Слушай, используй onFilterRecord и не парься со строками.
ЗЫ
Эту строку помести в событие.
Accept := Kopi.FieldByName("Name_Org").AsString = DataModule2.Glav.FieldByName("Name_Org").AsString
Nick (2003-07-15 12:11:00) [14]
> Рассуждаешь верно и именно так и работает. Значение должно
> соответствовать рпавилам для конкретным типам, используемому
> движку.
В том-то и дело, что не работает!
На счет идексов:
У Table2 установлен в качестве индекса Name, а есть еще индексы: Programm, Postav_Programm.
Я их свяжу и что, в листинге прописать? Или ничего не надо?
Anatoly Podgoretsky (2003-07-15 12:07:00) [15]Невнимательно прочитал вот это Значение должно соответствовать рпавилам для конкретным типам, используемому движку.
У тебя по всей видимости это строковые данные, так вот для BDE их положено брать в кавычки!
Nick (2003-07-15 12:01:00) [16]
> полный код в студию!
Пожалуйста!
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:00:00) [17]Nick (15.07.03 11:28)
Рассуждаешь верно и именно так и работает. Значение должно соответствовать рпавилам для конкретным типам, используемому движку.
Для этого никакие, дополнительные данные нужны если организовывать с помощью связи мастер-детайл, а именно информация об имеющихся индексах и какой установлен текущим для Table2.
Table2 должна быть связана по текущему индексу с Table1, в соответствии с требуемой тебе связью.
Соловьев (2003-07-15 11:47:00) [18]
> Не работает, пишет, что поле не найдено(Table2: Field "А"
> no found). "А"- это первая буква в записи Table1. Вот так!
полный код в студию!
Nick (2003-07-15 11:28:00) [19]
> filter="www=" + Значение из Table1;
Так вот это WWW я должен выбрать в DBgrid-e (Table1), и приравнять к значению table2, если в этом Table2 есть WWW, если нет тогда должен быть пустой DBGrid (Table2).
> Для ответа по поводу мастер-детайл данных недостаточно.
Напишите какие надо еще данные!
Anatoly Podgoretsky (2003-07-15 11:20:00) [20]filter="www=" + Значение из Table1;
Для ответа по поводу мастер-детайл данных недостаточно.