![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать количество записей... [D5, Oracle]
tovSuhov © (2002-02-18 14:21:00)... возвращенных оператором select в ADOQuery, не пробегая их до конца?
wicked (2002-02-18 20:27:00) [1]2 Johnmen © (18.02.02 17:27)
вообще-то это не отсутствие оптимизации, а особенностьклиентских курсоров... так устроены ADO и с этим ничего не поделать... единственный способ хоть как-то это соптимизировать - использовать многопоточность ADO....
Johnmen (2002-02-18 17:27:00) [2]>McSimm © : то есть если ADOQuery.Open, то записи тутже и все перекачиваютя ?
Если это так, то удручает отсутствие оптимизации :(
McSimm (2002-02-18 17:14:00) [3]>А ты уверен, что при выполнении Query1.RecordCount;
>записи реально не перекачаются на клиента ?!
Уверен. Если они и перекачиваются, то при открытии, а не при проверке RecordCount. :)
Мне кажется автор имел в виду " не пробегая в цикле по записям для их подсчета". Возможно я ошибаюсь.
Если используется серверный курсор, то единственный способ - выполнение отдельного запроса с Count(). Если clUseClient - то записи уже здесь и RecordCount уже известен
Johnmen (2002-02-18 16:34:00) [4]>drpass © : Ты хочешь сказать, что select f1,f2,f3,count(*) from tbltest1 пройдет ???!!!
Johnmen (2002-02-18 16:27:00) [5]>McSimm © : А ты уверен, что при выполнении Query1.RecordCount;
записи реально не перекачаются на клиента ?!
drpass (2002-02-18 16:23:00) [6]RecordCount только при работе с ADO и BDE возвращает количество записей в наборе.
В конце-концов, просто добавь поле count(*) к запросу - универсальный метод
McSimm (2002-02-18 16:06:00) [7]Но можно и
Query1.RecordCount;
McSimm (2002-02-18 16:05:00) [8]Вопрос был " не пробегаяих до конца", а не "Не выбирая".
Совершенно правильный и простой ответ дал:
>Yuri Btr © (18.02.02 14:34)
>Query1.Recordset.RecordCount;
Сергей Иванов (2002-02-18 15:52:00) [9]Как вариант можно попробовать следующее:
создаем MTS DataModule, на него кидаем тот же на select count(*) from..., в библиотеке типов (*.tlb) пишем метод, например GetRecsCount, который выполняет Query и возвращает клиенту кол-во записей. Регистрим *.tlb в качестве MTS-объекта.
На клиенте:
//
var Server :IMyServer;
//
function GetIt :integer;
begin
result := 0;
try
if Server=nil then Server := CreateRemote("YOU_NET_SERVER_NAME")
result := GetRecsCount;
if Server<>nil then Server := nil;
except
if Server<>nil then Server := nil;
end;
end;
И не надо ничего на клиента перекачивать.
petr_v_a (2002-02-18 14:43:00) [10]Не выбирая до конца узнать невозможно, так устроен OCI (((:
Yuri Btr (2002-02-18 14:34:00) [11]Query1.Recordset.RecordCount;
Alexandr (2002-02-18 14:26:00) [12]никак.
Выполни другой запрос, который тебе вернет кол-во записей первого запроса.
этот запрос обычно получается заменой select .... from...
на select count(*) from...
но не всегда...