Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IBQuery.recordcount, неправильное количество записей после вы 
V
    Опции темы
fantomba
Дата 8.5.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 2.3.2009
Где: Rostov-on-Don

Репутация: нет
Всего: нет



Проблема: использую компоненты IB для FB1.5.5.4926. Вызываю из основной программы DLL, передаю в нее переменную по которой искать записи. Добовляю переменную к запросу. Все проходит нормально. Но выводит только одну запись... хотя их 4 и больше. Если все это прделать к событию по ножатию кнопки на форме библиотеки, то выводит все записи... Может что упустил в особенностях работы IBQuery...

Код

for i:=1 to k do begin
i2:=inttostr(ncod[i]);
aizegrof.IBQuery1.Active:=false;
aizegrof.IBQuery1.SQL.Add('SELECT * FROM AIZENKT WHERE CODEB='+i2+';');
aizegrof.IBQuery1.Active:=true;
if aizegrof.IBQuery1.RecordCount=0 then begin
aizegrof.IBQuery1.Active:=false;
aizegrof.IBQuery1.SQL.Clear;
aizegrof.IBQuery1.SQL.Add('SELECT * FROM MAINTABLE WHERE CODE='+i2+';');
aizegrof.IBQuery1.Active:=true;
aizegrof.ListBox1.Items.Add(aizegrof.IBQuery1.fieldByName('Surname').AsString+' ÒÅÑÒÛ ÍÅ ÏÐÎÂÎÄÈËÈÑÜ!');
aizegrof.IBQuery1.Active:=false;
aizegrof.IBQuery1.SQL.Clear;
end

PM MAIL   Вверх
vovk
Дата 8.5.2010, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 28.2.2008

Репутация: 6
Всего: 6



если читать записи в цикле, то лучше поступать так
While not TDataset.Eof do
В датасет после запроса не все записи подгружаются, вот если поставить грид на форму и связять с IBQuery1, то в датасет будет содержатся столько записей, сколько влазит в гирд для одновременного отображения, а по мере прокрутки будут запрашиватся новые, у вас скорее всего IBQuery1 не связан с визуальными компонентами, поэтому и запись только 1.
PM MAIL   Вверх
Данкинг
Дата 8.5.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Код

IBQuery1.FetchAll;



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
fantomba
Дата 8.5.2010, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 2.3.2009
Где: Rostov-on-Don

Репутация: нет
Всего: нет



vovk,  огромное спасибо!
DBGrid и другие компоненты отображения не используются. Инструкция while not... помогла! Все работает!
Тема закрыта.
PM MAIL   Вверх
Akella
Дата 9.5.2010, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(fantomba @  8.5.2010,  14:50 Найти цитируемый пост)
хотя их 4 и больше. 


Цитата(Данкинг @  8.5.2010,  16:26 Найти цитируемый пост)
IBQuery1.FetchAll;


Цитата(fantomba @  8.5.2010,  20:34 Найти цитируемый пост)
Инструкция while not... помогла! Все работает!


а если записей 1000-10000.... smile

Добавлено @ 22:28
Может лучше количество записей определять отдельным запросом?
Код
Select count(*) from.... where...


Может у компоненты есть что-то вроде метода RecordCountFromServer?



Например, у компонентов FibPlus есть метод RecordCountFromSrv
Код
pFibQuery1.RecordCountFromSrv
,
которая возвращает не количество отфетченных записей, а реальное количество записей...

Это сообщение отредактировал(а) Akella - 9.5.2010, 22:28
PM MAIL   Вверх
Данкинг
Дата 9.5.2010, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Akella @  9.5.2010,  23:24 Найти цитируемый пост)
а если записей 1000-10000....

Тогда плохи дела. Но в условии не было никаких "если". smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
fantomba
Дата 10.5.2010, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 2.3.2009
Где: Rostov-on-Don

Репутация: нет
Всего: нет



Цитата(Данкинг @ 9.5.2010,  23:03)
Цитата(Akella @  9.5.2010,  23:24 Найти цитируемый пост)
а если записей 1000-10000....

Тогда плохи дела. Но в условии не было никаких "если". smile


ребят, записей максимум 20 может быть smile так что этот метод подходит. А FBplus не использую...
PM MAIL   Вверх
Akella
Дата 11.5.2010, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Ну в этой таблице 20, а через месяц в другой будет миллион... и ты опять применишь этот код, который тебе посоветовали, в итоге... Лучше сразу использовать правильный код.
PM MAIL   Вверх
vovk
Дата 11.5.2010, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 28.2.2008

Репутация: 6
Всего: 6



Цитата(Akella @ 11.5.2010,  15:26)
Ну в этой таблице 20, а через месяц в другой будет миллион... и ты опять применишь этот код, который тебе посоветовали, в итоге... Лучше сразу использовать правильный код.

чтото мне подсказывает, что FetchAll тут ничем ни лучше будет при большом количестве записей..

вот 
Цитата

Select count(*) from.... where...

 это да согласен, определить сколько и если много то потом  выдавать данные к примеру блоками по 50- 100 записей, но это уже условия.
Может у человека данных  физически не может много быть 

Это сообщение отредактировал(а) vovk - 11.5.2010, 17:08
PM MAIL   Вверх
Deniz
Дата 12.5.2010, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Хотя тема закрыта, вставлю свои 5 копеек.
Для цикла
Цитата(vovk @  8.5.2010,  17:03 Найти цитируемый пост)
While not TDataset.Eof do
FetchAll не нужен, все равно все записи прочитаются (breake не в счет). Обычно FetchAll нужен для "бегунка" (ProgressBar и т.д.), что бы показать пользователю что процесс не висит.
Можно и запросом select count(*) узнать сколько записей но, есть свои ограничения:
1. Доп. запрос это доп. время.
2. Есть ситуации, при которых доп. запрос сформировать крайне сложно.
3. Уровень изоляции транзакции. Если между доп. и основным запросом добавится/удалится запись, то результаты по кол-ву записей могут быть разные.
PS: Если планируется забрать все записи из запроса, то FetchAll (для определения кол-ва записей) выигрывает у select count(*), ИМХО.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Akella
Дата 12.5.2010, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(vovk @  11.5.2010,  17:01 Найти цитируемый пост)
чтото мне подсказывает, что FetchAll тут ничем ни лучше будет при большом количестве записей..

и где я писал, что fetchall подходящий вариант?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0887 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.