读书人

使用递归算法的的函数的参数的返回值有

发布时间: 2012-04-01 17:23:46 作者: rapoo

使用递归算法的的函数的参数的返回值问题!
数据表tablex的结构如下
----------------------------------
id ----------int型(主键)
name---------nvarchar型
parentid-----int型
----------------------------------

函数功能,要求传入某个id值,从tablex表中找出所有传入值的子孙(包括自己),然后返回所有子孙(包括自己)的ID和Name组成的两个字符串,
例如,
表数据如下
id-------name----------parentid
1--------1号-----------null
2--------2号-----------1
3--------3号-----------1
4--------4号-----------2
5--------5号-----------2
6--------6号-----------3
7--------7号-----------4
8--------8号-----------4
如下图



传入参数2,返回字符串'2,4,5,7,8'和'2号,4号,5号,7号,8号'

我现在写的函数如下,只能返回由子孙ID组成的字符串的。

问题是如何能够通过增加参数,使得'2号,4号,5号,7号,8号'也能返回。

Delphi(Pascal) code
function TForm1.GetAllID(intParentID:integer):string;var  qyTemp: TADOQuery;  strSql:string;  intID:integer;  strtmp:string;begin  qyTemp := TADOQuery.Create(nil);  qyTemp.Connection := Con1;  strsql:='select id from tablex where parentid='+inttostr(intParentID);  qyTemp.Close;  qyTemp.SQL.Text:=strSql;  qyTemp.Open;  strtmp:=IntToStr(intParentID);  qyTemp.First;  while not qyTemp.Eof do  begin    intId:=qyTemp.Fieldbyname('id').AsInteger;    strtmp:=strtmp+','+GetAllID(intID);    qyTemp.Next;  end;  result:=strtmp;end;


[解决办法]
Delphi(Pascal) code
function GetAllID(intParentID:integer;var result_ID,result_name:string):boolean;var qyTemp: TADOQuery;  strSql:string;  intID:integer;  strtmp,result_tmp_i,result_tmp_n:string;begin  result:=false;  result_name:='';  result_tmp_i:='';  result_tmp_n:='';  qyTemp := TADOQuery.Create(nil);//  qyTemp.Connection := Con1;  strsql:='select id,name from tablex where parentid='+inttostr(intParentID);  qyTemp.Close;  qyTemp.SQL.Text:=strSql;  qyTemp.Open;  strtmp:=IntToStr(intParentID);  if qyTemp.RecordCount<1 then exit;  qyTemp.First;  while not qyTemp.Eof do begin    intId:=qyTemp.Fieldbyname('id').AsInteger;    result_name:=result_name+' '+qyTemp.Fieldbyname('name').AsString;    if GetAllID(intID,result_tmp_i,result_tmp_n) then begin      result_ID:=result_ID+','+result_tmp_i;      result_name:=result_name+','+result_tmp_n;    end;    qyTemp.Next;  end;  result:=true;end;
[解决办法]
忘了去掉那个注释了

读书人网 >.NET

热点推荐