谁能调试通如下代码,100分相送,我调式总是出问题
Javpp 2005-02-10 12:30:41 在for (aNode = TreeView->Items->GetFirstNode (); aNode != NULL ;)里出问题,ndata = (NODEDATA*) (aNode->Data);这一句,
代码如下:数据表里就3个字段,一个ID,一个父ID:PID,一个是名字,根据这些初始化一棵树,一看就明白,忘记从哪里看到的这段代码了
void __fastcall TfrmMain::FillTree ()
{
struct NODEDATA *ndata = NULL;
TStringList *ss = NULL;
TTreeNode *aNode = NULL;
TTreeNode *bNode = NULL;
TTreeNode *pNode = NULL;
ADOQuery1->Close ();
ADOQuery1->SQL->Clear ();
ADOQuery1->SQL->Add ("SELECT ID, PID, Name FROM Infor");
ADOQuery1->Open ();
try
{
ss = new TStringList ();
TreeView->Items->BeginUpdate ();
ndata = new NODEDATA ();
ADOQuery1->First ();
while (!ADOQuery1->Eof)
{
ndata->id = ADOQuery1->FieldByName ("id")->AsInteger;
ndata->pid = ADOQuery1->FieldByName ("id")->AsInteger;
ndata->name = ADOQuery1->FieldByName ("name")->AsString;
aNode = TreeView->Items->AddObject (NULL, ndata->name, ndata);
ss->AddObject (AnsiString (ndata->id), aNode);
ADOQuery1->Next ();
}
ADOQuery1->Close ();
ndata = NULL;
int idx;
for (aNode = TreeView->Items->GetFirstNode (); aNode != NULL ;)
{
ndata = (NODEDATA*) (aNode->Data);
if (-1 == (idx = ss->IndexOf (AnsiString (ndata->pid))))
{
aNode = aNode->getNextSibling ();
continue;
}
else
{
pNode = (TTreeNode*)(ss->Objects[idx]);
bNode = aNode;
aNode = aNode->getNextSibling();
bNode->MoveTo (pNode, naAddChild);
}
}
//delete ndata;
}
__finally
{
delete ss;
ss = NULL;
delete ndata;
ndata = NULL;
ADOQuery1->Close ();
TreeView->Items->EndUpdate ();
}
}