起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: melodyqi

【搞定】数据集post方法以及AfterApplyUpdates事件的Close+Open方法无效**

[复制链接]
发表于 2007-6-27 18:06:07 | 显示全部楼层
第二个问题:

注销掉就行了,不明白你为什么要close open  刷新数据集不用你操心:
procedure TMainForm.dsbMainAfterApplyUpdates(DataSet: TDataSet);
begin
// dsbMain.DataSet.Close;
// dsbMain.DataSet.Open;
end;
回复 支持 反对

使用道具 举报

发表于 2007-6-27 18:31:16 | 显示全部楼层

描述一下原始需求吧:

本以为把业务剥离出去方便斑竹解决问题,现在我再把需求描述一下把,看看斑竹能否提供个更好的解决方案。

第一步,先把库表结构提供截图:

1.jpg

29.26 KB, 下载次数: 206

回复 支持 反对

使用道具 举报

发表于 2007-6-27 18:38:51 | 显示全部楼层
一共用到了2个流程,草拟和修改,见截图,区别是:草拟合同是缺省设置,而修改是设置了流程的启动规则数据范围是:状态=2的,即通过的

5.jpg

22.24 KB, 下载次数: 202

回复 支持 反对

使用道具 举报

发表于 2007-6-27 18:40:45 | 显示全部楼层
合同状态(HTZT)截图:

6.jpg

6.04 KB, 下载次数: 199

回复 支持 反对

使用道具 举报

发表于 2007-6-27 18:44:02 | 显示全部楼层
好,进入主题了:
目前的关键就是如何在【申请修改】功能只看到数据1和2,即状态是通过的,并且客户只要修改任何一条后比如2如果存盘了,就不能再看到其他数据了比如1,并且不流转再次进入次任务消息时还是看到这条数据比如2,并且再启动一个【申请修改】也看不到刚才修改的这条数据2

7.jpg

13.26 KB, 下载次数: 204

回复 支持 反对

使用道具 举报

发表于 2007-6-27 18:51:09 | 显示全部楼层
请斑竹看这样做哪里不妥:
1、首先为了能够知道用户是否修改了数据,代码如下:
procedure TMainForm.dsbMainAfterEdit(DataSet: TDataSet);
begin
  DataSet.FieldByName('HTZT').AsString := '3';
end;
说明:3就是『修改草拟』状态,否则用户只修改一个字段不切换焦点时候无法处理

2、然后在记录滚动前询问客户是否提交,询问代码省略,简化成只要修改了就不让滚动了:
procedure TMainForm.dsbMainBeforeScroll(DataSet: TDataSet);
begin
  if DataSet.FieldByName('HTZT').AsString = '3' then
    SysUtils.Abort;
end;

3、然后打算在用户提交数据后刷新数据集,以便他不能再看到其他数据:
procedure TMainForm.dsbMainAfterApplyUpdates(DataSet: TDataSet);
begin
  dsbMain.DataSet.Close;
  dsbMain.DataSet.Open;
end;
但是发现Close+Open无效,现在不清楚为什么AfterApplyUpdates后不能这么做,而换成一个单独的按钮写如下代码就可以了:
procedure TMainForm.Button1Click(Sender: TObject);
begin
  //dsbMain.DataSet.Post;
  dsbMain.DataSet.ApplyUpdates;
  dsbMain.DataSet.Close;
  dsbMain.DataSet.Open;
end;
至于不用Refresh是因为那样不会感知流程的数据集过滤。
回复 支持 反对

使用道具 举报

发表于 2007-6-27 18:53:54 | 显示全部楼层
1楼问题就在我们处理
procedure TMainForm.dsbMainBeforeScroll(DataSet: TDataSet);
begin
  if DataSet.FieldByName('HTZT').AsString = '3' then
    SysUtils.Abort;
end;
时候导致,等上面需求说清楚了再看我们那2个问题吧
呵呵,我已经把我能想到的说清楚这个问题的话都写了,斑竹哪里不清楚跟贴询问我吧,谢谢。
回复 支持 反对

使用道具 举报

发表于 2007-6-28 09:05:34 | 显示全部楼层

10楼我这里是这样:

请看16楼,我能看到15楼的数据1和数据2,修改数据2后,由于
procedure TMainForm.dsbMainAfterEdit(DataSet: TDataSet);
begin
  DataSet.FieldByName('HTZT').AsString := '3';
end;
所以我再点击数据1时候
procedure TMainForm.dsbMainBeforeScroll(DataSet: TDataSet);
begin
  if DataSet.FieldByName('HTZT').AsString = '3' then
    SysUtils.Abort;
end;
就不让滚动了,此时是BeforeScroll,应该Abort掉了滚动操作,为什么数据集还是像你说的激活了Post而导致我Post报错了呢?
回复 支持 反对

使用道具 举报

发表于 2007-6-28 14:00:45 | 显示全部楼层
掉到第二页了。
回复 支持 反对

使用道具 举报

发表于 2007-6-28 14:32:01 | 显示全部楼层
今天上午公司网络出问题了,正在处理,有结果马上跟贴告知
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-23 06:49 , Processed in 0.040996 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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