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

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

ADOQuery + compute [D7, MSSQL]


vic ©   (2004-08-06 13:39:00) 

Вопрос следущий:
В QA и Profiler проверяю следующий запрос:

select raion,sum_kredit
from plats
where zachis_data between '12.07.2004' and '29.07.2004'
order by raion
compute sum(sum_kredit) by raion
compute sum(sum_kredit)

Выдает то, что надо, т.е. например в QA:

raion                                    sum_kredit                                            
---------------------------------------- -------------
a1                                       NULL
a1           45.0

                                        sum
                                        ==============
                                        45.0

raion                                    sum_kredit                                            
---------------------------------------- ---------------
a2                                       NULL
a2                                       360.0
a2                                       720.0

                                        sum
                                        ===============
                                        1080.0

...
                                        sum
                                        ================
                                        52912.3199999999

т.е. итоги по каждому району, и итог в целом.
В Profiler то же самое.
Но если этот запрос занести в ADOQuery, то в DBGrid отображается только:

raion                                    sum_kredit                                            
---------------------------------------- -------------
a1                                       NULL
a1           45.0

Если занести:

select raion,sum_kredit
from plats
where zachis_data between '12.07.2004' and '29.07.2004'
order by raion
compute sum(sum_kredit) by raion

то, результат тот же, т.е. для 1 района (?) и без итогов.
Если занести:

select raion,sum_kredit
from plats
where zachis_data between '12.07.2004' and '29.07.2004'
order by raion
compute sum(sum_kredit)

то результат:

raion                                    sum_kredit                                            
---------------------------------------- -------------
a1                                       NULL
a1           45.0
a2                                       NULL
a2                                       360.0
a2                                       720.0

В чем дело? Почему не отображаются итоговые суммы?

Кстати в MSSQL VIEW с таким запросом именно на compute
ругается. Может синтаксис там другой?
Повторюсь - в QA и Profiler все нормально.


sniknik   (2004-08-06 15:44:00) [1]

а..., савсем забыл
NextRecordset + F1 ;о))

> что за RecordsAffected,
переменная
RecordsAffected is the number of rows in the returned recordset.

> имеешь в виду ADOQuery1.RowsAffected?
с чего взял?

там два варианта, если так как у меня показано делать то это вариант (тип такой :), по другому интеджер.


vic   (2004-08-06 15:31:00) [2]

>sniknik ©  (06.08.04 15:06) [11]

>ADOQuery1.Recordset:= ADOQuery1.Recordset.NextRecordset(RecordsAffected);

что за RecordsAffected, имеешь в виду ADOQuery1.RowsAffected?

пишет - несоответсвие типов.


sniknik   (2004-08-06 15:06:00) [3]

> где - там?
в текущем (если он мульти), т.е.
ADOQuery1.Recordset:= ADOQuery1.Recordset.NextRecordset(RecordsAffected);
даст следующий, или ощибку если он один/последний.


vic   (2004-08-06 15:02:00) [4]

>sniknik ©  (06.08.04 14:23) [7]

там будет дополнительный рекордсет,
Recordset:= Recordset.NextRecordset(RecordsAffected);
в нем и смотри.

где - там?
не могу найти, честно говоря.
ADOQuery1.Recordset.RecordCount
выдает 50, а не 78, если считать все строки с итогами
(78 row(s) affected) - в QA


Ega23   (2004-08-06 14:38:00) [5]

Johnmen ©   (06.08.04 14:24) [8]

:о)
Блин, каждый божий раз Next забываю. Постоянно!  :о)


Johnmen   (2004-08-06 14:24:00) [6]

>Ega23 ©   (06.08.04 14:14) [5]

Как сказал АП, это тренировка нажимания Alt-Ctrl-Del
:)


sniknik   (2004-08-06 14:23:00) [7]

там будет дополнительный рекордсет,
Recordset:= Recordset.NextRecordset(RecordsAffected);
в нем и смотри.

> Кстати в MSSQL VIEW с таким запросом именно на compute
> ругается. Может синтаксис там другой?
как? он тебе наверное и говорит что не предназначен просматривать мультирекордсеты.


vic   (2004-08-06 14:22:00) [8]

>Ega23 ©  (06.08.04 14:14) [5]

понятненько, я так и думала делать, если не выйдет ничего,
т.е. compute никак не использовать, а жаль...

зы

>А чего же ты хотел?
>ну вот ты открылзапрос ...
Я женского рода вообще-то.


Ega23   (2004-08-06 14:14:00) [9]

ну вот ты открыл запрос, ты же можешь по всем полям пробежать и посчитать сумму.

With SomeDataSet do
 begin
  DisableControls;
  Sum:=0.0;
  First;
  While not Eof do Sum:=Sum+FieldByName(Твоё_Поле).asFloat;
  EnableControls;
 end;


vic   (2004-08-06 14:10:00) [10]

>Ega23 ©  (06.08.04 14:02) [3]

>Compute из запроса убери.

Допустим

>Считай его после открытия запроса.

Откуда считать?


Ega23   (2004-08-06 14:02:00) [11]

Compute из запроса убери. Считай его после открытия запроса.


vic   (2004-08-06 13:54:00) [12]

>Ega23 ©  (06.08.04 13:42) [1]

А чего же ты хотел?

The summary values generated by COMPUTE appear as separate result sets in the query results.

А откуда их взять? И есть ли возможность отобразить их в гриде?


Ega23   (2004-08-06 13:42:00) [13]

А чего же ты хотел?

The summary values generated by COMPUTE appear as separateresult sets in the query results.


Наверх

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