起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 138|回复: 7

[请求]【急】新手问题:关于输入数据的验证问题。

[复制链接]
发表于 2008-9-28 09:30:56 | 显示全部楼层 |阅读模式
我有十份文件可供分发,每次分发之前都要对文件总数,剩余份数和输入的份数进行判断,使分发的总数不能够大于可供分发数。
我的思想是每次分发确认前将输入的数据和剩余的数量做和,如果大于可供分发数则不通过,但这样带来一个问题就是我要修改一条记录的话,比如把五份改成六份就会通不过,请问改如何改动。
PS:以前曾做过一个类似的,不过是把方法写在了DataNavigatorBeforeAction事件中,而这个例子中没有DataNavigator,而且是在弹出窗口中输入分发数。
回复

使用道具 举报

 楼主| 发表于 2008-9-28 10:31:40 | 显示全部楼层
没人知道下吗,,,,,,
回复 支持 反对

使用道具 举报

发表于 2008-9-28 10:35:32 | 显示全部楼层
关键是没有看的太懂楼主的描述。
其实这个问题就看你要在哪里去触发代码做这种校验。
试试DataSetBroker1DataChange?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-28 10:59:17 | 显示全部楼层
我看了OnDataChange的方法,感觉跟我说的不一样。‘
我以前有个代码:
procedure TMAINFORM.DataNavigatorBeforeAction(Sender: TObject; var Accept: Boolean);
var laccept,lfffs,lfs,lsy,llaccept,llfs:Integer;
begin
DataNavigator.SetFocus;
        lsy:=INFODRAWING_MANAGE_INFO.TDRAWING_PARTICULAR_INFO(DocViewDrawing_Particular_Info.Doc).DataSetBrokerSum.DataSet.FieldByName('SYFS').AsInteger;
        lfs:=INFODRAWING_MANAGE_INFO.TDRAWING_PARTICULAR_INFO(DocViewDrawing_Particular_Info.Doc).DataSetBrokerSum.DataSet.FieldByName('Dispense_Num').AsInteger;
        llfs:=INFODRAWING_MANAGE_INFO.TDRAWING_PARTICULAR_INFO(DocViewDrawing_Particular_Info.Doc).DataSetBrokerSum.DataSet.FieldByName('Dispense_Num').AsInteger;
        INFODRAWING_MANAGE_INFO.TDISPENSE_PARTICULAR_INFO(DocViewDispense_Particular_Info.Doc).DataSetBrokerEng_Drawing_Dispense.DataSet.Edit;
        INFODRAWING_MANAGE_INFO.TDISPENSE_PARTICULAR_INFO(DocViewDispense_Particular_Info.Doc).DataSetBrokerEng_Drawing_Dispense.DataSet.Post;
        laccept:=INFODRAWING_MANAGE_INFO.TDRAWING_PARTICULAR_INFO(DocViewDrawing_Particular_Info.Doc).DataSetBrokerEng_Drawing.DataSet.FieldByName('ACCEPT_NUM').AsInteger;
        lfffs:=INFODRAWING_MANAGE_INFO.TDRAWING_PARTICULAR_INFO(DocViewDrawing_Particular_Info.Doc).DataSetBrokerSum.DataSet.FieldByName('FFFSTJ').AsInteger;
        if (laccept<lfffs)then
        begin
          jsDialogs.ShowMsg('分发份数大于接收份数,不能保存,请重新编辑','提示');
          Accept:=False;
          INFODRAWING_MANAGE_INFO.TDISPENSE_PARTICULAR_INFO(DocViewDispense_Particular_Info.Doc).DataSetBrokerEng_Drawing_Dispense.DataSet.Cancel;
          INFODRAWING_MANAGE_INFO.TDISPENSE_PARTICULAR_INFO(DocViewDispense_Particular_Info.Doc).DataSetBrokerEng_Drawing_Dispense.DataSet.Edit;
          INFODRAWING_MANAGE_INFO.TDISPENSE_PARTICULAR_INFO(DocViewDispense_Particular_Info.Doc).DataSetBrokerEng_Drawing_Dispense.DataSet.FieldByName('Dispense_Num').AsInteger:=lfs;
          INFODRAWING_MANAGE_INFO.TDISPENSE_PARTICULAR_INFO(DocViewDispense_Particular_Info.Doc).DataSetBrokerEng_Drawing_Dispense.DataSet.FieldByName('SYFS').AsInteger:=lsy;
          INFODRAWING_MANAGE_INFO.TDISPENSE_PARTICULAR_INFO(DocViewDispense_Particular_Info.Doc).DataEditDataSetBrokerEng_Drawing_Dispense.SetFocus;
        end;
end;


但是我现在要在一个新的弹出窗口中做判断,没有DataNavigator,就无法用到这个事件。。。。所以我就是想问其他什么方式可以实现上边的方法。
回复 支持 反对

使用道具 举报

发表于 2008-9-28 11:01:42 | 显示全部楼层
都是一样的处理代码 啊,无非就是你原来是在DataNavigator的动作事件上来做,那现在就改到你的弹出窗口里来做。但不清楚你的弹出窗口,我们也不知道该在哪里做!
可以在数据集上,也可以在DataEdit的相关事件上,或者按钮的相关事件里。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-28 11:02:18 | 显示全部楼层
我想把手动输入的数据保存到数据库中,如果比较通过则保存,若通不过则Cancel,但是我试了,如果第一次输入了非法数据不报错,只有第二次才报错。
回复 支持 反对

使用道具 举报

发表于 2008-9-28 11:09:49 | 显示全部楼层
那你跟踪一下,第一次输入是否执行了你的代码校验部分。
回复 支持 反对

使用道具 举报

发表于 2008-10-6 13:43:03 | 显示全部楼层
??
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 21:19 , Processed in 0.037642 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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