Maxim |
Отправлено: 25.02.2005, 06:01 |
|
Не зарегистрирован
|
Имеется бд в формате mdb, в ней поле Level от 1 до 3 для отображения вложенности и поле Otdel соответсвенно наименование отдела.
Пишу код в OnCreate формы:
AnsiString Str;
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("SELECT [Level], Otdel FROM tel");
Query1->Open();
Query1->First();
while (!Query1->Eof)
{
if (Query1->FieldByName("Level")->AsInteger==1)
{
Str=Query1->FieldByName("Otdel")->AsString;
TreeView1->Items->Add(NULL,Str);
}
if (Query1->FieldByName("Level")->AsInteger==2)
{
Str=Query1->FieldByName("Otdel")->AsString;
TreeView1->Items->AddChild(TreeView1->Items->Item[0],Str);
}
Query1->Next();
}
TreeView1->Update();
Так вот если в базе количество Level со значением 2 становится больше 7 то вылетает ошибка: Invalid Index... В чем может быть глюк? |
|
Bond |
Отправлено: 25.02.2005, 10:44 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 142
|
А можно посмотреть результат данного запроса в простом табличном виде?
Например выведи таким же макаром, только в Мемо.
|
|
Maxim |
Отправлено: 25.02.2005, 11:12 |
|
Не зарегистрирован
|
В Мемо Нормально выводится.... |
|
AVC |
Отправлено: 25.02.2005, 11:19 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Это что-то чисто ваше.
Вот попробовал простенький загрузчик — глюков нет.
CODE |
void __fastcall TForm1::Bt_LoadClick(TObject *Sender)
{
TADOQuery *qry = Qry_Main;
TTreeView *tv = TreeView1;
tv->Items->Clear();
if (qry->Active) { qry->First(); qry->Active = false; }
//if (qry->Active) qry->Active = false;
qry->SQL->Text = AnsiString("") + "\
Select \n\
AE.ParentID \n\
,AE.AppEtrID as ID \n\
,AE.AppEtr_Name as Name \n\
From HHC.AppEtr AE \n\
-- \n\
Start with AE.ParentID is Null \n\
Connect by prior AE.AppEtrID = AE.ParentID \n\
-- \n\
Order By Level, ParentID, AE.Ord \n\
";
qry->Active = true;
TField *fldID = qry->FieldByName("ID");
TField *fldParentID = qry->FieldByName("ParentID");
TField *fldName = qry->FieldByName("Name");
TTreeNodes *tvi = tv->Items;
TTreeNode *parentnode;
AnsiString name;
int parentid;
for (qry->First(); !qry->Eof; qry->Next())
{ name = fldName->AsString;
parentid = fldParentID->AsInteger;
parentnode = NULL;
for (int i=0; i < tvi->Count; i++)
{ if (int(tvi->Item[i]->Data) == parentid)
{ parentnode = tvi->Item[i];
break;
}
} // поиск родителя
tvi->AddChildObject(parentnode, name, (void*)(fldID->AsInteger));
} // проход по записям
//if (qry->Active) { qry->First(); qry->Active = false; }
}
| |
|
Bond |
Отправлено: 25.02.2005, 11:24 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 142
|
Наверняка ты пытаешся вставить отдел второго уровня когда у тебя пустое дерево.
CODE | ...
if (Query1->FieldByName("Level")->AsInteger==2)
{
Str=Query1->FieldByName("Otdel")->AsString;
TreeView1->Items->AddChild(TreeView1->Items->Item[0],Str);
}
... |
Думаю данная ошибка может быть только в этом месте
|
|
Maxim |
Отправлено: 28.02.2005, 06:04 |
|
Не зарегистрирован
|
Bond в точку )
Одна голова хорошо, а форум лучше... |
|