起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 819|回复: 14

【结】能否代码设置两信息的主从关系?

[复制链接]
发表于 2010-9-1 17:40:58 | 显示全部楼层 |阅读模式
例如:两个数据集A和B,A.AA=B.AA  或A.AA=B.CC,
我想根据条件,代码设置两者的关系,如何设置(功能中)!
回复

使用道具 举报

发表于 2010-9-1 17:58:54 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-2 07:07:12 | 显示全部楼层

?

按照楼上的介绍,动态的创建了主从关系。
新的问题出来了,当我将主从关系从A.AA=B.AA(此种状态下有记录),变换为A.AA=B.CC时(无记录),主表显示空记录,但从表却显示记录(主从关系改变前从表的记录),这种情形如何解决?
回复 支持 反对

使用道具 举报

发表于 2010-9-2 08:37:13 | 显示全部楼层
把你的代码贴上来看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-2 08:54:09 | 显示全部楼层

?

procedure TYDJGDZJHCT.tbSHOWClick(Sender: TObject);
var
  lYearMonth,lmonth:String;
  lDeptID,lFilter,lshbz:String;
begin
  //Inherited;
  if FResultDeptID='' then
    lDeptID:=FDeptID
  else
    lDeptID:=FResultDeptID;

  if FECalendar1.Month<=9 then
    lmonth:='0'+IntToStr(FECalendar1.Month);
  if FECalendar1.Month>=10 then
    lmonth:=IntToStr(FECalendar1.Month);

  lYearMonth:=IntToStr(FECalendar1.Year)+'-'+lmonth;

  if Length(FDeptID)<8 then            //局级
  begin
    if cmbZT.ItemIndex=1 then
    begin
      SetMasterDetail_J;
      lshbz:=' AND AUD_FLAG=''ZY0308'' AND JDH_LEVEL=2 ';
    end
    else
    begin
      SetMasterDetail_E;
      lshbz:=' AND AUD_FLAG>=''ZY0306'' AND JDH_LEVEL=1 ';
    end;
  end
  else if Length(FDeptID)=8 then      //二级
  begin
    if cmbZT.ItemIndex=1 then
    begin
      SetMasterDetail_E;
      lshbz:='AND AUD_FLAG=''ZY0306'' AND JDH_LEVEL=1 ';
    end
    else
    begin
      SetMasterDetail;
      lshbz:='AND AUD_FLAG>=''ZY0302'' AND JDH_LEVEL=0 ';
    end;
  end
  else                                //三级
    lshbz:=' ';

  lFilter:='JDH_DATE='''+lYearMonth+''' AND JDH_ORG_CODE LIKE '''+lDeptID+'%'' ';

  TSqlDataSet(dsbJGDZJH.DataSet).SqlFilter:=lFilter+lshbz;
  TSqlDataSet(dsbJGDZJH.DataSet).SqlFiltered:=True;
  dsbJGDZJH.DataSet.Active:=True;
  dsbJGDZJHMX.DataSet.Active:=True;
  dsbJGDZJHAfterScroll(nil);
end;

procedure TYDJGDZJHCT.SetMasterDetail; //设置主从数据
begin
  dsbJGDZJH.DataSet.Close;
  dsbJGDZJHMX.DataSet.Close;
  dsbJGDZJHMX.DataSet.Relation.Master := InfoBroker1.Info.DataSetByID('JGDZJHSJJ');
  dsbJGDZJHMX.DataSet.Relation.MasterFieldNames := 'GUID';
  dsbJGDZJHMX.DataSet.Relation.KeyFieldNames := 'JDH_CODE';
  dsbJGDZJH.DataSet.Open;
  dsbJGDZJHMX.DataSet.Open;
end;

procedure TYDJGDZJHCT.SetMasterDetail_E; //设置主从数据
begin
  dsbJGDZJH.DataSet.Close;
  dsbJGDZJHMX.DataSet.Close;
  dsbJGDZJHMX.DataSet.Relation.Master := InfoBroker1.Info.DataSetByID('JGDZJHSJJ');
  dsbJGDZJHMX.DataSet.Relation.MasterFieldNames := 'GUID';
  dsbJGDZJHMX.DataSet.Relation.KeyFieldNames := 'EJ_CODE';
  dsbJGDZJH.DataSet.Open;
  dsbJGDZJHMX.DataSet.Open;
end;
回复 支持 反对

使用道具 举报

发表于 2010-9-3 15:25:26 | 显示全部楼层
楼主,您那边的版本号?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-5 21:27:15 | 显示全部楼层

??

X3_3088
回复 支持 反对

使用道具 举报

发表于 2010-9-6 10:00:48 | 显示全部楼层
楼主,我们在3088版本上测试了您说的问题。
在不通过平台设定关联关系的情况下,通过代码直接配置主从关系可以实现您需要的功能。
看了您贴上来的代码似乎也没有问题。请您仔细检查其他相关代码是否有其他问题。
比如通过平台设置了2个数据集的主从关系之类的干扰因素?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-7 10:49:28 | 显示全部楼层

??

看我3楼的描述信息。
当主从关联变化时,如果有记录对应,系统是可以关联过去,但问题出在,当我从一种状态,切换到另一种状态时,这种情况下,按照新的主从关系找不到记录时,从表显示的是上一次主从关系对应的记录。
回复 支持 反对

使用道具 举报

发表于 2010-9-7 11:50:08 | 显示全部楼层
楼主,我这边照您说的方式测试了,没问题呀

demo.rar

302.94 KB, 下载次数: 119

回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-7 00:01 , Processed in 0.049924 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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