procedure TForm1.FindLeechDom(Leechdomname: String;node: TTreeNode);
var
  temp: TQuery;
  node1: TTreeNode;
begin
  Try
    temp := TQuery.Create(Self);
    temp.DatabaseName := ExtractFilePath(Application.ExeName);
    With temp do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from leechdom.db where 上级编码 = :Value');
      ParamByName('value').AsString := Leechdomname;
      Open;
    end;
    while Not Temp.Eof do
    begin
      node1 := TreeView1.Items.AddChild(node,temp.FieldByName('药品类别').AsString);
      FindLeechDom(temp.FieldByName('药品类别').AsString,node1);
      temp.Next;
    end;
  Finally
    temp.Free;
  end;
end;
为什么在FindLeechDom函数的声明里还能用FindLeechDom这个函数呢?
我都看不懂这段程序是什么意思?有没有高手解释一下??

解决方案 »

  1.   

    递归
    不过这样递归不好,
    应该一次把数据取出来,
    对本地DataSet遍历进行递归
      

  2.   

    procedure TForm1.FindLeechDom(Leechdomname: String;node: TTreeNode);
    var
      temp: TQuery;
      node1: TTreeNode;
    begin
      Try
        temp := TQuery.Create(Self);
        temp.DatabaseName := ExtractFilePath(Application.ExeName);
        With temp do
        begin
          Close;
          SQL.Clear;
          SQL.Add('select * from leechdom.db where 上级编码 = :Value');
          ParamByName('value').AsString := Leechdomname;
          Open;
        end;
        while Not Temp.Eof do
        begin
          node1 := TreeView1.Items.AddChild(node,temp.FieldByName('药品类别').AsString);
          FindLeechDom(temp.FieldByName('药品类别').AsString,node1); //添加当前node1的子节点
          temp.Next;
        end;
      Finally
        temp.Free;
      end;
    end;