FIBQuery выбирает только одну! строку данных
Использую 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 строки данных,а так одна.
Где может быть ошибка?Подскажите пожалуйста!!!
Цитата: 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 строки данных,а так одна.
Где может быть ошибка?Подскажите пожалуйста!!!
Использую 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();
Цитата: oxotnik333
Код:
DataModule2->pFIBQuery1->Open();
Я и Open писал,тоже самое!Вот на последнем операторе т.е. ...Next();
выдает ошибку :
Код:
DataModule2->pFIBQuery1->Last()
чтобы зафетчить все записи и определить их колчиство, либо (что на мой взгляд грамотнее) используйте свойство AllRecordCount (не забудьте выставить опцию AskRecordCount).
Цитата: H010d Freeze
Дело в том, что RecordCount показывает количество fetched-записей. А это количетсво после открытия набора данных == 1. Либо сделайте
чтобы зафетчить все записи и определить их колчиство, либо (что на мой взгляд грамотнее) используйте свойство AllRecordCount (не забудьте выставить опцию AskRecordCount).
Код:
DataModule2->pFIBQuery1->Last()
чтобы зафетчить все записи и определить их колчиство, либо (что на мой взгляд грамотнее) используйте свойство AllRecordCount (не забудьте выставить опцию AskRecordCount).
Дело в том что Last() такой ф-ции нет как и First()!!!!
А можно поинтересоваться?Как использовать сво-во AllRecordCount и где опция AskRecordCount?В параметрах FIBQuery нет таких опций!Или я ошибаюсь?
Тогда остается только одно - делать дополнительный запрос с "SELECT COUNT(*)" для определения кол-ва записей (довольно грустно).
А можно сделать проще:
Код:
...
DataModule2->pFIBQuery1->ExecQuery();
while (!DataModule2->pFIBQuery1->Eof)
{
...
DataModule2->pFIBQuery1->Next();
}
DataModule2->pFIBQuery1->ExecQuery();
while (!DataModule2->pFIBQuery1->Eof)
{
...
DataModule2->pFIBQuery1->Next();
}
Цитата: H010d Freeze
Пардон, перепутал с TpFIBDataSet =).
Тогда остается только одно - делать дополнительный запрос с "SELECT COUNT(*)" для определения кол-ва записей (довольно грустно).
А можно сделать проще:
Тогда остается только одно - делать дополнительный запрос с "SELECT COUNT(*)" для определения кол-ва записей (довольно грустно).
А можно сделать проще:
Код:
...
DataModule2->pFIBQuery1->ExecQuery();
while (!DataModule2->pFIBQuery1->Eof)
{
...
DataModule2->pFIBQuery1->Next();
}
DataModule2->pFIBQuery1->ExecQuery();
while (!DataModule2->pFIBQuery1->Eof)
{
...
DataModule2->pFIBQuery1->Next();
}
Этот код тоже не работает!
Цитата: 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;
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;
как часы работает