Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Как узнать кол-во записей в запросе програмно?   Найти похожие ветки 

 
White ©   (2004-04-01 19:57) [0]

Через Query забираются записи из таблицы (процедуры) следут узнать сколько записей возвращает запрос. Как узнать.


 
Vlad ©   (2004-04-01 20:10) [1]


> White ©   (01.04.04 19:57)  

Часто Query.RecordCount помогает :-)


 
Vemer ©   (2004-04-02 00:08) [2]

Только FetchAll сделать не забудь.


 
DrPass ©   (2004-04-02 00:16) [3]

А умнее будет сперва выполнить аналогичный запрос, только с агрегатом count(*)


 
Ozone ©   (2004-04-02 07:27) [4]

TO DrPass ©[3]
Не согласен.


 
Кщд   (2004-04-02 08:49) [5]

Ozone ©   (02.04.04 07:27) [4]
так аргументируй


 
Sergey_Masloff   (2004-04-02 09:32) [6]

Ozone ©   (02.04.04 07:27) [4]
>Не согласен.
А зря. Конечно, если запрос очень "тяжелый" а возвращает гарантировано немного записей то RecordCount сойдет. Если запросом может быть select * from XXX то однозначно Count(*) так при фетче пары миллионов записей на клиента будет как минимум зависание а может и у датасета "морда треснуть"


 
Vemer ©   (2004-04-02 09:42) [7]

Еще быстрее будет Counnt(ID_Field).


 
Sergey_Masloff   (2004-04-02 09:51) [8]

Vemer ©   (02.04.04 09:42) [7]
>Еще быстрее будет Counnt(ID_Field).
Нет будет медленнее так как сервер будет проверять поле на NULL даже если оно объявлено как NOT NULL. Вернее не всякий сервер это будет проверять но в лучшем случае выйдет на скорость select count(*)

Каунт со звездочкой всегда оптимизирован на наибольшую производительность.


 
Ozone ©   (2004-04-02 10:20) [9]

TO Sergey_Masloff[6]
Я имел в виду вариант когда нужно "SELECT <not *> FROM ..."


 
Anatoly Podgoretsky ©   (2004-04-02 10:26) [10]

Sergey_Masloff   (02.04.04 09:32) [6]
Это только один аспект, а главный состоит в том, что два отдельных запроса в принципе совсем неправильно, количество записей может оказаться разным, точнее даже стоит считать, что оно разное. Речь не про однопользовательскую систему и не про систему с мелкой нагрузкой, а скажем про нормальную боевую систему. А вот RecordCount ошибки не даст, и не надо про большое количество записей, это тоже в принципе неверная работа, да и сомнение в данном счетчике как то не чувствуется.


 
Vlad ©   (2004-04-02 10:32) [11]

Действительно, кол-во записей может меняться постоянно, поэтому данные первого запроса (select count) могут быть не актуальными для второго (с основной выборкой). Тогда уж надо блокировать таблицу или делать соответствующий уровень изоляции транзакции.


 
Sergey_Masloff   (2004-04-02 10:39) [12]

Anatoly Podgoretsky ©, Vlad ©
Да я конечно знаю про этот момент. Я имею в виду вариант когда нужно узнать приблизительно кол-во записей. Обычно я делаю так: делаю select count(*) если количество - тысячи (сотни - настраивается) то отлуп "Критерий поиска не эффективен". Если немного то основной запрос и RecordCount. А так у нас справочник клиентов - миллионы (Vlad, ну ты ж знаешь ;-)) и какой-нибудь селект с like может и пару сотен тысяч притащить легко...


 
Vlad ©   (2004-04-02 10:42) [13]


> Sergey_Masloff   (02.04.04 10:39) [12]


> Vlad, ну ты ж знаешь ;-))

Знаю, знаю :-)
Только вот никак не могу придумать ситуацию когда жизненно необходимо вычислять Count для таких справочников...
;-)



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
1-1082111343
Tornado
2004-04-16 14:29
2004.05.02
PageControl


14-1081285003
cmapm
2004-04-07 00:56
2004.05.02
Помогите создать конвертор из doc в txt............спасибо


14-1081598796
Piter
2004-04-10 16:06
2004.05.02
Регистрация нового домена


1-1082201089
AndersoNRules
2004-04-17 15:24
2004.05.02
Mojno li zapihnuti v TStream peremennuyu a: TCustomShellTreeView?


9-1069584352
Максим
2003-11-23 13:45
2004.05.02
интернет казино - delphiX