Конференция "Базы" » LookUp поле по полю Calculate = 0 [D5, Paradox]
 
  • BUM (02.07.08 10:45) [0]
    Привет всем.
    Есть запрос к PARADOX с LoookUp полями SUMDOG, LEVEL из другого TQuery (*) где поле LEVEL является вычисляемым
    DataSet.FieldByName('LEVEL').AsInteger:= DataSet.RecNo;


    В запросе (*) есть суммы и обратная сортировка по ним. Поле LEVEL - позиция (чтото вроде лидера по продажам).
    Так вот поле SUMDOG (из селекта) нормально отображается в TDBGrid-e, поле LEVEL = 0, а не номер отсортированной записи.  Почему так происходит?
  • BUM (02.07.08 10:53) [1]
    Да, забыл вот, TDBGrid привязан к запросу в котором созданы лукап поля, а не запросу (*).
  • Sergey13 © (02.07.08 11:08) [2]
    > [0] BUM   (02.07.08 10:45)
    > Почему так происходит?

    Потому, что запрос идет к таблицам в БД, а не к твоему датасету, который и знает твое вычисленное значение.
  • BUM (02.07.08 11:22) [3]

    > Потому, что запрос идет к таблицам в БД, а не к твоему датасету,
    >  который и знает твое вычисленное значение.

    Я вообщето считал что в лукап поле подставляется значение из сформированного датасета найденое в нем по ID записи, провернулся - нашол - подставилось. Зачам же опять лезть на сервер когда набор уже сформирован и поле (хоть и вычисляемое) в датасете есть? И почему 0 а не пусто, как например это происходит для записей не найденых в лукапном датасете?
    Т. е. в гриде отображается как
    LEVEL = 0, Null, Null, 0, 0, 0, Null...
  • Sergey13 © (02.07.08 11:35) [4]
    > [3] BUM   (02.07.08 11:22)

    Я кажется невнимательно твой первый пост почитал.
    Т.е. получается, что твой первый (главный) запрос ссылается на детальный, в котором есть вычисляемое поле. Так? И это поле ты пытаешься вывести?
    Что-то мне сомнительно, что такое возможно.
  • BUM (02.07.08 11:40) [5]

    > Так? И это поле ты пытаешься вывести?

    Иммено так. В чем затык тут. И почему это сомнительно возможно. В гриде запрос (*) отображается как надо, а в котором подставили нули и пустоты.
    ?
  • Sergey13 © (02.07.08 12:05) [6]
    > [5] BUM   (02.07.08 11:40)

    Видимо (не копал, потому не утверждаю) событие поиска значения при лукапе не вызывает пересчета калк полей в справочном датасете.
  • BUM (02.07.08 12:08) [7]
    Межет можно как-то еще вывести номер позиции суммы в результирующем наборе в зависимости от лукапной суммы? Что-то второй день не соображу как ;(
    PS:
    Params.Text:= IntToStr(Result.RecNo);


    в событии GetCellParams Grida не подходит т. к. есть сортировка по столбцам в OnTitleClick. Надо именно в наборе иметь это поле.
  • BUM (02.07.08 12:15) [8]

    > при лукапе не вызывает пересчета калк полей в справочном
    > датасете

    Т. е. при открытии справочного датасета не происходит вычисление Calk поля?
  • BUM (02.07.08 12:21) [9]
    Может ктото делал такую вещь как, например,  выделить красным цветом 3 самых больших величины в TDBGride?
    Мне цветом не надо, просто указать номер в списке в зависимости от величины.
  • Johnmen © (02.07.08 13:11) [10]
    >BUM

    Вычисляемое поле вполне м.б. отображаемым через лукапное.
    Если тебе интересно, в чем дело, приводи все необходимые подробности.
  • BUM (02.07.08 13:43) [11]

    > Если тебе интересно, в чем дело, приводи все необходимые
    > подробности.

    Ну я вроде всё опИсал выше..
    Есть запрос (1): ID менеджера, Кол-во звонков, Кол-во замеров
    Есть запрос (2): ID менеджера, Sum(договор) As SUMDOG Order By SUMDOG Desc,
    а также калк поле LEVEL: DataSet.FieldByName('LEVEL').AsInteger:= DataSet.RecNo; для расчета места по продажам
    В (1) запрос вставил лукап поля из (2) SUMDOG и LEVEL по ID менеджера.
    Потом к этой связке через TDataSetProvider цепляется TClientDataSet (это для возможности сортировки (индексации) по полям) на который вешается TDBGridEh, в котором по нажатию на титл меняется индекс.  В итоге получаю 0, Null, Null, 0, 0, 0, Null... пусто там где небыло найдено соответствие ID менеджера. Вобщем так.
  • BUM (02.07.08 13:49) [12]
    Всё это происходит до какого-либо нажатия на титл и индексации просто в LEVEL 0 и пусто.
  • Johnmen © (02.07.08 13:55) [13]
    Как организованы лукап поля?

    > В итоге получаю ...

    Где?
  • BUM (02.07.08 14:20) [14]
    Что значит

    > Как организованы лукап поля?

    не совсем понял. Может это имелось ввиду:
    В запросе (1)
    FieldKind = fkLookup
    FieldName = LEVEL
    KeyField = IDMANAGER
    LookUpDataSet = запрос (2)
    LookUpKeyField = IDMANAGER
    LookResultField = LEVEL

    > Где?

    В гриде, точнее в CDS который привязан к запросу (2)
  • BUM (02.07.08 14:25) [15]

    > В гриде, точнее в CDS который привязан к запросу (2)

    К запросу (1) конечно
  • Johnmen © (02.07.08 15:54) [16]

    > пусто там где небыло найдено соответствие ID менеджера.

    А что же ещё м.б. показано, если не найдено соответствие?

    ЗЫ
    Общее впечатление, что изобретается некий велик с квадратными колесами...:)
  • BUM (02.07.08 16:27) [17]

    > некий велик с квадратными колесами...:)

    Велик наверное называется "невозможность использовать во From подзапросы в LocalSQL"
    Может запросом можно както: Упрощенно
    Есть допустим таблица звонков T1: IDMANAGER, CALLSCOUNT, DATE
    и таблица договоров T2: IDMANAGER, DOGSUM, DATE, STAGE
    Таблица звонков ведущая
    Нужно выбрать из таблицы T1 звонки между датами и присоединить к ней таблицу T2 по IDMANAGER чтобы В T2 DATE тоже была между этими датами и состояние STAGE было > 50. Пока без подзапроса не получается. При попытке использовать T1 Left Join T2 On ... Where T1. =.. And T2. =.. выбирается только записи удовлетворяющие всем условиям, а при T1 Left Join T2 On ... And T2. = ... Where T1. =.. вообще виснет. Поэтому разбил на несколько запросов с группировками и присоединил к ведущему. Считается быстро и правильно. Тока как быть с порядковыми номерами.
  • Johnmen © (02.07.08 16:42) [18]

    > Нужно выбрать из таблицы T1 звонки между датами и присоединить
    > к ней таблицу T2 по IDMANAGER чтобы В T2 DATE тоже была
    > между этими датами и состояние STAGE было > 50.


    > При попытке использовать T1 Left Join T2 On ... Where T1.
    >  =.. And T2. =.. выбирается только записи удовлетворяющие
    > всем условиям

    А разве д.б. как-то по-другому?
  • Sergey13 © (02.07.08 16:42) [19]
    > [17] BUM   (02.07.08 16:27)

    select * from t1,t2
    where t1.IDMANAGER=t2.IDMANAGER
    and t2.STAGE >50
    and t1.date between :d1 and :d2
    and t2.date between :d1 and :d2
    order by по вкусу

    Смущает имя поля DATE.
    + возможно придется сделать 4 параметра, а не 2 - я не помню как это интерпретируется в локальном скуле.
 
Конференция "Базы" » LookUp поле по полю Calculate = 0 [D5, Paradox]
Есть новые Нет новых   [134470   +16][b:0][p:0.001]