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

Тема в разделе "Delphi - Базы данных", создана пользователем skvoznak, 6 май 2007.

Статус темы:
Закрыта.
  1. skvoznak

    skvoznak Гость

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

    LAW Гость

    Что используется Table или Query?
     
  3. skvoznak

    skvoznak Гость

  4. @rtem

    @rtem Гость

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

    Код (Text):
    filtr := ' ';
    filtr := '[Поле] = ''' + Компонент + ''''; // Компонент откуда ты берешь условие фильтрации Edit,....
    Таблица.Filter := filtr;
    Таблица.Filtered := true;
    Для отмены фильтрации просто меняй True -> False
     
  5. skvoznak

    skvoznak Гость

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

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

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

    LAW Гость

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

    @rtem Гость

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

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

    skvoznak Гость

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

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


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

    LAW Гость

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

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

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

    skvoznak Гость

    спасибо всем за помощь! немного поломав голову, сделалось всё при помощи мемо-поля а выглядит всё примерно так:
    Вот это вешается в лук ап комбо бокс
    Код (Text):
    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 мемки))))гениальное просто как оказалось...немного тупо, по-левому, но работает замечательно)))

    спасибо всем огромное за помощь))))оч-оч благодарна-наводит на правильные мысли)))
     
Загрузка...
Похожие Темы - Имеется таблица мастеров
  1. garrick
    Ответов:
    5
    Просмотров:
    114
  2. Shouldercannon
    Ответов:
    0
    Просмотров:
    306
  3. AvasKvas
    Ответов:
    7
    Просмотров:
    1.064
  4. 1N4001
    Ответов:
    0
    Просмотров:
    1.945
  5. Xario
    Ответов:
    0
    Просмотров:
    1.212
Статус темы:
Закрыта.

Поделиться этой страницей