起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 152|回复: 9

特急!!!功能层A调用功能层B,如何实现在关闭功能层B后刷新功能层A的数据集问题续[请

[复制链接]
发表于 2008-10-23 21:38:24 | 显示全部楼层 |阅读模式
功能层A调用功能层B,如何实现在关闭功能层B后刷新功能层A的数据集问题

JUSTEP 管理员有给如下这样的答案
procedure TMainForm.Button3Click(Sender: TObject);
var
   tmpform:BDYGN.TMainForm;
   lFunc: TFunc;
   tmpUniqueId:string;
begin
     tmpUniqueId:=TFuncManager.GetFuncUniqueID

(context.parent,'Biz:\OPERATION\BDYGN.FUNC','');
    lFunc:= SYSTEMCORE.TSYSTEMCORE.FuncManager.FindRunning(tmpUniqueId);
   tmpform:=BDYGN.TMainForm (BDYGN.TBDYGN(lFunc).MainForm);
   tmpform.Edit1.Text:='a';

但在程序运行到  tmpform:=BDYGN.TMainForm (BDYGN.TBDYGN(lFunc).MainForm);
时会报如下错误,很是郁闷啊...希望各位知道的朋友能帮忙一下,谢谢.
---------------------------
X3 Studio
---------------------------
运行系统初始化的时候发生异常:Access violation at address 022A88A4 in module 'CLRModel.bpl'. Read of address 00000080类型:EAccessViolation。
---------------------------
确定   
---------------------------
回复

使用道具 举报

发表于 2008-10-24 09:06:17 | 显示全部楼层
你跟踪一下,看看哪个对象是空的,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-24 09:35:17 | 显示全部楼层
tmpform:=BDYGN.TMainForm (BDYGN.TBDYGN(lFunc).MainForm);
跟踪在这句就中断了,功能对象都有存在啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-24 10:04:34 | 显示全部楼层
顶一下!,因为该问题绕不过去,目前暂时采用B功能层定时刷新的方式处理,但这种方式不仅耗资源,而且容易报错,用户也强烈要求改变定时刷新的方式.还请帮忙尽快给予帮助和支持,谢谢!
回复 支持 反对

使用道具 举报

发表于 2008-10-24 10:16:42 | 显示全部楼层
做个简单例子,或者把你的资源传上来我们看看,
我跟踪的意思,是看看BDYGN.TMainForm (BDYGN.TBDYGN(lFunc).MainForm); 这句中哪些是有问题的,把这句拆开,一点一点看,例如(BDYGN.TBDYGN(lFunc),这样
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-24 10:32:10 | 显示全部楼层
procedure TXYR.BizFormCloseQuery(Sender: TObject; var CanClose: Boolean);
Var
  TmpForm : RYLBGN.TRYLB;
  lFunc: TFunc;
  tmpUniqueId:string;
  Recno : integer;
begin
  Inherited;
  tmpUniqueId:=SYSTEMCORE.TFuncManager.GetFuncUniqueID(context.parent,'Biz:\ZHAJ_DS\RYLBGN.Func','');
  lFunc:= SYSTEMCORE.TSYSTEMCORE.FuncManager.FindRunning(tmpUniqueId);
  tmpform:=RYLBGN.TRYLB(RYLBGN.TRYLBGN(lFunc).MainForm);
  tmpform.dsbXYR.DataSet.Close;
  tmpform.dsbXYR.DataSet.Open;
end;
这段代码是功能B关闭时执行的代码,其中
XYR是功能B     RYLBGN是功能A,  dsbXYR是功能A的数据集控件,我现在是关闭功能A刷新功能B的数据集dsbXYR
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-24 10:33:02 | 显示全部楼层
补错:这段代码是功能B关闭时执行的代码,其中
XYR是功能B     RYLBGN是功能A,  dsbXYR是功能A的数据集控件,我现在是关闭功能B刷新功能A的数据集dsbXYR
回复 支持 反对

使用道具 举报

发表于 2008-10-24 13:58:53 | 显示全部楼层
楼主,可以考虑使用业务消息来实现
http://bbs.justep.com/forum.php?mod=viewthread&tid=18518
http://bbs.justep.com/forum.php?mod=viewthread&tid=24993

可以在B关闭前,向环境广播一个自定义消息
在A中注册一个消息处理对象,收到B的消息后,主动刷新数据集
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-24 14:20:39 | 显示全部楼层
如果不用消息,原来的方法是哪里窗体创建那里出问题呢
回复 支持 反对

使用道具 举报

发表于 2008-10-24 14:52:42 | 显示全部楼层
从错误上看看,是个指针错
直接从代码上看不出原因,需要调试运行,逐条语句来排除。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-24 07:37 , Processed in 0.039920 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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