使用递归算法的的函数的参数的返回值问题!
数据表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;
[解决办法]
忘了去掉那个注释了