Access交流中心

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

在窗体添加数据出现“运行时错误3022”

水淼淼  发表于:2014-06-06 17:43:56  
复制

Private Sub 增加_Click()

Dim aOK As Integer


If 工号.Value = "" Then
MsgBox "输入的数据不能为空,请重新输入", vbOKOnly, "错误提示!"

工号.SetFocus


ElseIf Val(工号.Value) = rst("工号") Then
        MsgBox "输入的工号重复,请重新输入", vbOKOnly, "错误提示"
        工号.SetFocus
        工号.Value = ""
Else
    rst.AddNew
    rst("工号") = 工号.Value
    rst("姓名") = 姓名.Value
    rst("岗位") = 岗位.Value
    rst("薪金") = 薪金.Value
    rst("工龄") = 工龄.Value
    rst("附注") = 附注.Value
    aOK = MsgBox("确认增加吗?", vbOKCancel, "确认提示!")

    

If aOK = 1 Then

       rst.Update

      Call buttonEnable  

   Else

      rst.CancelUpdate


      End If
     工号.Value = ""
     姓名.Value = ""
     岗位.Value = ""
     薪金.Value = ""
     工龄.Value = ""
     附注.Value = ""
    End If
    

End Sub


当我在窗体输入数据时,

如果工号不重复,一切正常。

如果不填写工号,提示“输入的数据不能为空”。也正常。

如果填写重复工号,则提示“运行时错误3022”,

按提示调试,发现程序运行至 rst.Update

  若是从程序开始处重新调试,则  EsleIf  函数运行良好,

即会出现提示”输入的工号重复“。


 

Top
席主席 发表于:2014-06-06 21:28:12

这个问题,最大的可能就是:你的“工号”字段是主键或者唯一索引。所以不允许有重复的值被保存到数据库。可在工号字段更新后事件中,立即判断是否有重复。如果有,就不让输入。



水淼淼 发表于:2014-06-06 21:39:45

但是按照 If...Then...ElseIf...的规则来看,

首先是判断工号是否为空,为空则重新输入,

不为空则判断ElseIf的条件啊,这在里如果是重复工号的话,

那么就会有错误提示吧,然后让你重新输入,

而不是继续运行到下面的程序中呀。



cspa 发表于:2014-06-06 22:39:17

ElseIf Val(工号.Value) = rst("工号") Then

这样写是不对的,无法判断工号有无重复,只能判断当前窗体工号是否与rst记录集的第一条记录的工号是否重复!



水淼淼 发表于:2014-06-06 23:53:41

席主席和cspa 的回答都很好,一个说的是底层原因,一个讲的是程序设计错误。

但我是根据cspa 老师的回答修改好程序的,所以,最佳答案就给cspa .



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