Форум: "Базы";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];
ВнизКак узнать количество записей... Найти похожие ветки
← →
tovSuhov (2002-02-18 14:21) [0]... возвращенных оператором select в ADOQuery, не пробегая их до конца?
← →
Alexandr (2002-02-18 14:26) [1]никак.
Выполни другой запрос, который тебе вернет кол-во записей первого запроса.
этот запрос обычно получается заменой select .... from...
на select count(*) from...
но не всегда...
← →
Yuri Btr (2002-02-18 14:34) [2]Query1.Recordset.RecordCount;
← →
petr_v_a (2002-02-18 14:43) [3]Не выбирая до конца узнать невозможно, так устроен OCI (((:
← →
Сергей Иванов (2002-02-18 15:52) [4]Как вариант можно попробовать следующее:
создаем 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;
И не надо ничего на клиента перекачивать.
← →
McSimm (2002-02-18 16:05) [5]Вопрос был " не пробегая их до конца", а не "Не выбирая".
Совершенно правильный и простой ответ дал:
>Yuri Btr © (18.02.02 14:34)
>Query1.Recordset.RecordCount;
← →
McSimm (2002-02-18 16:06) [6]Но можно и
Query1.RecordCount;
← →
drpass (2002-02-18 16:23) [7]RecordCount только при работе с ADO и BDE возвращает количество записей в наборе.
В конце-концов, просто добавь поле count(*) к запросу - универсальный метод
← →
Johnmen (2002-02-18 16:27) [8]>McSimm © : А ты уверен, что при выполнении Query1.RecordCount;
записи реально не перекачаются на клиента ?!
← →
Johnmen (2002-02-18 16:34) [9]>drpass © : Ты хочешь сказать, что select f1,f2,f3,count(*) from tbltest1 пройдет ???!!!
← →
McSimm (2002-02-18 17:14) [10]>А ты уверен, что при выполнении Query1.RecordCount;
>записи реально не перекачаются на клиента ?!
Уверен. Если они и перекачиваются, то при открытии, а не при проверке RecordCount. :)
Мне кажется автор имел в виду " не пробегая в цикле по записям для их подсчета". Возможно я ошибаюсь.
Если используется серверный курсор, то единственный способ - выполнение отдельного запроса с Count(). Если clUseClient - то записи уже здесь и RecordCount уже известен
← →
Johnmen (2002-02-18 17:27) [11]>McSimm © : то есть если ADOQuery.Open, то записи тутже и все перекачиваютя ?
Если это так, то удручает отсутствие оптимизации :(
← →
wicked (2002-02-18 20:27) [12]2 Johnmen © (18.02.02 17:27)
вообще-то это не отсутствие оптимизации, а особенность клиентских курсоров... так устроены ADO и с этим ничего не поделать... единственный способ хоть как-то это соптимизировать - использовать многопоточность ADO....
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c