![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
LookUp поле по полю Calculate = 0 [D5, Paradox]
BUM © (2008-07-02 10:45:00)Привет всем.
Есть запрос к PARADOX с LoookUp полями SUMDOG, LEVEL из другого TQuery (*) где поле LEVEL является вычисляемым
DataSet.FieldByName('LEVEL').AsInteger:= DataSet.RecNo;
В запросе (*) есть суммы и обратная сортировка по ним. Поле LEVEL - позиция (чтото вроде лидера по продажам).
Так вот поле SUMDOG (из селекта) нормально отображается в TDBGrid-e, поле LEVEL = 0, а не номер отсортированной записи. Почему так происходит?
Sergey13 (2008-07-02 16:42:00) [21]> [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 - я не помню как это интерпретируется в локальном скуле.
Johnmen (2008-07-02 16:42:00) [22]
> Нужно выбрать из таблицы T1 звонки между датами иприсоединить
> к ней таблицу T2 по IDMANAGER чтобы В T2 DATE тоже была
> между этими датами исостояние STAGE было > 50.
> При попытке использовать T1 Left Join T2 On ... Where T1.
> =.. AndT2. =.. выбирается только записи удовлетворяющие
> всем условиям
А разве д.б. как-то по-другому?
BUM (2008-07-02 16:27:00) [23]
> некий велик с квадратными колесами...:)
Велик наверное называется "невозможность использовать во 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 (2008-07-02 15:54:00) [24]
> пусто там где небыло найдено соответствие ID менеджера.
А что же ещё м.б. показано, если не найдено соответствие?
ЗЫ
Общее впечатление, что изобретается некий велик с квадратными колесами...:)
BUM (2008-07-02 14:25:00) [25]
> В гриде, точнее в CDS который привязан к запросу (2)
К запросу (1) конечно
BUM (2008-07-02 14:20:00) [26]Что значит
> Как организованы лукап поля?
не совсем понял. Может это имелось ввиду:
В запросе (1)
FieldKind = fkLookup
FieldName = LEVEL
KeyField = IDMANAGER
LookUpDataSet = запрос (2)
LookUpKeyField = IDMANAGER
LookResultField = LEVEL
> Где?
В гриде, точнее в CDS который привязан к запросу (2)
Johnmen (2008-07-02 13:55:00) [27]Как организованы лукап поля?
> В итоге получаю ...
Где?
BUM (2008-07-02 13:49:00) [28]Всё это происходит до какого-либо нажатия на титл и индексации просто в LEVEL 0 и пусто.
BUM (2008-07-02 13:43:00) [29]
> Если тебе интересно, в чем дело, приводи все необходимые
> подробности.
Ну я вроде всё опИсал выше..
Есть запрос (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 менеджера. Вобщем так.
Johnmen (2008-07-02 13:11:00) [30]>BUM
Вычисляемое поле вполне м.б. отображаемым через лукапное.
Если тебе интересно, в чем дело, приводи все необходимые подробности.
BUM (2008-07-02 12:21:00) [31]Может ктото делал такую вещь как, например, выделить красным цветом 3 самых больших величины в TDBGride?
Мне цветом не надо, просто указать номер в списке в зависимости от величины.
BUM (2008-07-02 12:15:00) [32]
> при лукапе не вызывает пересчета калк полей в справочном
> датасете
Т. е. при открытии справочного датасета не происходит вычисление Calk поля?
BUM (2008-07-02 12:08:00) [33]Межет можно как-то еще вывести номер позиции суммы в результирующем наборе в зависимости от лукапной суммы? Что-то второй день не соображу как ;(
PS:
Params.Text:= IntToStr(Result.RecNo);
в событии GetCellParams Grida не подходит т. к. есть сортировка по столбцам в OnTitleClick. Надо именно в наборе иметь это поле.
Sergey13 (2008-07-02 12:05:00) [34]> [5] BUM (02.07.08 11:40)
Видимо (не копал, потому не утверждаю) событие поиска значения при лукапе не вызывает пересчета калк полей в справочном датасете.
BUM (2008-07-02 11:40:00) [35]
> Так? И это поле ты пытаешься вывести?
Иммено так. В чем затык тут. И почему это сомнительно возможно. В гриде запрос (*) отображается как надо, а в котором подставили нули и пустоты.
?
Sergey13 (2008-07-02 11:35:00) [36]> [3] BUM (02.07.08 11:22)
Я кажется невнимательно твой первый пост почитал.
Т.е. получается, что твой первый (главный) запрос ссылается на детальный, в котором есть вычисляемое поле. Так? И это поле ты пытаешься вывести?
Что-то мне сомнительно, что такое возможно.
BUM (2008-07-02 11:22:00) [37]
> Потому, что запрос идет к таблицам в БД, а не к твоему датасету,
> который и знает твое вычисленное значение.
Я вообщето считал что в лукап поле подставляется значение из сформированного датасета найденое в нем по ID записи, провернулся - нашол - подставилось. Зачам же опять лезть на сервер когда набор уже сформирован и поле (хоть и вычисляемое) в датасете есть? И почему 0 а не пусто, как например это происходит для записей не найденых в лукапном датасете?
Т. е. в гриде отображается как
LEVEL = 0, Null, Null, 0, 0, 0, Null...
Sergey13 (2008-07-02 11:08:00) [38]> [0] BUM (02.07.08 10:45)
> Почему так происходит?
Потому, что запрос идет к таблицам в БД, а не к твоему датасету, который и знает твое вычисленное значение.
BUM (2008-07-02 10:53:00) [39]Да, забыл вот, TDBGrid привязан к запросу в котором созданы лукап поля, а не запросу (*).