| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > IBQuery.recordcount |
| Автор: fantomba 8.5.2010, 14:50 | ||
Проблема: использую компоненты IB для FB1.5.5.4926. Вызываю из основной программы DLL, передаю в нее переменную по которой искать записи. Добовляю переменную к запросу. Все проходит нормально. Но выводит только одну запись... хотя их 4 и больше. Если все это прделать к событию по ножатию кнопки на форме библиотеки, то выводит все записи... Может что упустил в особенностях работы IBQuery...
|
| Автор: vovk 8.5.2010, 15:03 |
| если читать записи в цикле, то лучше поступать так While not TDataset.Eof do В датасет после запроса не все записи подгружаются, вот если поставить грид на форму и связять с IBQuery1, то в датасет будет содержатся столько записей, сколько влазит в гирд для одновременного отображения, а по мере прокрутки будут запрашиватся новые, у вас скорее всего IBQuery1 не связан с визуальными компонентами, поэтому и запись только 1. |
| Автор: Данкинг 8.5.2010, 16:26 | ||
|
| Автор: fantomba 8.5.2010, 20:34 |
| vovk, огромное спасибо! DBGrid и другие компоненты отображения не используются. Инструкция while not... помогла! Все работает! Тема закрыта. |
| Автор: Akella 9.5.2010, 22:24 | ||||
а если записей 1000-10000.... Добавлено @ 22:28 Может лучше количество записей определять отдельным запросом?
Может у компоненты есть что-то вроде метода RecordCountFromServer? Например, у компонентов FibPlus есть метод RecordCountFromSrv
которая возвращает не количество отфетченных записей, а реальное количество записей... |
| Автор: Данкинг 9.5.2010, 23:03 |
Тогда плохи дела. Но в условии не было никаких "если". |
| Автор: fantomba 10.5.2010, 18:59 | ||
ребят, записей максимум 20 может быть |
| Автор: Akella 11.5.2010, 15:26 |
| Ну в этой таблице 20, а через месяц в другой будет миллион... и ты опять применишь этот код, который тебе посоветовали, в итоге... Лучше сразу использовать правильный код. |
| Автор: vovk 11.5.2010, 17:01 | ||||
чтото мне подсказывает, что FetchAll тут ничем ни лучше будет при большом количестве записей.. вот
это да согласен, определить сколько и если много то потом выдавать данные к примеру блоками по 50- 100 записей, но это уже условия. Может у человека данных физически не может много быть |
| Автор: Deniz 12.5.2010, 05:55 |
| Хотя тема закрыта, вставлю свои 5 копеек. Для циклаFetchAll не нужен, все равно все записи прочитаются (breake не в счет). Обычно FetchAll нужен для "бегунка" (ProgressBar и т.д.), что бы показать пользователю что процесс не висит. Можно и запросом select count(*) узнать сколько записей но, есть свои ограничения: 1. Доп. запрос это доп. время. 2. Есть ситуации, при которых доп. запрос сформировать крайне сложно. 3. Уровень изоляции транзакции. Если между доп. и основным запросом добавится/удалится запись, то результаты по кол-ву записей могут быть разные. PS: Если планируется забрать все записи из запроса, то FetchAll (для определения кол-ва записей) выигрывает у select count(*), ИМХО. |