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

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

количество записей в IBQuery? [D6, IB6.x]


AlexanderSK ©   (2004-04-12 17:16:00) 

Выполняю запрос - IBQuery.Open
Смотрю количество полученых записей - IBQuery.RecordCount
Получаю "1"
Начинаю перебирать записи через First/Next их оказывается больше!

Подскажите, пожалуйста, в чем тут дело? И как с этим бороться?


Johnmen   (2004-04-21 11:21:00) [1]

>kaif ©   (21.04.04 10:52) [17]

Да, конечно. Разумное применение и ограничение должно присутствовать...
Просто применение или неприменение FA зависит от данных конкретных, я бы даже сказал, сущностных и смысловых, факторов...
А таковые отсутствовали в вопросе автора.
:)


kaif   (2004-04-21 10:52:00) [2]

2 Sergey_Masloff   (21.04.04 09:08) [15]

Спасибо! :)

2 Johnmen ©   (21.04.04 09:27) [16]

 И все таки я бы сделал исключение для справочников. По вашей логике получается, что и DBLookupComboBox-ы нельзя использовать и даже сетки. Мало ли? А вдруг там миллиард записей? Например в справочнике "Страны". А кто его знает? Мало ли что может быть... Мы же должны каждый день готовиться к ядерной войне. Следовательно, если справочник "страны" доступен пользователю для редактирования, то ни грид, ни комбо-бокс давать ему нельзя! Потому что если он внесет миллиард стран и случайно потянет ползунок, то фетчиться будет долго...
 :)


Johnmen   (2004-04-21 09:27:00) [3]

>kaif ©   (20.04.04 18:55) [12]
>Ну почему FetchAll неправильно?
>Допустим, ...
>Предположим, ...
>..., допустим, ...
>Почему бы не сделать ...
>Предположим, ...

:)

В том и дело, что применимость FA зависит от некоторых условий.
Но мы же не хотим, чтобы на поведение нашего приложения влияли внешние факторы. Исходящие к тому же от пользователя ? Я думаю, что нет. Тогда мы не должны учитывать и опираться на всякие "если" и "возможно". Т.е. не делать FA.


Sergey_Masloff   (2004-04-21 09:08:00) [4]

kaif ©   (21.04.04 00:45) [14]
>Тогда я сниму шляпу - и верну чуваку его $50.
В корне неверный подход ;-) Клиента, как говорит один мой знакомый официант, надо ласкать. Если у него 3 млн. строк инвойсы то может под него можно внести пару изменений и глядишь не ты ему 50$ а он тебе инвойсик оплатит переводом на твой эккаунт 50K$ и договор о долгосрочном сотрудничестве. Нет, серьезно.
 Кстати посмотрел я твою Allegro. Молодец, симпатично получается. Так что желаю успехов в развитии и откусить кусочек рынка!


kaif   (2004-04-21 00:45:00) [5]

2 Sergey Masloff   (20.04.04 21:24) [13]
 Нет, ну если я пишу программу под названием InvoiceMaker и ее хрен знает кто покупает по всему земному шару, тогда может в один пасмурный придет дядя в черном плаще и скажет, что в его инвойсе всего ср#ных три миллиона строк, а моя программа, которую он купил за $50 этот инвойс долго фетчит, проклятая!
 Тогда я сниму шляпу - и верну чуваку его $50.
 :)


Sergey Masloff   (2004-04-20 21:24:00) [6]

kaif ©   (20.04.04 18:55) [12]
>Ну почему FetchAll неправильно? Допустим, разработчик заранее >знает, чтозаписей в этом наборе не более пары сотен. >Предположим, это строки какого-нибудь инвойса.
Ну то есть ты думаешь в инвойсе не может быть более пары сотен строк? Десятки тысяч могут быть легко ;-) Лучше конечно не полагаться на то что разработчик "знает" заранее. Хотя конечно иногда прикинуть это число можно с достаточно большой долей уверенности.


kaif   (2004-04-20 18:55:00) [7]

Ну почему FetchAll неправильно? Допустим, разработчик заранее знает, чтозаписей в этом наборе не более пары сотен. Предположим, это строки какого-нибудь инвойса. А далее, допустим, разработчих хочет экспортировать эти строки куда-нибудь в Excel или еще куда... И хочет ProgressBar прикрутить. Почему бы не сделать FetchAll и не присвоить:
 ProgressBar.Max := IBQuery.RecordCount
Предположим, что время отфетчивания раз в 10 меньше времени экспорта. Тогда это имеет смысл сделать. А не вызывать еще дополнительный агрегатный запрос, который все равно ту же информацию должен выдать.


Vlad   (2004-04-20 18:33:00) [8]


> Koba   (20.04.04 18:30) [10]

Это не есть хорошо.


Koba   (2004-04-20 18:30:00) [9]

Выполняеш SQL-запрос select count(*) from xxx
и kol:longint
 kol:=query1.fields[0].asinteger
но потом не забудь выполнить запрос select * from xxx


Vemer   (2004-04-19 09:38:00) [10]

Если интересует количество записей, можно запрос с группировкой и Count() переделать попробовать. Хотя зависит от задачи.


Vlad   (2004-04-12 17:56:00) [11]

Не, ну если у автора стоит вопрос между одной или несколькими записями, то FetchAll поможет, однако действительно, непонятна цель такой странной выборки...


Johnmen   (2004-04-12 17:40:00) [12]

>AlexandserSK   (12.04.04 17:32) [5]

Не очень понятна цель таких манипуляций...

>serge35   (12.04.04 17:32) [6]
>FetchAll - это правильно!.

На sql.ru один деятель тоже так считает. Но никак не может понять, почему же ему приходится больше 1 часа (!!!) ждать отфечивания 4 млн записей.... :)
Кстати, так и не дождавшись...


serge35   (2004-04-12 17:32:00) [13]

FetchAll - это правильно!.


AlexandserSK   (2004-04-12 17:32:00) [14]

>Johnmen ©  (12.04.04 17:28) [4]

Выполняем запрос. Далее если результат - одна запись ее и берем! А если несколько записей - тогда еще по ряду критериев выбираем опять же одну запись!


Johnmen   (2004-04-12 17:28:00) [15]

>AlexanderSK   (12.04.04 17:26) [3]

Смотря что надо...


AlexanderSK   (2004-04-12 17:26:00) [16]

>Johnmen ©  (12.04.04 17:19) [2]
а как тогда правильнее?


Johnmen   (2004-04-12 17:19:00) [17]

Не все записи переданы на клиента.
Принудительно - FetchAll.
Но работать опираясь на RecordCount в данном случае идеологически неверно...


Vlad   (2004-04-12 17:18:00) [18]


> AlexanderSK   (12.04.04 17:16)  

Для начала FetchAll или Last, а потом RecordCount


Наверх

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