Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.13;
Скачать: CL | DM;

Вниз

Как посдсчитать кол-во записей   Найти похожие ветки 

 
apl   (2006-06-07 08:09) [0]

В ADOCommand необходимо выполнить несколько последовательных запросов типа

Select id,count(*) from table_a group by ... where id=:AKode
Select id,count(*) from table_b group by ... where id=:AKode
Select id,count(*) from table_c group by ... where id=:AKode
Select id,count(*) from table_d group by ... where id=:AKode
Select id,count(*) from table_e group by ... where id=:AKode
Select id,count(*) from table_f group by ... where id=:AKode

Здесь выражения существенно упрощены, реально они
гораздо сложнее. Как в программе прочитать результат выполения каждого запроса.
По условиям задачи создать процедуру на сервере - не могу.


 
Хой   (2006-06-07 08:26) [1]

Используй метод recordcount компонента через  который вибираешь данные, например так ADOQuery1.recordcout либо если хочешь узнать коллчивство строк прмо в запросе то используй системную переменную @@rowcount, в которой храниться колличевство строк последнего выполненого запроса.


 
sniknik ©   (2006-06-07 08:48) [2]

> Как в программе прочитать результат выполения каждого запроса.
во первых выполнять в ADODataSet, т.к. запросы результирующие, ну или если выполнить в ADOCommand самоцель то результат происвоить рекордсету каому нибудь.
переходить от одного рекокордсета к следующему - NextRecordSet (метод рекордсета).


 
Sergey13 ©   (2006-06-07 09:17) [3]

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


 
Ega23 ©   (2006-06-07 09:19) [4]

Select id,count(*) from table_a group by ... where id=:AKode
union all
Select id,count(*) from table_b group by ... where id=:AKode
union all
Select id,count(*) from table_c group by ... where id=:AKode
union all
Select id,count(*) from table_d group by ... where id=:AKode
union all
Select id,count(*) from table_e group by ... where id=:AKode
union all
Select id,count(*) from table_f group by ... where id=:AKode


 
ЮЮ ©   (2006-06-07 10:30) [5]

GROUP BY ID тут лишнее, ввиду where id=:AKode

SELECT
 :AKode,
 (count(*) from table_a where id=:AKode) aCnt,
 ...
 (count(*) from table_f where id=:AKode) fFnt

З.Ы. надеюсь помнишь, что в Parameters будет 7 Items и с помошью ParamByName их не определишь.

Лучше тогда
DECLARE @AKode int
SET @AKode = :AKode
SELECT @AKode, ...


 
apl   (2006-06-07 10:54) [6]

