function TFormB_Subject.CreSubJect(PN: TTreeNode;parentid:string):string;
var
  CN:TTreeNode;
  dataset:TADODataSet;
begin
  dataset:=TADODataSet.Create(nil);
  dataset.Connection:=dm.cn;
  dataset.Close;
  dataset.CommandText:=' select SubjectId,Subject, IsSub, parentId '+
                       ' from B_Subject '+
                       ' where parentid='+QuotedStr(parentid);
  dataset.Open;
  dataset.First;
  while not dataset.Eof do
  begin
    cn:=tv_type.Items.AddChild(PN,dataset.fieldbyname('subjectid').AsString+'-'+dataset.fieldbyname('subject').AsString);
    if not dataset.fieldbyname('issub').AsBoolean then
       CreSubJect(cn,dataset.fieldbyname('parentid').AsString);
    dataset.Next;
  end;
  dataset.Close;
  dataset.Free;
  dataset:=nil;
end;没报错。但运行时死机啦。
不知道语法错在哪里。

解决方案 »

  1.   

    应该是死循环了....这句调用的语句:
     CreSubJect(cn,dataset.fieldbyname('parentid').AsString); //这边好像有问题..没具体测试.假设你第一次调用时该传递的值为 2007 ,那到执行上面这一句时,查询出来的结果还是跟第一次查询的结果是一样的.因为该值没有改变,还是2007 ........要看你的表结构是如何的...才能具体写出相应的代码~~嘿嘿~
      

  2.   

    if not dataset.fieldbyname('issub').AsBoolean then
           CreSubJect(cn,dataset.fieldbyname('parentid').AsString);
    感觉应该写为:
       if dataset.fieldbyname('issub').AsBoolean then
           CreSubJect(cn,dataset.fieldbyname('SubjectId').AsString);