Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

两表数值比较,超出(大于)时提示并无法输入

justinliao  发表于:2012-03-27 18:48:44  
复制

说明:表一ID是不重复编号,表二ID、code与qty是输入值;当表二相同ID:Z001、code:A所对应的qty之和大于表一Z001中的qty时(如输入红色字体30时),发出msgbox提示,并且此数值无法输入。

求此VB代码?

表一

 ID  qty
 Z001  100
 Z002  80

 

表二

 ID  code  qty
 Z001  A  60
 Z001  A  30
 Z002  A  20
 Z001  B  40
 Z002  B  60
 Z001  A  30

 

 

 

Top
煮江品茶 发表于:2012-03-27 19:20:07
用Dsum函数即可

煮茶论道 发表于:2012-03-27 19:43:23
justinliao 发表于:2012-03-27 20:32:06

根据以下的代码,我想还有2个问题:

1.当输入的code变成“B”或者其他code时,超出时它不在提示msgbox。因为以下只对code=A有效。

2.能不能不用保存控件,提示完msgbox后直接无法输入,也就是让Me.ID = Null Me.code = Null Me.QTY = Null都为空的。

 

Private Sub Command3_Click()
Dim rst As DAO.Recordset
Dim strID As Integer
Dim strsum As Integer
strID = DLookup("qty", "表1", "id='" & Me.ID & "'") '获取和窗体id一样的表1中qty的值

 strsum = DSum("qty", "表2", "ID='" & Me.ID & "' AND code='A'") '获取和窗体id一样,code为a的表2中qty的和

If Me.QTY + strsum > strID Then '两数进行比较
MsgBox "输入有误!"

Me.QTY.SetFocus
Me.QTY = Null
Exit Sub
End If


If MsgBox("您确认要保存吗?", vbOKCancel + vbInformation, "提示") = vbOK Then
Set rst = CurrentDb.OpenRecordset("表2", dbOpenDynaset)
rst.AddNew
rst("ID") = Me.ID
rst("code") = Me.code
rst("qty") = Me.QTY
rst.Update
rst.Close
Set rst = Nothing
'刷新数据
MsgBox "保存成功!", vbInformation, "提示"
Me.ID = Null
Me.code = Null
Me.QTY = Null
End If
End Sub



煮茶论道 发表于:2012-03-27 20:44:51

根据表1,电脑怎么知道ID为Z001,code为B的总计多少。这不是扯淡吗。



justinliao 发表于:2012-03-27 21:40:03

或者是我的表述没让老师明白,重新说一下:以下表二为例,当ID=Z001 code=A之和60+30+30=120>表一Z001的100,提示msgbox;当输入ID=Z001 code=B之和60+80=140>表一Z001的100,也提示msgbox。我想应该有办法做到的,只是俺还不会写这的VB代码。

 

ID  code  qty
 Z001  A  60
 Z001  A  30
 Z002  A  20
 Z001  B  40
 Z002  B  60
 Z001  A  30

 Z001

 B     80 



煮茶论道 发表于:2012-03-27 21:49:34

 

Private Sub Command3_Click()
Dim rst As DAO.Recordset
Dim strID As Integer
Dim strsum As Integer
strID = DLookup("qty", "表1", "id='" & Me.ID & "'") '获取和窗体id一样的表1中qty的值

 strsum = DSum("qty", "表2", "ID='" & Me.ID & "' AND code='" & ME.Code &"') '获取和窗体id一样,code为a的表2中qty的和

If Me.QTY + strsum > strID Then '两数进行比较
MsgBox "输入有误!"

Me.QTY.SetFocus

me.ID=null

me.code=null
Me.QTY = Null


Exit Sub
End If


If MsgBox("您确认要保存吗?", vbOKCancel + vbInformation, "提示") = vbOK Then
Set rst = CurrentDb.OpenRecordset("表2", dbOpenDynaset)
rst.AddNew
rst("ID") = Me.ID
rst("code") = Me.code
rst("qty") = Me.QTY
rst.Update
rst.Close
Set rst = Nothing
'刷新数据
MsgBox "保存成功!", vbInformation, "提示"
Me.ID = Null
Me.code = Null
Me.QTY = Null
End If
End Sub





justinliao 发表于:2012-03-27 23:02:14

strsum = DSum("qty", "表2", "ID='" & Me.ID & "' AND code='" & ME.Code &"')

 

这句是不是有问题?少了分隔符不?



wsl 发表于:2012-03-28 02:11:12

在='" & ME.Code &"') 的反括号之前加上一个",修改成='" & ME.Code & "'")

 



justinliao 发表于:2012-03-28 21:18:29

谢谢wsl,我在输入以下数值时后关闭窗体会报错。请帮助改一下。

 Z001  A  60

 

 

如附件

 

点击下载此附件

justinliao 发表于:2012-03-29 18:22:37
一天都没人reply?

总记录:10篇  页次:1/1 9 1 :