Текущий архив: 2002.11.21;
Скачать: CL | DM;
ВнизQuantumGrid: еще вопрос Найти похожие ветки
← →
koks (2002-10-29 17:46) [0]Уважаемые господа, помогите решить проблемку..
Ситуация такая: у меня QG, которую я использую в режиме edgoLoadAllRecords. (у меня группировки и подытоги). Для корректной работы этого режима необходимо установить KeyField - уникальное поле, которое используется для синхрпонизации между компонентом и dataset-ом.
под грид я передавал TQuery, - простой SELECT с условием выборки и сортировки. Там естейственно для каждой возщвращаемой записи возврвщвлся уникальный индекс из таблицы. Все было OK. Теперь я передаю TQuery, в котором исп. аггрегирование. (GROUP BY). Естейственно в таком запросе уникальный индекс базовой таблицы уже не возвращается. Нужно как-то его создать... но КАК!
Вычисляемое поле - ... но как его грамотно вычислить, чтобы было уникальное значение. Специфика моей таблицы такова что на основе значений полей его не подсчитаешь.. получается либо ОЧЧЧЕНЬ большое число, а если строковое значение - почему-то QG его не воспринимает и отказывается с ним работать в режиме edgoLoadAllRecords... просто тихо игнорирует и все...
Подскажите пожалуйста... Заранее спасибо
← →
3JIA9I CyKA (2002-10-29 18:04) [1]Ку?
YourGrid->OptionsDB->edgoCanNavigation = False
← →
ioSan (2002-10-30 09:22) [2]"KeyField - уникальное поле" обязательно для "режима edgoLoadAllRecords", т.к. по этому полю грид синхронизирует записи.
Выход - иметь в таблице ID-поле.
← →
koks (2002-10-30 09:28) [3]2 3...СуKФ: А мне надо навигатить... !!
2 ioSan: я же написал - у меня есть уникальное ID в таблице.. Но у меня передается аггрегирущий запрос, в котором уже этого поля нет...(надеюсь по понятным причинам) Вопрос - как его сделать !!!
Поставлю вопрос еще корректнее - как сделать для TQuery вычисляемое поле, которое было бы уникальным для каждой записи. вариант построения его на основе значений полей у меня не получился (см выше..)
← →
3JIA9I CyKA (2002-10-30 09:31) [4]2kokЫ
Блин! Ты хелп к этому гриду читал? Почитай - полезно.
← →
ioSan (2002-10-30 09:32) [5]>> Но у меня передается аггрегирущий запрос, в котором уже этого поля нет...(надеюсь по понятным причинам)
Причина непонятна.
>> как сделать для TQuery вычисляемое поле, которое было бы уникальным для каждой записи. вариант построения его на основе значений полей у меня не получился
QG непоймет что Вы от него хотите
← →
koks (2002-10-30 10:39) [6]3JIA9I CyKA : читал... и понял, что моя проблема связана скорее не с гридом, а с запросом, который я туда передаю.. вот поэтому я и задал вопрос.
ioSan QG непоймет что Вы от него хотите
Почему ? насколько я понял, этому гриду нужен набор данных с ключевым полем. Если будет ключевое поле - все будет OK. Вопрос в том, как мне это поле получить для моего аггрегирующего запроса. Это уже вопрос не про QuantumGrid а про методологию работы с TQuery вообще.
← →
ioSan (2002-10-30 11:06) [7]В случае с {как сделать для TQuery вычисляемое поле} непоймет.
Попробуйте "KeyField"= "Главная таблица от которой все завязано".ID
← →
ioSan (2002-10-30 11:12) [8]Переделка - ioSan © (30.10.02 11:06)
Попробуйте "KeyField"="Главная таблица от которой все завязано".ID
Плюс из всех таблиц которые привязаны, все ID - тоже вставьте запрос.
Должно работать.
Если нет, то опишите код запроса и упращенную структуру таблиц.(мне это интересно, я тоже пользуюсь QG), попробуем потом.
← →
koks (2002-10-30 11:13) [9]Нет это точно не то - вынесу вопрос в отдельную ветку
← →
ioSan (2002-10-30 11:31) [10]Ну как нето?
Таблица 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 13:28) [11]у меня так (упрощенно):
Таблица 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 14:18) [12]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;
Сдаюсь!
Еслиб сразу наглядный пример...
С уважением.
← →
mvg_first (2002-10-30 15:09) [13]А если через временную таблицу? Которую заполнять из запроса с агрегированием. А уже временную таблицу отрисовывать в гриде. Ведь редактирование данных не подразумевается, иначе у тебя был бы уникальный идентификатор. Можно ведь даже хранимую процедуру написать которая будет выполнять все работу и возвращать Select * from #groupTemp.
← →
ioSan (2002-10-30 15:12) [14]Если так:
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 одной записи из группы
← →
koks (2002-10-30 15:58) [15]2: mvg_first: спасибо, да, это выход, но мне хотелось этого избежать... А хранимые процедуры нихт т.к у меня BDE -> Dbase
2 ioSan: ОГРОМНОЕ СПАСИБО - попробую, и мне кажется это есть выход
Мне такая мысль в голову не приходила.... наверно мал еще..
Попробую и доложу результаты..
← →
koks (2002-10-31 11:00) [16]2 ioSan: ОГРОМНОЕ спасибо - все заработало.
Страницы: 1 вся ветка
Текущий архив: 2002.11.21;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.008 c