Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
4-10498
Dmitrii__
2003-05-28 19:45
2003.08.04
Как конвертировать Integer в строеовый тип?


3-10089
us
2003-07-11 14:35
2003.08.04
Как работать с DBF под Linux


1-10227
AGAMEMNUM
2003-07-17 15:13
2003.08.04
Как послать проге CTRL+DEL?


14-10351
Ovi
2003-07-18 16:04
2003.08.04
Bar Code component


4-10532
Hint
2003-05-30 14:14
2003.08.04
ShellExecuteEx WaitForSingleObject





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский