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

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

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


Наверх

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