Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

FIBQuery выбирает только одну! строку данных

21K
17 марта 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Добрый день!Как быть в такой ситуации?
Использую CodeGear 2007, FB_2.0.
Значит делаю выборку данных по базе,используя компонент FIBQuery.
Вот кусок проги:
DataModule2->pFIBQuery1->SQL->Clear();
DataModule2->pFIBQuery1->SQL->Add("SELECT b.NOMENK_NUMB as NOMENK_NUMB,b.NOM_CEH as NOM_CEH,a.NAIM_INS as NAIM_INS,b.KOL_INS_RASH as KOL_POL,b.DATA as DAT_POL FROM main_tbl a,rash_ins b where a.nomenk_numb = b.nomenk_numb");
DataModule2->pFIBQuery1->ExecQuery();
int i=0;
while (i < DataModule2->pFIBQuery1->RecordCount)
{
i++;

DataModule2->pFIBDataSet3->Insert();

DataModule2->pFIBDataSet3->FieldByName("nomenk_numb")->AsInteger=DataModule2->pFIBQuery1->FieldByName("nomenk_numb")->AsInteger;
DataModule2->pFIBDataSet3->FieldByName("nom_ceh")->AsInteger=DataModule2->pFIBQuery1->FieldByName("nom_ceh")->AsInteger;
DataModule2->pFIBDataSet3->FieldByName("naim_ins")->AsString=DataModule2->pFIBQuery1->FieldByName("naim_ins")->AsString;
DataModule2->pFIBDataSet3->FieldByName("kol_pol")->AsInteger=DataModule2->pFIBQuery1->FieldByName("kol_pol")->AsInteger;
DataModule2->pFIBDataSet3->FieldByName("dat_pol")->AsDateTime=DataModule2->pFIBQuery1->FieldByName("dat_pol")->AsDateTime;
DataModule2->pFIBQuery1->Next();
}
И получается так что DataModule2->pFIBQuery1->RecordCount=1,хотя я тестил в IB Experte,результат 4 строки данных,а так одна.
Где может быть ошибка?Подскажите пожалуйста!!!
11
17 марта 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: yalovenko_alexandr
Добрый день!Как быть в такой ситуации?
Использую CodeGear 2007, FB_2.0.
Значит делаю выборку данных по базе,используя компонент FIBQuery.
Вот кусок проги:
DataModule2->pFIBQuery1->SQL->Clear();
DataModule2->pFIBQuery1->SQL->Add("SELECT b.NOMENK_NUMB as NOMENK_NUMB,b.NOM_CEH as NOM_CEH,a.NAIM_INS as NAIM_INS,b.KOL_INS_RASH as KOL_POL,b.DATA as DAT_POL FROM main_tbl a,rash_ins b where a.nomenk_numb = b.nomenk_numb");
DataModule2->pFIBQuery1->ExecQuery();
int i=0;
while (i < DataModule2->pFIBQuery1->RecordCount)
{
i++;

DataModule2->pFIBDataSet3->Insert();

DataModule2->pFIBDataSet3->FieldByName("nomenk_numb")->AsInteger=DataModule2->pFIBQuery1->FieldByName("nomenk_numb")->AsInteger;
DataModule2->pFIBDataSet3->FieldByName("nom_ceh")->AsInteger=DataModule2->pFIBQuery1->FieldByName("nom_ceh")->AsInteger;
DataModule2->pFIBDataSet3->FieldByName("naim_ins")->AsString=DataModule2->pFIBQuery1->FieldByName("naim_ins")->AsString;
DataModule2->pFIBDataSet3->FieldByName("kol_pol")->AsInteger=DataModule2->pFIBQuery1->FieldByName("kol_pol")->AsInteger;
DataModule2->pFIBDataSet3->FieldByName("dat_pol")->AsDateTime=DataModule2->pFIBQuery1->FieldByName("dat_pol")->AsDateTime;
DataModule2->pFIBQuery1->Next();
}
И получается так что DataModule2->pFIBQuery1->RecordCount=1,хотя я тестил в IB Experte,результат 4 строки данных,а так одна.
Где может быть ошибка?Подскажите пожалуйста!!!



 
Код:
DataModule2->pFIBQuery1->Open();
21K
17 марта 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Цитата: oxotnik333
 
