Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Lookup поля, Фильтрация(сортировка) по lookup полю 
V
    Опции темы
DenisTv
Дата 21.5.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



Доброго времени суток.
Что делать если простой способ фильтрации не прокатывает
Код

Ado_Table.Filter:='[lookup_поле]>'''+Ed_Filter.Text+'''';

а sql использовать ну никак нельзя?

Думаю, что можно брать строку из Ed_Filter.Text, по ней фильтровать справочник,
а уже по полученным данным (id-ам) фильтровать основную таблицу. 
Но код получится палевый.    smile 
PM MAIL ICQ   Вверх
Akella
Дата 21.5.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(DenisTv @  21.5.2009,  10:22 Найти цитируемый пост)
Но код получится палевый.    smile  

всмысле smile 
конкретнее, что не так, что не получается
PM MAIL   Вверх
DenisTv
Дата 21.5.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



1. Ощущение, что появится куча багов.
2. Думал может есть способ обойти этот момент. (чтобы tado не заметил подмены  smile )
3. Мне надо сделать поиск по 8 полям.. 
для каждого справочника надо будет создавать лист сортировки (список id-ов).
и только потом отображать именно эти id-ы в основной таблице.



Это сообщение отредактировал(а) DenisTv - 21.5.2009, 11:05
PM MAIL ICQ   Вверх
Kbl4AH
Дата 21.5.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(DenisTv @  21.5.2009,  11:53 Найти цитируемый пост)
1. Ощущение, что появится куча багов.

волков бояться...
Цитата(DenisTv @  21.5.2009,  11:53 Найти цитируемый пост)
Мне надо сделать поиск по 8 полям..

метод Lookup осуществляет поиск по набору полей...
PM MAIL ICQ   Вверх
DenisTv
Дата 21.5.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



Цитата(Kbl4AH @  21.5.2009,  16:10 Найти цитируемый пост)

метод Lookup осуществляет поиск по набору полей... 

...а мне вместе не надо =) Я ещё буду выбирать по какому полю фильтровать.

А по поводу "волков бояться...", то зачем изобретать велосипед, если кто нибудь уже сталкивался и решил эту проблему.

Вопрос на засыпку: "ЧЕм отличается обычное поле от лукапа?".
Нельзя ли принудительно "посчитать" лукап перед вызовом, чтобы можно было обращаться как к обычному?

PM MAIL ICQ   Вверх
Kbl4AH
Дата 21.5.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(DenisTv @  21.5.2009,  12:24 Найти цитируемый пост)
ЧЕм отличается обычное поле от лукапа?

что-то вроде...
лукап поле отображает значение "чужого" поля для значения своего поля...
по аналогии с методом - отобразить значение поля A из набора 1, если поле B в наборе 2 = X...
то есть отбражает значения из другого набора данных...

Это сообщение отредактировал(а) Kbl4AH - 21.5.2009, 11:30
PM MAIL ICQ   Вверх
DenisTv
Дата 21.5.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



Ну понятно. Я в плане существования в нем значения.
Когда оно создается и пересчитывается.

Цитата(DenisTv @  21.5.2009,  16:24 Найти цитируемый пост)
Нельзя ли принудительно "посчитать" лукап перед вызовом, чтобы можно было обращаться как к обычному?


PM MAIL ICQ   Вверх
Akella
Дата 21.5.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(DenisTv @  21.5.2009,  11:24 Найти цитируемый пост)
Вопрос на засыпку: "ЧЕм отличается обычное поле от лукапа?".

lookup-поле предназначено для отображения данных из другой таблицы, из "таблицы-справочника"
PM MAIL   Вверх
Kbl4AH
Дата 21.5.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(DenisTv @  21.5.2009,  12:45 Найти цитируемый пост)
Нельзя ли принудительно "посчитать" лукап перед вызовом, чтобы можно было обращаться как к обычному?

оно изменяет отображаемое значение при изменение значение кляючевого поля?...
что значит посчитать лукап?
нет значения в поле - отображается весь возможный список,
есть значение в поле - отображается соответствующее значение...
PM MAIL ICQ   Вверх
DenisTv
Дата 21.5.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



Дык то, что lookup - это полессылка понятно.

Подскажите каким образом реализуется событие OnFilterRecord компонента adotble.
Конкретно как скрываются ненужные нам поля(не проходящие критерий).

Допустим я получил список id-ов которые проходят критерий, теперь надо скрыть все остальные записи.
PM MAIL ICQ   Вверх
Akella
Дата 21.5.2009, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(DenisTv @  21.5.2009,  14:48 Найти цитируемый пост)
Подскажите каким образом реализуется событие OnFilterRecord компонента adotble.

а что, поиск на форуму отключили?
PM MAIL   Вверх
DenisTv
Дата 24.5.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



хх) Поиск ничего не дал.

Внимание! Возможно вопрос неправильно понят, ибо я написал НЕ "Как использовать onliteredrecord", а

Цитата(DenisTv @  21.5.2009,  19:48 Найти цитируемый пост)
Подскажите каким образом реализуется событие OnFilterRecord компонента adotble.


это значит, что мне интересно, может кто знает, как работает модуль adodb, в котором находится компонент adotable.  И в котором есть обработчик данного события (т.е. OnFilterRecord). 
Докопался только до массива FilterGroup, в который помещаеются записи, прошедшие критерий. А как скрытваются остальные найти не могу.

ps/ нашел, много подобных сообщений, но ничего лучше как создать лукап поля в доп временном файле не придумано. Хотелось бы уже разобраться, при вашей помощи в сути вопроса, чтобы появилась хотя бы одна альтернатива существующему решению.

Это сообщение отредактировал(а) DenisTv - 24.5.2009, 19:38
PM MAIL ICQ   Вверх
Akella
Дата 25.5.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(DenisTv @  24.5.2009,  19:32 Найти цитируемый пост)
хх) Поиск ничего не дал.

:\
раз

два

три

четыре - фильтрация данных в Delphi



Цитата(DenisTv @  24.5.2009,  19:32 Найти цитируемый пост)
это значит, что мне интересно, может кто знает, как работает модуль adodb, в котором находится компонент adotable.  И в котором есть обработчик данного события (т.е. OnFilterRecord). 

OnFliterRecord работает во всех датасетах одинаково, в том числе и у TAdoTable. Если я ошибаюсь, то поправьте меня.



DenisTv, покажи свой код, какие проблемы, что не работает?

Добавлено через 3 минуты
может
Код
Ado_Table.Filter:='id_spavochnick_1' + LookupCombobox1.ListSource.Datasource.Dataset.FieldByName('id').asString;
?
PM MAIL   Вверх
DenisTv
Дата 25.5.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



Два и три одно и тоже?

Akella, обычный способ фильтрации не действует на лукап поля. Вылетает ошибка "не удается найти объект в семействе...".
Или я чего то недопонимаю? smile

Добавлено через 6 минут и 4 секунды
 
Цитата(Akella @  25.5.2009,  14:53 Найти цитируемый пост)
DenisTv, покажи свой код, какие проблемы, что не работает? 

Не думаю, что код поможет, но всё же..

Код

procedure TForm_Zak.Ed_FilterChange(Sender: TObject);
begin
 if length(Ed_Filter.Text)>0 then Ado_Table_zak.Filtered:=true
   else Ado_Table_zak.Filtered:=false;
   case  CB_Filter.ItemIndex of
      0 : Ado_Table_zak.Filter:='Master_s>'''+Ed_Filter.Text+'''';
      1 : Ado_Table_zak.Filter:='Clients_s>'''+Ed_Filter.Text+'''';
      //2 : Ado_Table_zak.Filter:='Data>'''+StrToDate(Ed_Filter.Text)+'''';
      2 : Ado_Table_zak.Filter:='Cena>'''+Ed_Filter.Text+'''';
     end;

Код


procedure TForm_Zak.ADO_Table_ZakFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  Accept:=false;
  case CB_Filter.ItemIndex of
  0 : begin
        if copy(ADO_Table_ZakMaster_s.AsString,1,Length(Form_Zak.Ed_Filter.Text))=
        Form_Zak.Ed_Filter.Text then Accept:=true;
      end;
  1 : begin
        if copy(ADO_Table_ZakClients_s.AsString,1,Length(Form_Zak.Ed_Filter.Text))=
        Form_Zak.Ed_Filter.Text then Accept:=true;
      end;
  2 : begin
        if copy(ADO_Table_ZakCena.AsString,1,Length(Form_Zak.Ed_Filter.Text))=
        Form_Zak.Ed_Filter.Text then Accept:=true;
      end;
  end;
end;



PM MAIL ICQ   Вверх
Akella
Дата 25.5.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(DenisTv @  25.5.2009,  10:21 Найти цитируемый пост)
Не думаю, что код поможет, 

 smile 
ты думаешь, что больше поможет пустая дискуссия?

Добавлено @ 11:04
DenisTv, советую использовать или фильтр или onfilerRecord

Добавлено @ 11:05
Цитата(DenisTv @  25.5.2009,  10:21 Найти цитируемый пост)
 if length(Ed_Filter.Text)>0 then Ado_Table_zak.Filtered:=true
   else Ado_Table_zak.Filtered:=false;

Вначале присвой условие свойству Filter, а затем уже включай фильрацию: Ado_Table_zak.Filtered:=true

Добавлено через 4 минуты и 48 секунд
Цитата(DenisTv @  25.5.2009,  10:21 Найти цитируемый пост)
 if length(Ed_Filter.Text)>0 then Ado_Table_zak.Filtered:=true
   else Ado_Table_zak.Filtered:=false;

можно заменить на:
Код

Ado_Table_zak.Filtered := Ed_Filter.Text <> '';

или
Код

Ado_Table_zak.Filtered := length(Ed_Filter.Text)>0;


Добавлено через 12 минут и 31 секунду
Цитата(DenisTv @  25.5.2009,  10:21 Найти цитируемый пост)
Akella, обычный способ фильтрации не действует на лукап поля. 

Какие значения "живут" в лукап-поле?? Можешь привести?

Master_s и Clients_s - это и есть лукап-поля?

Где, в какой строке ошибка.

Блин, пока всю инфу из тебя вытащишь, отпадёт всё желание помогать smile  smile 

Это сообщение отредактировал(а) Akella - 25.5.2009, 11:06
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.