起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 386|回复: 21

【结贴】在业务信息里怎样实现递归调用?

[复制链接]
发表于 2009-8-5 13:57:58 | 显示全部楼层 |阅读模式
代码如下:
if(tempStr = '') then
       begin
          lParam := COMMONUTILS.TCOMMONUTILS.GetParam(Self.Context,'Biz:\CBSGLXT\YWCSZ.ParamGroup', 'GCJLBH');
          lRecordId := Variants.VarToStr(lParam.Value);

          //lRecordId := JSCommon.CreateGUIDStr;
          lContextCurrent := Business.Model.TContextCurrent.Create(Self.Context);
          try
            lEmployeeId := lContextCurrent.Operator.ID;           //当前操作者ID
          finally
            lContextCurrent.Free;
          end;
          lQuery.CommandText := 'Insert into T_RECORD_INFO(recordId,recordDate,createDate,recorderId,operatorId,conProId,opinionInfoId) values('''+ lRecordId +''','''+ lRecordTime + ''','''+ Sysutils.DateToStr(Sysutils.now) + ''',''' + lRecorderId + ''','''+ lEmployeeId +''',''' + lContract + ''',''' + lOpinionParentId + ''')';
          lQuery.Execute;
       end;
想实现if块之间的代码递归调用,请问怎么实现?
回复

使用道具 举报

发表于 2009-8-5 14:12:08 | 显示全部楼层
楼主具体指什么呢?递归调用不知道怎么写吗?还是
回复 支持 反对

使用道具 举报

发表于 2009-8-5 14:17:19 | 显示全部楼层
测试回复。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-5 14:37:19 | 显示全部楼层
我可以将全部代码都贴出来,
procedure TGCLR_XX.DataSetGCLR_SJJBeforePost(DataSet: TDataSet);

var lContract: String;
    lOpinionInfoId: String;
    lOpinionParentId: String;
    tempStr: String;
    lQuery :TQuery;
    lParam: Business.Model.TBizParam;
    lContextCurrent: Business.Model.TContextCurrent;
    lRecordId: String;
    lEmployeeId: String;
    lRecorderId: String;
    lRecordTime: String;

begin
   DataSet.Edit;
   lContract := DataSet.FieldByName('conProId').AsString;
   lOpinionInfoId := DataSet.FieldByName('opinionInfoId').AsString;
   lRecorderId := DataSet.FieldByName('recorderId').AsString;
   lRecordTime := DataSet.FieldByName('recordDate').AsString;

   DataSetPJXX_SJJ.SQLFilter := 'opinionInfoId = ' + ''''+ lOpinionInfoId +'''';
   DataSetPJXX_SJJ.SQLFiltered := true;
   DataSetPJXX_SJJ.Edit;
   lOpinionParentId := DataSetPJXX_SJJ.FieldByName('opinionParentId').AsString;
   //DataSetGCLR_SJJ.SQLFilter := 'conProId = ''' + lContract + ''' and opinionInfoId = ''' + lOpinionParentId +'''';
   //DataSetGCLR_SJJ.SQLFiltered := true;
   lQuery := TQuery.Create(nil);
   try
     lQuery.ConnectionString := 'DATABASEURL=Biz:\CBSGLXT\rxc_zd.Database';
     lQuery.CommandText := 'select opinionInfoId from T_RECORD_INFO where conProId = ''' + lContract + ''' and opinionInfoId =''' + lOpinionParentId +'''';
     lQuery.Open;
     lQuery.First;
     tempStr := lQuery.FieldByName('opinionInfoId').AsString;
     lQuery.Refresh;

     if(tempStr = '') then
       begin
          lParam := COMMONUTILS.TCOMMONUTILS.GetParam(Self.Context,'Biz:\CBSGLXT\YWCSZ.ParamGroup', 'GCJLBH');
          lRecordId := Variants.VarToStr(lParam.Value);

          //lRecordId := JSCommon.CreateGUIDStr;
          lContextCurrent := Business.Model.TContextCurrent.Create(Self.Context);
          try
            lEmployeeId := lContextCurrent.Operator.ID;           //当前操作者ID
          finally
            lContextCurrent.Free;
          end;
          lQuery.CommandText := 'Insert into T_RECORD_INFO(recordId,recordDate,createDate,recorderId,operatorId,conProId,opinionInfoId) values('''+ lRecordId +''','''+ lRecordTime + ''','''+ Sysutils.DateToStr(Sysutils.now) + ''',''' + lRecorderId + ''','''+ lEmployeeId +''',''' + lContract + ''',''' + lOpinionParentId + ''')';
          lQuery.Execute;
       end;
   finally
     lQuery.Free;
   end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-5 14:45:18 | 显示全部楼层
具体的业务:
1、上述代码里的,lOpinionInfoId和lOpinionParentId是一个表里的两个字段,存在着父子关系,他们的辈份不确定,有可能只有父子,还有可能有爷-父-子三辈等多种情况,
2、常规保存方式,只保存子OpinionInfoId,而父OpinionParentId是通过代码保存到数据库的,如上述代码!
3、因为他们的辈份不确定,所以现在就想写一个递归的方式来实现这些功能!
回复 支持 反对

使用道具 举报

发表于 2009-8-5 14:45:22 | 显示全部楼层
。。。。楼上贴出全部代码有意义吗?都不知道你想知道什么。

递归的写法一般是这样的
function   fac(i : Integer) : Integer;
begin
  if (i=0) or (i=1) then
    result := 1
  else
    result:= i + fac(i - 1);
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-5 14:47:58 | 显示全部楼层
如5楼描述!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-5 14:52:30 | 显示全部楼层
我这样写啦,但是这段代码现在编译报错
说4楼里的Self的Identifier不存在!
lParam := COMMONUTILS.TCOMMONUTILS.GetParam(Self.Context,'Biz:\CBSGLXT\YWCSZ.ParamGroup', 'GCJLBH');
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-5 15:09:13 | 显示全部楼层
都在忙呀?
回复 支持 反对

使用道具 举报

发表于 2009-8-5 15:10:08 | 显示全部楼层
请你把完整错误信息贴出来。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-18 12:42 , Processed in 0.043258 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表