Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.067 c
2-1153569490
Ivolg
2006-07-22 15:58
2006.08.13
Размер изображния


2-1153673419
Debilo
2006-07-23 20:50
2006.08.13
Скриншот экрана


6-1143428539
Denisac
2006-03-27 07:02
2006.08.13
Кодировка в сообщении


15-1153301533
cosinus
2006-07-19 13:32
2006.08.13
Эээ... Туплю? Проблеммы с установкой DSPack.


4-1145378482
Dust
2006-04-18 20:41
2006.08.13
Получить адрес функции из указателя на метод





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский