Форум: "Базы";
Текущий архив: 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