Имеется таблица мастеров и таблица услуг(Фильтр)

  • Автор темы skvoznak
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

skvoznak

Имеется таблица мастеров и таблица услуг. они необходимы для добавления в другую таблицу- приём. Имеются мастера, которые могут выполнять более одной услуги.Необходимо сделать фильтр так, чтобы выбирая имя мастера в скроллбоксе, в табличке услуг отображались только те услуги, которые выполняет выбранный мастер
 
@

@rtem

Сначала содаешь переменную filtr : String. Потом делай запись условия фильтрации в эту переменную.

Код:
filtr := ' ';
filtr := '[Поле] = ''' + Компонент + ''''; // Компонент откуда ты берешь условие фильтрации Edit,....
Таблица.Filter := filtr;
Таблица.Filtered := true;

Для отмены фильтрации просто меняй True -> False
 
S

skvoznak

я всё понимаю, но не понимаю, какое условие записать!!!

сейчас код примерно вот такой, но он выводит только одну услугу для мастера...а что делать если их много???

datamodule1.Table4.Filtered:=false;
datamodule1.Table4.Filter:='([Name_yslygi]='''+datamodule1.Table2.FieldByName('Type_yslygi').AsString+''')';
datamodule1.Table4.Filtered:=true;
 
L

LAW

Filter="NAME_USLYGI=TYP_YSLYGI1 and NAME_USLYGI=TYP_YSLYGI2 and и.т.д.".
 
@

@rtem

Для: skvoznak
сейчас код примерно вот такой, но он выводит только одну услугу для мастера...а что делать если их много???

Можно составить запрос, так будет проще.

Еще вопрос, как ты хранишь услуги каждого мастера (если их у тебя много)?
 
S

skvoznak

LAW
и как это себе представить...получается что он сопоставляет все типы услуг к одной услуге...

@rtem,
В том-то и фишка, чтоб без запроса!


в различных строках всё это хранится...
 
L

LAW

и как это себе представить...получается что он сопоставляет все типы услуг к одной услуге...
это представляется так, что после фильтрации в датасете появляется не одна строка а несколько, в соответствии с количеством условий TYP_YSLYGI

А вообще я бы сделал так:
В таблице мастеров сделал бы текстовое поле, где через разделитель занёс бы коды из таблицы услуг, в соответствии с тем, какие услуги производит конкретный мастер.
А при передвижении курсора по таблице мастеров брал бы это поле анализировал разделитесь и составлял фильтр по кодам в таблицу услуг и включал его.

Это простейшая на мой взгляд реализация, а вот если нужно ещё и по услуге кликать, что бы мастера оставались, то нужно третью табличку создавать с соответствием мастеров и услуг.
 
S

skvoznak

спасибо всем за помощь! немного поломав голову, сделалось всё при помощи мемо-поля а выглядит всё примерно так:
Вот это вешается в лук ап комбо бокс
Код:
var m, i: integer;
stry : string;
begin
memoy.Lines.Clear;
memoy.Lines.Add(datamodule1.Table2.FieldByName('Type_yslygi').AsString);
m := memoy.Lines.Count;
stry:='([Name_yslygi]='+''''+memoy.Lines[0]+''')';
for i:=1 to m-1 do
stry:=stry+' or '+'([Name_yslygi]='+''''+memoy.Lines[i]+''')';

datamodule1.Table4.Filtered := false;
datamodule1.Table4.Filter := stry;
datamodule1.Table4.Filtered := true;
плюс ещё делается мемка скрытая, чтоб реально (как вы и советовали) хранить сразу несколько услуг для мастера...
а для того чтобы брать услугу словом, а в это мемо поле таблицы оно записывалось циферками, просто берём 2 мемки))))гениальное просто как оказалось...немного тупо, по-левому, но работает замечательно)))

спасибо всем огромное за помощь))))оч-оч благодарна-наводит на правильные мысли)))
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!