起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 888|回复: 31

【结贴】报错了,Access violation at address 7C938FEA in module

[复制链接]
发表于 2008-1-9 15:08:50 | 显示全部楼层 |阅读模式
原来的语句是没有问题的:
procedure THTXX.DataSetHTFKAfterCommit(DataSet: TDataSet);
  var
        queryJE : Tquery;
        begin
        queryJE:= TQuery.Create(self);
        with queryJE do
        queryJE.ConnectionString := 'DATABASEURL=Biz:\MASTERMIND\mastermind.Database';
        queryJE.CommandText := 'update HT set HT.LJFKJE=(select sum(HTFK.FKJE) from HTFK where HTFK.HTBH=:HTBH) where HT.HTBH=:HTBH';
        queryJE.Params.ParamByName('HTBH').AsString :=DataSetHTFK.FieldByName('HTBH').AsString;
        queryJE.Execute;
        end;

现在的语句只是在最后加了这几句:
    DataSetHT.Open;
        DataSetHT.Refresh;
        DataSetHTCB.Open;
        DataSetHTCB.Refresh;

于是报错了:
procedure THTXX.DataSetHTFKAfterCommit(DataSet: TDataSet);
  var
        queryJE : Tquery;
        begin
        queryJE:= TQuery.Create(self);
        with queryJE do
        queryJE.ConnectionString := 'DATABASEURL=Biz:\MASTERMIND\mastermind.Database';
        queryJE.CommandText := 'update HT set HT.LJFKJE=(select sum(HTFK.FKJE) from HTFK where HTFK.HTBH=:HTBH) where HT.HTBH=:HTBH';
        queryJE.Params.ParamByName('HTBH').AsString :=DataSetHTFK.FieldByName('HTBH').AsString;
        queryJE.Execute;
        DataSetHT.Open;
        DataSetHT.Refresh;  ////这是报错行
        DataSetHTCB.Open;
        DataSetHTCB.Refresh;
        end;

我把这两句换了下位置,报错的位置没变,奇怪了:
procedure THTXX.DataSetHTFKAfterCommit(DataSet: TDataSet);
  var
        queryJE : Tquery;
        begin
        queryJE:= TQuery.Create(self);
        with queryJE do
        queryJE.ConnectionString := 'DATABASEURL=Biz:\MASTERMIND\mastermind.Database';
        queryJE.CommandText := 'update HT set HT.LJFKJE=(select sum(HTFK.FKJE) from HTFK where HTFK.HTBH=:HTBH) where HT.HTBH=:HTBH';
        queryJE.Params.ParamByName('HTBH').AsString :=DataSetHTFK.FieldByName('HTBH').AsString;
        queryJE.Execute;
        DataSetHTCB.Open;
        DataSetHTCB.Refresh;    ///报错的位置
        DataSetHT.Open;
        DataSetHT.Refresh;
        end;

请帮我看看是什么原因吧,谢谢。
回复

使用道具 举报

发表于 2008-1-9 15:44:49 | 显示全部楼层
1、对你
DataSetHT.Open;
DataSetHT.Refresh;
DataSetHTCB.Open;
DataSetHTCB.Refresh;
这几句代码说说。
DataSetHT 数据集刚open,Refresh没有意义。还有DataSetHTCB 这个数据集也是

2、DataSetHTCB.Refresh这句代码应该不是报错的关键,你可以把这句代码放到一个按钮的Click事件上来执行看看。(当然屏蔽其他的所有代码)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-9 16:11:45 | 显示全部楼层
Click事件是没有问题的啊,但为什么放到这里就有问题了呢?
.                                                                                                                                                                                   .
我click是在窗体上做的,原来的代码是写在信息里的。
.                                                                                                                                                                                   .
回复 支持 反对

使用道具 举报

发表于 2008-1-9 16:47:28 | 显示全部楼层
编译一下这段代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-9 16:49:39 | 显示全部楼层
编译了啊,编译了过后才测试的。
.                                                                                                                                                                                                .
.                                                                                                                                                                                                .
回复 支持 反对

使用道具 举报

发表于 2008-1-9 16:59:21 | 显示全部楼层
1、在做实现啥需求,
2、DataSetHTFK 和 DataSetHT 这个数据集有主从关系吗?
3、屏蔽所有的代码,就在这个事件上,留
DataSetHT.Open;
DataSetHT.Refresh;
这两句,然后编译运行看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-10 09:19:26 | 显示全部楼层
需求:
从表付款的累计金额能加到主表累计金额上。

DataSetHTFK是DataSetHT的从数据集。
屏蔽其他代码了,还是报错
procedure THTXX.DataSetHTFKAfterCommit(DataSet: TDataSet);
  //var
    //    queryJE : Tquery;
        begin
        {queryJE:= TQuery.Create(self);
        with queryJE do
        queryJE.ConnectionString := 'DATABASEURL=Biz:\MASTERMIND\mastermind.Database';
        queryJE.CommandText := 'update HT set HT.LJFKJE=(select sum(HTFK.FKJE) from HTFK where HTFK.HTBH=:HTBH) where HT.HTBH=:HTBH';
        queryJE.Params.ParamByName('HTBH').AsString :=DataSetHTFK.FieldByName('HTBH').AsString;
        queryJE.Execute;}
        DataSetHTCB.Refresh;  ////报错行,内容一样
        DataSetHT.Refresh;
        end;

方便的话远程给看看好么,这个问题可奇怪了~~
回复 支持 反对

使用道具 举报

发表于 2008-1-10 10:22:23 | 显示全部楼层
哦,这样的需求,不要这样做,
参考:http://bbs.justep.com/forum.php?mod=viewthread&tid=20172   11楼的方法
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-10 10:33:36 | 显示全部楼层
是这样的,我主从表数据是分别走不同的工作流的,所以编辑从表时不能打开主表数据也不能建立主从关系。主从关系是在查询数据集建立的,不好用从表统计字段同步到主表字段的方式解决。
.                                                                                                                                                                                   .
曹姐还是帮我看看语句的问题吧,这个问题可奇怪了。
.                                                                                                                                                                                   .
回复 支持 反对

使用道具 举报

发表于 2008-1-10 11:06:40 | 显示全部楼层
1、你是怎么设置数据集之间的主从关系的?,不是在业务信息层直接对数据集设置主从的?
2、你是想实现DataSetHTFK保存对 DataSetHTCB 和 DataSetHT 进行刷新动作,是这样吗?刷新意义是啥呢?
3、DataSetHTFK 这个数据集是来自 HT 这张表吗?  DataSetHTCB  和  DataSetHT  来自哪张表呢?
4、DataSetHTFK是DataSetHT的从数据集,那么DataSetHTCB  和 DataSetHT  这两个数据集有关系吗?

现在应该是触发时机有问题,就是代码写的事件不对,
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-5 21:18 , Processed in 0.044430 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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