Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.022 c
1-1081849117
Alone
2004-04-13 13:38
2004.05.02
MakeObjectInstance - memory leak


8-1071478333
alexeyII
2003-12-15 11:52
2004.05.02
Как можно вывести на принтер TIF-файл?


7-1079423908
rezya
2004-03-16 10:58
2004.05.02
Убить Exploer


3-1081070306
Rakhim
2004-04-04 13:18
2004.05.02
Редактирование в таблице


1-1081992439
scorpi
2004-04-15 05:27
2004.05.02
Excel график.....!!!!




   Наверх