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




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.017 c
3-57292           ASM                   2002-02-18 22:52  2002.03.18  
Народ хэлп нужен! Как в ComboBox е сделать:


3-57287           Dimedrol              2002-02-18 15:33  2002.03.18  
UDF и Interbase


7-57532           Serghei               2001-12-14 16:25  2002.03.18  
Браузер в OleContainer


3-57305           Chak                  2002-02-19 12:26  2002.03.18  
Почему возникает ---- error creating cursor handle-----?


3-57318           Vera                  2002-02-17 17:50  2002.03.18  
Импорт данных из Excel