Код:
DataModule2->pFIBQuery1->Open();



Я и Open писал,тоже самое!Вот на последнем операторе т.е. ...Next();
выдает ошибку :

7.3K
17 марта 2008 года
H010d Freeze
143 / / 08.08.2006
Дело в том, что RecordCount показывает количество fetched-записей. А это количетсво после открытия набора данных == 1. Либо сделайте
 
Код:
DataModule2->pFIBQuery1->Last()

чтобы зафетчить все записи и определить их колчиство, либо (что на мой взгляд грамотнее) используйте свойство AllRecordCount (не забудьте выставить опцию AskRecordCount).
21K
17 марта 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Цитата: H010d Freeze
Дело в том, что RecordCount показывает количество fetched-записей. А это количетсво после открытия набора данных == 1. Либо сделайте
 
Код:
DataModule2->pFIBQuery1->Last()

чтобы зафетчить все записи и определить их колчиство, либо (что на мой взгляд грамотнее) используйте свойство AllRecordCount (не забудьте выставить опцию AskRecordCount).



Дело в том что Last() такой ф-ции нет как и First()!!!!
А можно поинтересоваться?Как использовать сво-во AllRecordCount и где опция AskRecordCount?В параметрах FIBQuery нет таких опций!Или я ошибаюсь?

7.3K
17 марта 2008 года
H010d Freeze
143 / / 08.08.2006
Пардон, перепутал с TpFIBDataSet =).
Тогда остается только одно - делать дополнительный запрос с "SELECT COUNT(*)" для определения кол-ва записей (довольно грустно).

А можно сделать проще:
 
Код:
...
DataModule2->pFIBQuery1->ExecQuery();
while (!DataModule2->pFIBQuery1->Eof)
{
...
DataModule2->pFIBQuery1->Next();
}
21K
17 марта 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Цитата: H010d Freeze
Пардон, перепутал с TpFIBDataSet =).
Тогда остается только одно - делать дополнительный запрос с "SELECT COUNT(*)" для определения кол-ва записей (довольно грустно).

А можно сделать проще:
 
Код:
...
DataModule2->pFIBQuery1->ExecQuery();
while (!DataModule2->pFIBQuery1->Eof)
{
...
DataModule2->pFIBQuery1->Next();
}



Этот код тоже не работает!

11
17 марта 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: yalovenko_alexandr
Этот код тоже не работает!


Код:
TIBQuery *sp = new TIBQuery(this);
  sp->Database = IBDatabase1;
  sp->SQL->Add("SELECT STRUCT_USERS.KOD_USER, TREE.ID, defs.name_user, TREE.TREE_LEVEL");
  sp->SQL->Add("FROM STRUCT_USERS tab");
  sp->SQL->Add("INNER JOIN DEF_USERS defs ON (STRUCT_USERS.KOD_USER = DEF_USERS.KOD_USER)");
  sp->SQL->Add("INNER JOIN  expand ('GR', 1) TREE ON (TREE.id = tab.KOD_SUBUSER)");
  sp->SQL->Add("ORDER BY TREE.tree_level");
  sp->Active = true;

  sp->First();
  while (!sp->Eof)
        {
          NodeMap[sp->FieldByName("ID")->AsString.Trim()] = TreeView1->Items->AddChild(NodeMap[sp->FieldByName("KOD_USER")->AsString.Trim()], sp->FieldByName("NAME_USER")->AsString.Trim());
          MapNode[NodeMap[sp->FieldByName("ID")->AsString.Trim()]]= sp->FieldByName("ID")->AsString.Trim();
          sp->Next();
        }
  delete sp;


как часы работает
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог