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

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

Как узнать количество записей... [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...
но не всегда...


Наверх

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