Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];

Вниз

Общий count...   Найти похожие ветки 

 
mOOx_   (2003-08-23 14:34) [0]

Поясняю: есть класс а в нем процедура, в которую я передаю запрос. В ней заполняются поля этого самого класса, в том числе и count. Класс писался, когда в базе было макс. 400 записей. Поскольку свойство RecordCount в TIBQuery работает криво, то определение Count"а я делал так, Next до конца набора и Count:=RecordCount :). Когда я опробовал этот класс для того, чтобы достать 40000 записей, то просто за..... ждать. Значит вопрос в следующем: корректно ли для определения count"а вырезать из запроса все между select и from и вставлять на это место count(*)? При этом надо учесть, что запрос может быть давольно сложным :), возможны не только выборки из нескольких таблиц, но и вложенные запросы.


 
kaif   (2003-08-23 14:42) [1]

В принципе проблем не вижу. Должно работать. Почему бы нет?
Я еще не разу не сталкивался с проблемой того, чтобы нельзя было заменить возвращаемый набор полей на просто count(*). Если конечно, в запросе нет GROUP BY. Как известно, GROUP BY потребует перечисления того же набора неагрегатных полей после SELECT. Но я думаю, у тебя не тот случай. Удали еще из запроса ORDER BY, если такое там присуствует.


 
Vorobyev Sergey   (2003-08-23 14:43) [2]


> Поскольку свойство RecordCount в TIBQuery работает криво

Оно не работает криво, просто TIBQuery отбирает не все записи,
и чтобы RecordCount вернул все записи надо:
IBQuery1.FetchAll;
n := IBQuery.RecordCount



> корректно ли для определения count"а вырезать из запроса
> все между select и from и вставлять на это место count(*)?

Не корректно..
Для каждого запроса по разному.. Здесь нужен специальный анализатор (парсер), который бы для ЛЮБОГО запроса составлял запрос для подсчета количества записей.. Честно говоря, я такого анализатора не встречал, да и боюсь его невозможно создать из-за того, что даже вручную не для любого запроса можно создать такой..


 
kaif   (2003-08-23 14:44) [3]

И еще. Если в запросе возможен UNION, то идея работать не будет. Или же надо будет везде после SELECT вставлять COUNT(*), а потом на клиенте еще раз суммировать результат.


 
kaif   (2003-08-23 14:46) [4]

2 Vorobyev Sergey (23.08.03 14:43) [2]
Ты можешь привести пример, когда нельзя так поступить?
(без GROUP BY и ORDER BY)


 
Vorobyev Sergey   (2003-08-23 14:50) [5]


> Ты можешь привести пример, когда нельзя так поступить?
> (без GROUP BY и ORDER BY)

Пример, не могу..
Я только предполагаю, это гипотеза если хотите.. (я же написал ".. боюсь его невозможно создать..")

Но можно объявить конкурс: "Кто составит запрос, к которому нельзя будет составить запрос на подсчет количества записей"


 
mOOx_   (2003-08-23 15:03) [6]

Отличная идея про конкурс :). Буду думать. А свой способ я всетаки попробую потестить. Вообщем то пока запросы не такие уж и сложные (по крайней мере нет union и order). Если найду проблему - сразу отпишу. А вообще спасибо за заботу о ближнем :)



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

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

Наверх





Память: 0.46 MB
Время: 0.013 c
14-48755
Neox
2003-08-26 12:28
2003.09.15
Любителям 1С


6-48673
Maxim Pshevlotsky
2003-07-11 06:54
2003.09.15
TIDFTP.LIST - Отличия присылаемых строк Windows и Linux


3-48464
Val
2003-08-22 13:22
2003.09.15
Работа с isql


1-48592
МаХиМ
2003-09-03 17:20
2003.09.15
Загрузка Дельфи


14-48770
Карелин Артем
2003-08-26 13:46
2003.09.15
Как сделать, чтобы шапка таблицы в Екселе печаталась на всех стр.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский