设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 779|回复: 6
打印 上一主题 下一主题

[其它] 这个更新提示如何做?

[复制链接]
跳转到指定楼层
1#
发表于 2007-1-23 23:30:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想实现这样的要求:

产品 VTY4005 的彩绘单价为:3元 (这个是产品的总彩绘单价).但产品VTY4005有N个配件.用VTY4005/1 VTY4005/2 VTY4005/N.....表示.现在车间要把这个3元分配到各个配件中去,用系统控制不能超过公司给的总价,我用下面的方法为什么不行?

先用产品单价汇总查询出这个产品所有配件的总单价.再用这个单价和产品表中的彩绘总单价比较.但在更新后事件中放入不行,不知为什么?(是在子窗体中)

Dim a, b As Currency
Dim c As String
c = IIf(InStr([产品代号], "/") = 0, Left([产品代号], 14), Left([产品代号], InStr([产品代号], "/") - 1))

a = Nz(DLookup("彩绘单价总计", "产品单价汇总", "[产品编号]='" & c & "'"), 0)
b = Nz(DLookup("彩绘总单价", "产品表", "[产品代号]='" & c & "'"), 0)

If a > b Then
MsgBox "你折分的单价大于彩绘单价.请重新输入", vbInformation, sotfname
Me.Undo
End If


[此贴子已经被作者于2007-1-23 15:30:52编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2007-1-24 00:29:00 | 只看该作者
把例子传上来看看
3#
 楼主| 发表于 2007-1-24 00:49:00 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
 楼主| 发表于 2007-1-24 17:10:00 | 只看该作者
自已顶
5#
发表于 2007-1-24 17:38:00 | 只看该作者
出错原因,因为当修改时(更新后)表的数据并没有真正更新,数据还是原始值,所以如果当初的值大于设定值时永远提示大于值了,解决办法当彩绘字段获得焦点时,先记录该文本框的原始值,运算时先减去这个原始值再加上更新后的值,
6#
发表于 2007-1-24 17:56:00 | 只看该作者
Private Sub 彩绘_BeforeUpdate(Cancel As Integer)
Dim a As Currency, b As Currency
Dim c As String
c = IIf(InStr([产品代号], "/") = 0, Left([产品代号], 14), Left([产品代号], Abs(InStr([产品代号], "/") - 1)))

a = Nz(DLookup("彩绘单价总计", "产品单价汇总", "[产品编号]='" & c & "'"), 0)
b = Nz(DLookup("彩绘单价", "产品表", "[产品代号]='" & c & "'"), 0)
'Me.Refresh
If a - Me.彩绘.OldValue + Me.彩绘 > b Then
MsgBox "你所折分的单价超过了彩绘总单价,请重新输入", vbInformation, sotfname
Me.Undo
End If

End Sub
上面是更改后的代码,有三个地方有改动:
第一个地方是定义变量,VB要求每个变量都定义类型,否则就是默认的变体型,容易出错,但在这个程序里只影响一点效率。
第二个地方也是经常容易出错,就是IIF()函数,就是无论条件是什么,两个结果都要进行计算,在返回符合条件的结果。在这里,当不含“/”,第二个结果里函数:Left([产品代号], - 1)出错,我加了个绝对值函数避免函数出错。也可以用IF...ELSE...语句代替IIF()函数避免此类错误。
第三个地方就是文本框更新后的新旧值得处理问题,你原来程序中的a每次求出来的是数据库中的旧值,因文本框更新前记录未更新。我在这里先减掉旧值再加上新值后进行比较。另外,在不满足条件后的取消操作,建议用Cancel=true代替Me.Undo,前者只对当前文本框取消更改,后者是对整条记录取消更改。


另外,赖兄发给我的生产管理系统,我粗略看了一下,第一感觉是非常棒,看得出花了不少心血,另外感觉用户就是最好的老师,一个程序只有在实际应用中才会有生命力,还有作为自己使用管理的程序,系统功能和系统管理上也不需追求太完美,大不了赤膊上阵,直接在程序和表中进行修改维护。当然程序的错误捕捉和处理需要加强一点,否则老是出错影响用户信心。如果程序方面有什么问题,最好发帖提问,论坛上高手众多,可以快速解答。
7#
 楼主| 发表于 2007-1-24 21:39:00 | 只看该作者
Trynew兄说得对,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-6-4 13:54 , Processed in 0.103349 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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