-
Привет всем. Есть запрос к PARADOX с LoookUp полями SUMDOG, LEVEL из другого TQuery (*) где поле LEVEL является вычисляемым DataSet.FieldByName('LEVEL').AsInteger:= DataSet.RecNo; В запросе (*) есть суммы и обратная сортировка по ним. Поле LEVEL - позиция (чтото вроде лидера по продажам). Так вот поле SUMDOG (из селекта) нормально отображается в TDBGrid-e, поле LEVEL = 0, а не номер отсортированной записи. Почему так происходит?
-
Да, забыл вот, TDBGrid привязан к запросу в котором созданы лукап поля, а не запросу (*).
-
> [0] BUM (02.07.08 10:45) > Почему так происходит?
Потому, что запрос идет к таблицам в БД, а не к твоему датасету, который и знает твое вычисленное значение.
-
> Потому, что запрос идет к таблицам в БД, а не к твоему датасету, > который и знает твое вычисленное значение.
Я вообщето считал что в лукап поле подставляется значение из сформированного датасета найденое в нем по ID записи, провернулся - нашол - подставилось. Зачам же опять лезть на сервер когда набор уже сформирован и поле (хоть и вычисляемое) в датасете есть? И почему 0 а не пусто, как например это происходит для записей не найденых в лукапном датасете? Т. е. в гриде отображается как LEVEL = 0, Null, Null, 0, 0, 0, Null...
-
> [3] BUM (02.07.08 11:22)
Я кажется невнимательно твой первый пост почитал. Т.е. получается, что твой первый (главный) запрос ссылается на детальный, в котором есть вычисляемое поле. Так? И это поле ты пытаешься вывести? Что-то мне сомнительно, что такое возможно.
-
> Так? И это поле ты пытаешься вывести?
Иммено так. В чем затык тут. И почему это сомнительно возможно. В гриде запрос (*) отображается как надо, а в котором подставили нули и пустоты. ?
-
> [5] BUM (02.07.08 11:40)
Видимо (не копал, потому не утверждаю) событие поиска значения при лукапе не вызывает пересчета калк полей в справочном датасете.
-
Межет можно как-то еще вывести номер позиции суммы в результирующем наборе в зависимости от лукапной суммы? Что-то второй день не соображу как ;( PS: Params.Text:= IntToStr(Result.RecNo); в событии GetCellParams Grida не подходит т. к. есть сортировка по столбцам в OnTitleClick. Надо именно в наборе иметь это поле.
-
> при лукапе не вызывает пересчета калк полей в справочном > датасете
Т. е. при открытии справочного датасета не происходит вычисление Calk поля?
-
Может ктото делал такую вещь как, например, выделить красным цветом 3 самых больших величины в TDBGride? Мне цветом не надо, просто указать номер в списке в зависимости от величины.
-
>BUM
Вычисляемое поле вполне м.б. отображаемым через лукапное. Если тебе интересно, в чем дело, приводи все необходимые подробности.
-
> Если тебе интересно, в чем дело, приводи все необходимые > подробности.
Ну я вроде всё опИсал выше.. Есть запрос (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 менеджера. Вобщем так.
-
Всё это происходит до какого-либо нажатия на титл и индексации просто в LEVEL 0 и пусто.
-
Как организованы лукап поля?
> В итоге получаю ...
Где?
-
Что значит
> Как организованы лукап поля?
не совсем понял. Может это имелось ввиду: В запросе (1) FieldKind = fkLookup FieldName = LEVEL KeyField = IDMANAGER LookUpDataSet = запрос (2) LookUpKeyField = IDMANAGER LookResultField = LEVEL
> Где?
В гриде, точнее в CDS который привязан к запросу (2)
-
> В гриде, точнее в CDS который привязан к запросу (2)
К запросу (1) конечно
-
> пусто там где небыло найдено соответствие ID менеджера.
А что же ещё м.б. показано, если не найдено соответствие?
ЗЫ Общее впечатление, что изобретается некий велик с квадратными колесами...:)
-
> некий велик с квадратными колесами...:)
Велик наверное называется "невозможность использовать во 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. =.. вообще виснет. Поэтому разбил на несколько запросов с группировками и присоединил к ведущему. Считается быстро и правильно. Тока как быть с порядковыми номерами.
-
> Нужно выбрать из таблицы T1 звонки между датами и присоединить > к ней таблицу T2 по IDMANAGER чтобы В T2 DATE тоже была > между этими датами и состояние STAGE было > 50.
> При попытке использовать T1 Left Join T2 On ... Where T1. > =.. And T2. =.. выбирается только записи удовлетворяющие > всем условиям
А разве д.б. как-то по-другому?
-
> [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 - я не помню как это интерпретируется в локальном скуле.
|