Спасибо! Попробовал через ADOQuery1. В принципе терпимо, только приходится заменять запросы. Я указывал что они существенно упрощены и union - не подходит. Пришлось переписывать запрос несколько раз. При выполненни этого "цикла" прога ждет :((( и хотелось бы запустить какую-то "мультяшку" для информации юзера. Попробовал куртануть AVI, но почему-то пока выполняются запросы отображается только фрейм в котором хочу показать картинку, а сама мультяшка не показывается. Такая же ситуация при выполнении удаления записи на сервере (когда удалять приходится в большом кол-ве таблиц). :((( Висим-не висим, но впечатление не очень приятное. Как проинформировать юзера что программа все-таки занимается какой-то полезной работой? Статичная надпись типа "Ждите" - не  очень его убеждает. Попробовал поменять курсор на crWait - почему-то не получилось.


 
ЮЮ ©   (2006-06-07 10:59) [7]

Screen.Cursor := crSQLWait;
try
 
finally
 Screen.Cursor := crDefault;

end;

>Пришлось переписывать запрос несколько раз.
 Не хочешь об этом поговорить? :)


 
Ega23 ©   (2006-06-07 11:00) [8]


> При выполненни этого "цикла" прога ждет :((( и хотелось
> бы запустить какую-то "мультяшку" для информации юзера.
> Попробовал куртануть AVI, но почему-то пока выполняются
> запросы отображается только фрейм в котором хочу показать
> картинку, а сама мультяшка не показывается.


А потому, что ты это всё в одном потоке делаешь. Либо запросы в отдельном потоке исполняй, либо мультяшку в отдельном потоке показывай.
Можно, конечно, в цикле Application.ProcessMessages вставить, но тогда возможны жуткие тормоза. Этой штукой аккуратно пользоваться надо...


 
Sergey13 ©   (2006-06-07 11:05) [9]

2 [7] ЮЮ ©   (07.06.06 10:59)
> Не хочешь об этом поговорить? :)
Могу еще тему подкинуть - если для подобных запросов надо АВИ-шку включать, то самое время задуматься об оптимизации. 8-)
ИМХО.


 
apl   (2006-06-07 11:36) [10]

Попробуй, оптимизируй!
Ситуации ведь разные.
Удаляй в 18 (на сегодняшний день) таблицах, в чужой базе процедурой на сервере (тоже чужой)
DELETE from .... where id=....
и так 18 раз.
Что тут на оптимизируешь.

А по поводу подсчитать кол-во.
Нужно подсчитать 7 величин и отобразить их в лейблах на форме.
Подсчитываются вхождения id разных таблицах при различных условиях (т.е. есть от них завизимые записи или нет и еще всяко-разно). Специально не писал текст запросов. Спашивал как (можно-ли) вернуть результат используя последовательные запросы в процедуре. Понял - что нет.
А об оптимизации - к авторам базы. Я двумя руками за, и поддерживаю.


 
Ega23 ©   (2006-06-07 11:37) [11]


> DELETE from .... where id=....


DELETE from .... where id in (234,567,578, .... , 9856)
?


 
apl   (2006-06-07 11:38) [12]

id один для всех
а не 18 разных.


 
apl   (2006-06-07 11:41) [13]


> Либо запросы в отдельном потоке исполняй

Можно поподробнее - как


 
Sergey13 ©   (2006-06-07 11:48) [14]

2[10] apl   (07.06.06 11:36)
>DELETE from .... where id=....
>и так 18 раз.
>Что тут на оптимизируешь.

Да хоть 118 раз. Текст просто длинный и некрасиво, но исполняться должен практически мгновенно, если ID - первичный ключ и все (возможные) каскадные удаления используют индексы.

Хотя - чужая база - потемки, но как то подозрительно уж больно.


 
isasa ©   (2006-06-07 12:22) [15]

TADOCommand.ExecuteOptions: TExecuteOptions;
TCustomADODataSet.ExecuteOptions: TExecuteOptions;
TExecuteOption = (eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking, eoExecuteNoRecords);


 
apl   (2006-06-07 12:37) [16]

А как выполнить запрос в отдельном потоке?


 
sniknik ©   (2006-06-07 13:10) [17]

[0]
> необходимо выполнить несколько последовательных запросов типа
> Select ...

[10]
> Удаляй в 18 (на сегодняшний день) таблицах, в чужой базе процедурой на сервере (тоже чужой)
> DELETE ...

так типа, селектом, удаление, или всетаки процедурой?
специально путаеш отвечающих?

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


 
ЮЮ ©   (2006-06-07 13:39) [18]


>  Спашивал как (можно-ли) вернуть результат используя последовательные
> запросы в процедуре. Понял - что нет.

Странно, ведь в [2] показали как



Страницы: 1 вся ветка

Текущий архив: 2006.08.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.044 c
15-1153405319
Nic
2006-07-20 18:21
2006.08.13
Наверное глупый вопрос


11-1130349488
Vladimir Kladov
2005-10-26 21:58
2006.08.13
Версия 2.19


15-1152805009
Vlad
2006-07-13 19:36
2006.08.13
Модераторы


15-1152807930
Nic
2006-07-13 20:25
2006.08.13
Меня можно поздравить


1-1151730788
SDF
2006-07-01 09:13
2006.08.13
Работа с растровыми изображениями