起步软件技术论坛-X3

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

【结贴】运行错误

[复制链接]
发表于 2009-10-22 08:44:13 | 显示全部楼层 |阅读模式
前见天运行一段代码还没问题,昨天突然除了个问题,不知道可能的原因。
procedure TMainForm.FlowBroker1BeforeFlowOut(Sender: TObject; Command: TFlowOutCommand);
var
i:integer;
begin
datasetbroker1.DataSet.Edit;
……
……
……
datasetbroker1.DataSet.Post;
datasetbroker1.DataSet.ApplyUpdates;
end;
初始化运行时发现错误出现在datasetbroker1.DataSet.ApplyUpdates;这一句上。错误如下图所示:

qq11.png

7.3 KB, 下载次数: 188

回复

使用道具 举报

发表于 2009-10-22 09:05:58 | 显示全部楼层
呵呵,不会这么神奇的,肯定有原因的,在 datasetbroker1.DataSet.ApplyUpdates; 打个断点,看看提交的SQL语句是啥。
这个sql在数据库上执行看看怎样。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-22 10:07:50 | 显示全部楼层
我们这个破网,老是出问题。
我刚刚设断点试了试。
datasetbroker1.DataSet.DataFetch.CommandText的值为
select * from zgpjb where (((zgpjb.bh='FD2D6DEF5C0A4232B85F49488D48C2F3')) AND ((((zgpjb.bh='FD2D6DEF5C0A4232B85F49488D48C2F3'))))) 虽然不知道为什么这么多括号,但是在数据库上执行了一下还是没有问题的。
回复 支持 反对

使用道具 举报

发表于 2009-10-22 10:25:15 | 显示全部楼层
你的datasetbroker1.DataSet操作的数据是业务数据么?
把这个对字段编辑的这些代码放到窗体的按钮中执行看看是否正常?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-22 10:31:28 | 显示全部楼层
操作的是业务数据,也就是几个赋值语句。
放在按钮中执行也出错。
回复 支持 反对

使用道具 举报

发表于 2009-10-22 10:42:00 | 显示全部楼层
这个数据集定义了主从关系了?如果有,取消看看。
另外这个是流程中的功能环节吗?如果是,是流程的入口功能吗?,在Studio中,直接运行功能,然后这样保持ok不?怀疑写任务的时候出问题了,其他流程或者功能环节提交数据ok不?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-22 10:50:42 | 显示全部楼层
定义了主从关系,但是目前操作的是主数据集。
这个功能环节是我的流程的入口功能。
另外,代码如下:
datasetbroker1.DataSet.Edit;
datasetbroker1.DataSet.FieldByName('ZPRY').AsString:='';
datasetbroker1.DataSet.Post;
datasetbroker1.DataSet.ApplyUpdates;
不出现上述问题。
代码改成这样:
datasetbroker1.DataSet.Edit;
datasetbroker1.DataSet.FieldByName('ZPRY').AsString:='cw';
datasetbroker1.DataSet.Post;
datasetbroker1.DataSet.ApplyUpdates;
就出错。

我的这个功能不能运行,只能初始化运行,里面用到了TSystemCore.Operator.Positions[0].PersonMember.ID; 运行会出错的。
回复 支持 反对

使用道具 举报

发表于 2009-10-22 11:28:03 | 显示全部楼层
把 datasetbroker1.DataSet.ApplyUpdates; 修改为 datasetbroker1.DataSet.ApplyUpdates(False);正常吗?

另外,
1、'ZPRY'这个字段是引用元素了吗?是流程字段吗?
2、'ZPRY'这个字段只要赋值就可以了吧,不一定要赋值cw吧
3、流程的启动模式是“处理时”还是“流转时”?如果是“处理时”修改为“流转时”,然后运行看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-22 13:34:10 | 显示全部楼层
把 datasetbroker1.DataSet.ApplyUpdates; 修改为 datasetbroker1.DataSet.ApplyUpdates(False); 居然就没有错误了。这两个applyupdates有什么区别吗?
另外,1、我的流程中的其他功能在执行applyupdates 这句时也出现相同的错误,按照上述解决方法该改一下就行了。
2、我流程的启动模式是默认的“处理时”。
回复 支持 反对

使用道具 举报

发表于 2009-10-22 13:57:10 | 显示全部楼层
把 datasetbroker1.DataSet.ApplyUpdates; 修改为 datasetbroker1.DataSet.ApplyUpdates(False); 居然就没有错误了。这两个applyupdates有什么区别吗?
如果是主从数据集就有区别,如果没有定义主从就没有区别。ApplyUpdates 和 ApplyUpdates(True) 意思是主从一起提交(顺便多说一句,数据导航条的保持按钮也是主从一起提交)。而 ApplyUpdates(False);  则仅仅提交当前这个数据。

你可以看一下如果取消主从,那么用ApplyUpdates,或者ApplyUpdates(True) ,或者直接用数据导航条的保存按钮也是正常的

从现象看应该跟主从定义有关,那么需要检查一下另一个数据集了。例如他们是来自同一张表吗?哪个数据集提交的SQL是啥?等等
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-15 06:40 , Processed in 0.044626 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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