![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
QuantumGrid: еще вопрос [D5, dBase, FoxPro]
koks © (2002-10-29 17:46:00)Уважаемые господа, помогите решить проблемку..
Ситуация такая: у меня QG, которую я использую в режиме edgoLoadAllRecords. (у меня группировки и подытоги). Для корректной работы этого режима необходимо установить KeyField - уникальное поле, которое используется для синхрпонизации между компонентом и dataset-ом.
под грид я передавал TQuery, - простой SELECT с условием выборки и сортировки. Там естейственно для каждой возщвращаемой записи возврвщвлся уникальный индекс из таблицы. Все было OK. Теперь я передаю TQuery, в котором исп. аггрегирование. (GROUP BY). Естейственно в таком запросе уникальный индекс базовой таблицы уже не возвращается. Нужно как-то его создать... но КАК!
Вычисляемое поле - ... но как его грамотно вычислить, чтобы было уникальное значение. Специфика моей таблицы такова что на основе значений полей его не подсчитаешь.. получается либо ОЧЧЧЕНЬ большое число, а если строковое значение - почему-то QG его не воспринимает и отказывается с ним работать в режиме edgoLoadAllRecords... просто тихо игнорирует и все...
Подскажите пожалуйста... Заранее спасибо
koks (2002-10-31 11:00:00) [1]2 ioSan: ОГРОМНОЕ спасибо - все заработало.
koks (2002-10-30 15:58:00) [2]2: mvg_first: спасибо, да, это выход, но мне хотелось этого избежать... А хранимые процедуры нихт т.к у меня BDE -> Dbase
2 ioSan: ОГРОМНОЕ СПАСИБО - попробую, и мне кажется это есть выход
Мне такая мысль в голову не приходила.... наверно мал еще..
Попробую и доложу результаты..
ioSan (2002-10-30 15:12:00) [3]Если так:
SELECT T1.CH1, T1.CH2, T.CH3, SUM(T1.MASSA) AS SMASSA,
SUM(T1.PRICE) AS SPRICE,
MAX(T1.ID1) AS SID1
FROM T1
WHERE (.... большое условие ....)
GROUP BY T.CH1, T.CH2, T.CH3
ORDER BY T.CH1, T.CH2, T.CH3;
SID1 = ID одной записи из группы
mvg_first (2002-10-30 15:09:00) [4]А если через временную таблицу? Которую заполнять из запроса с агрегированием. А уже временную таблицу отрисовывать в гриде. Ведь редактирование данных не подразумевается, иначе у тебя был бы уникальный идентификатор. Можно ведь даже хранимую процедуру написать которая будет выполнять все работу и возвращать Select * from #groupTemp.
ioSan (2002-10-30 14:18:00) [5]koks © (30.10.02 13:28)
В этом варианте - Нельзя.
>> Теперь я передаю TQuery, в котором исп. аггрегирование. (GROUP BY).
С самого начала предполажил, что аггрегирование произойдет в "прицепной" таблице, в мастер-таблице будет ID. Разные подходы.
У меня бы это выгледело вот так:
Таблица T1
поля: T1.ID1 T1.CH1_1 T1.CH1_2 T1.CH1_3
Таблица T2
поля: T2.ID2 T2.ID1 T2.MASSA T2.PRICE
Запрос:
SELECT T1.ID1, T1.CH1_1, T1.CH1_2, T1.CH1_3,
SUM(T2.MASSA) AS SMASSA,
SUM(T2.PRICE) AS SPRICE
FROM T1, T2
WHERE T1.ID1=T2.ID1 AND (.... большое условие ....)
GROUP BY T2.ID1
ORDER BY T2.ID1;
Сдаюсь!
Еслиб сразу наглядный пример...
С уважением.
koks (2002-10-30 13:28:00) [6]у меня так (упрощенно):
Таблица T1
поля: T1.ID1 T1.CH1 T1.CH2 T1.CH3 T1.MASSA T1.PRICE
Запрос:
SELECT T1.CH1, T1.CH2, T.CH3, SUM(T1.MASSA) AS SMASSA,
SUM(T1.PRICE) AS SPRICE
FROM T1
WHERE (.... большое условие ....)
GROUP BY T.CH1, T.CH2, T.CH3
ORDER BY T.CH1, T.CH2, T.CH3;
всунуть сюда T1.ID никак низя...
ioSan (2002-10-30 11:31:00) [7]Ну как нето?
Таблица T1
Поля T1.ID1, T1.ID2, T1.NAME1
Таблица T2
Поля T2.ID2, T2.ID3
Таблица T3
Поля T3.ID3, T3.NAME3
SELECT T1.ID1, T1.NAME1, T2.ID2, T3.ID3, T3.NAME3
FROM T1, T2, T3
WHERE T1.ID2=T2.ID2 AND T2.ID3=T3.ID3
GROUP BY T3.NAME3
ORDER BY T1.NAME1
"KeyField"=T1.ID1
Если это нето то Off.
koks (2002-10-30 11:13:00) [8]Нет это точно не то - вынесу вопрос в отдельную ветку
ioSan (2002-10-30 11:12:00) [9]Переделка - ioSan © (30.10.02 11:06)
Попробуйте "KeyField"="Главная таблица от которой все завязано".ID
Плюс из всех таблиц которые привязаны, все ID - тоже вставьте запрос.
Должно работать.
Если нет, то опишите код запроса и упращенную структуру таблиц.(мне это интересно, я тоже пользуюсь QG), попробуем потом.
ioSan (2002-10-30 11:06:00) [10]В случае с {как сделать для TQuery вычисляемое поле} непоймет.
Попробуйте "KeyField"= "Главная таблица от которой все завязано".ID
koks (2002-10-30 10:39:00) [11]3JIA9I CyKA : читал... и понял, что моя проблема связана скорее не с гридом, а с запросом, который я туда передаю.. вот поэтому я и задал вопрос.
ioSan QG непоймет что Вы от него хотите
Почему ? насколько я понял, этому гриду нужен набор данных с ключевым полем. Если будет ключевое поле - все будет OK. Вопрос в том, как мне это поле получить для моего аггрегирующего запроса. Это уже вопрос не про QuantumGrid а про методологию работы с TQuery вообще.
ioSan (2002-10-30 09:32:00) [12]>> Но у меня передается аггрегирущий запрос, в котором уже этого поля нет...(надеюсь по понятным причинам)
Причина непонятна.
>> как сделать для TQuery вычисляемое поле, которое было бы уникальным для каждой записи. вариант построения его на основе значений полей у меня не получился
QG непоймет что Вы от него хотите
3JIA9I CyKA (2002-10-30 09:31:00) [13]2kokЫ
Блин! Ты хелп к этому гриду читал? Почитай - полезно.
koks (2002-10-30 09:28:00) [14]2 3...СуKФ: А мне надо навигатить... !!
2 ioSan: я же написал - у меня есть уникальное ID в таблице.. Но у меня передается аггрегирущий запрос, в котором уже этого поля нет...(надеюсь по понятным причинам) Вопрос - как его сделать !!!
Поставлю вопрос еще корректнее - как сделать для TQuery вычисляемое поле, которое было бы уникальным для каждой записи. вариант построения его на основе значений полей у меня не получился (см выше..)
ioSan (2002-10-30 09:22:00) [15]"KeyField - уникальное поле" обязательно для "режима edgoLoadAllRecords", т.к. по этому полю грид синхронизирует записи.
Выход - иметь в таблице ID-поле.
3JIA9I CyKA (2002-10-29 18:04:00) [16]Ку?
YourGrid->OptionsDB->edgoCanNavigation = False