Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

InterBase [D6, IB6.x]


Страницы:   1 2 3

Ru ©   (2003-10-09 17:53:00) 

1. Как узнать количество записей в таблице базы (RecordCount стабильно выдает 1)


Anatoly Podgoretsky   (2003-10-10 11:35:00) [41]

Жук © (10.10.03 11:24) [16]
И вот теперь представь, получение Count по такой выборке


Danilka   (2003-10-10 11:33:00) [42]

[16] Жук © (10.10.03 11:24)
Скажет, "Какой-такой милый, я-же девушка, гомосек ты несчастный!"


Жук   (2003-10-10 11:24:00) [43]


> sniknik © (09.10.03 18:55) [7]
> ну к примеру, делает юзер запрос а вы ему ограничение ставите
> если количество записей > 100 тысячь, то пресекать попытку,
> типа "милый, столько данных и за месяц не обработать. зачем
> тебе стока в конце рабочего дня?".

Предсталяю, что мне скажет главбух, когда после составления круто-навороченной выборки с кучей условий и пятиминутного ожидания выполнения запроса, прога ему мессагнет :"Милый,... и т.п." :-)


sniknik   (2003-10-10 11:21:00) [44]

Anatoly Podgoretsky © (10.10.03 10:14) [11]
ну я то не отвечал на вопрос, а на поправку от Johnny Smith © [6], в общем случае. конечно нужно смотреть по конкретному случаю.

а кстати пример неправильной работы с SQL (все на таблицах, не используя возможности sql), у всех перед глазами, имею в виду 1С, все видели. переделывая их отчеты средствами SQL люди добиваются ускорения в сотни раз!!! (сделай так чтобы на твоей программе этого резерва не было :о))

Ru © (10.10.03 10:20) [13]
> В Paradox была такая удобная вещь как:
> Table1.Next; а для InterBase (используя IBX) что нельзя сделать IBDataSet1.Next?
почему нельзя, можно. только желательно знать что происходит, если в парадокс (локальный вариант) просто перемещался указатель таблице (типа Point + размер записи = указатель уже на следующей записи) очень быстро, то в случае с sql сервером два варианта, при уже полученном на локаль датасетом будет то же самое только в памяти а вот в случае с серверным курсором запись будет докачиватся с сервера если конечно она еще не закачена и вот тут возможны тормоза (последовательный перебор в серверном курсоре гораздо дольше чем закачка + перебор в локальном курсоре, тестил на ADO - MSSQL (думаю когда передается сразу весь рекордсет то он пакуется)).
в общем когда с работаеш локальным курсором то тормозит на открытии (данные качаются на клиента), с серверным тормозит на докачке а открывает быстро. узнать что тебе выгоднее, часто только эксперименты могут помоч.
(с каким курсором работает IBX и можно ли менять не знаю, не работал)


Mike Kouzmine   (2003-10-10 11:15:00) [45]

Можно. Но это другая песня.


Ru   (2003-10-10 10:20:00) [46]

В Paradox была такая удобная вещь как:
Table1.Next; а для InterBase (используя IBX) что нельзя сделать IBDataSet1.Next?


Sergey13   (2003-10-10 10:16:00) [47]

2Ru © (10.10.03 10:02) [9]
>Так это что для нормлаьной работы с InterBase мне все на SQL запросах делать?
Для нормальной так проще.


Anatoly Podgoretsky   (2003-10-10 10:14:00) [48]

sniknik © (09.10.03 18:55) [7]
Только вот результаты могут быть разные, например запрос с ограничением записей. Но как правило все таки надо использовать count(*), но вопрос был не про это, а про то что мол RecordCount не работает. Во вторых неизвестно, что за запрос, возможно время его формирования значительно превосходит время перекачки результата по сети. Скажем некоторый длительный расчет, в результате которого будет выдано всего несколько записей.

Говорить точно можно только имея эти данные, но никак нельзя одназначно сказать какой метод будет быстрее.


Sergey_Masloff   (2003-10-10 10:12:00) [49]

Ru © (10.10.03 10:02) [9]
>Так это что для нормлаьной работы с InterBase мне все на SQL >запросах делать?
ес-сно.


Ru   (2003-10-10 10:02:00) [50]

Такой уж совсем глупый вопрос:
Так это что для нормлаьной работы с InterBase мне все на SQL запросах делать?


dzh2000   (2003-10-09 21:10:00) [51]

sniknik абсолютно прав.
Правильнее добавить Query и сделать запрос типа select count(*).
Это и удобно и менее загружает систему, чем Last и FetchAll.


sniknik   (2003-10-09 18:55:00) [52]

Johnny Smith © (09.10.03 18:32) [6]
> Когда надо всего-навсего RecordCount узнать?
> :)))))))
именно тогда, запрос с ... COUNT(*) ... гораздо быстрее чем фетч до конца даже небольшой таблички, т.к. перекачивается всего 1 запись.
а качать все возможно и не нужно.

ну к примеру, делает юзер запрос а вы ему ограничение ставите если количество записей > 100 тысячь, то пресекать попытку, типа "милый, столько данных и за месяц не обработать. зачем тебе стока в конце рабочего дня?".
забота о юзере однако, заодно и трафик поэкономить. а вот если "всего-навсего RecordCount узнать" и зафетчить ради этого все, то есть вероятность что рабочий день юзера кончится так и не начавшись, потому как юзер он не один, их много и все они с утра начнут бомбардировать сервер неподьемными запросами.


Johnny Smith   (2003-10-09 18:32:00) [53]

2kaif © (09.10.03 18:27) [5]
Вообще-то в IB для этого запросы существуют.
Типа SELECT COUNT(*)...
Побыстрее фетча работают.

Когда надо всего-навсего RecordCount узнать?
:)))))))


kaif   (2003-10-09 18:27:00) [54]

Вообще-то в IB для этого запросы существуют.
Типа SELECT COUNT(*)...
Побыстрее фетча работают.


sniknik   (2003-10-09 18:06:00) [55]

> А что такое "Lasr"?
это Last набранное слепым методом и кривыми пальцами. :о))


Ru   (2003-10-09 18:02:00) [56]

>Anatoly Podgoretsky © (09.10.03 17:57) [1]

А что такое "Lasr"?

>Брат © (09.10.03 17:59) [2]

попробую


Брат   (2003-10-09 17:59:00) [57]

Сначала делашь так:
IBTable.FetchAll или IBQuery.FetchAll
а затем считываешь RecordCount


Anatoly Podgoretsky   (2003-10-09 17:57:00) [58]

Нет не стабильно, сделай Lasr и посмотри снова.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо