Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

LookUp поле по полю Calculate = 0 [D5, Paradox]


Страницы:   1 2

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 привязан к запросу в котором созданы лукап поля, а не запросу (*).


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо