Access交流中心

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

报销案例中的员工新增窗体报错

半夜罗  发表于:2015-09-09 19:51:14  
复制

     报销案例中,员工新增窗体frmYg_sg_Add,如果表tblCodeyg没有任何记录,则会出现“运行时错误'94'  无效使用 null ”的提示,在实际中会出现将员工全部删除的时候(往往在测试时),有记录时则没有问题。请问各位老师,怎样用代码避免这个问题?原代码为:
    MaxID = DMax("[ygID]", "tblCodeyg")
    Me.ygId = "Y" & Format(Val(Right$(MaxID, 2) + 1), "00")

 

Top
缪炜 发表于:2015-09-09 21:38:17

MaxID = nz(  DMax("[ygID]", "tblCodeyg"),"")

if len(MaxID)=0 then
        me.ygid=Y001

else  

        Me.ygId = "Y" & Format(Val(Right$(MaxID, 2) + 1), "00")

end if



麥田 发表于:2015-09-10 14:11:54
发整段代码

丘山 发表于:2015-09-10 16:18:20
直接 MaxID = nz(DMax("[ygID]", "tblCodeyg"),"Y01")


半夜罗 发表于:2015-09-10 16:26:57

谢谢缪伟老师!也谢谢麦田老师!

缪伟老师的代码已经能解决了,不过作了小的修改。

Sub zdbh()    '自动编号子过程
' MaxID = DMax("[ygID]", "tblCodeyg")
' Me.ygId = "Y" & Format(Val(Right$(MaxID, 2) + 1), "0000")   '这个编号不适合加时间日期
    MaxID = Nz(DMax("[ygID]", "tblCodeyg"), "")
    If Len(MaxID) = 0 Then
        Me.ygId = "Y01"'此处应加双引号
    Else
        Me.ygId = "Y" & Format(Val(Right$(MaxID, 2) + 1), "00")
    End If
End Sub

下面是整个窗体的代码(已加入了缪伟老师修改后的代码):在这个窗体中学习了子过程的调用、控件焦点的控制

Private Sub 保存()    '保存子过程
'**********定义变量
    Dim rst As Object
    Dim strSQL As String
   ' Dim MaxID As String
   ' Dim currentID As String
    Dim strFrm As String
    '********判断必填项
    If IsNull(Me.ygxm) Then
        MsgBox "请输入员工姓名!", vbCritical, "提示"
        Me.ygxm.SetFocus
        Exit Sub
    End If
    '**********自动编号
    Call zdbh    '运行自动编号子过程
    '************新增数据
    strSQL = "select * from tblCodeyg"
    Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)'打开记录集
    rst.AddNew'新增一行数据
   ' rst!ygId = currentID
    rst!ygId = Me.ygId
    rst!ygxm = Me.ygxm
    rst.Update
    rst.Close
    Set rst = Nothing
    '*************清空文本框,以便新增下一条记录
    Me.ygxm = Null
    '*********刷新子窗体
    strFrm = Form_frmYg_sg_Main!frmChild.SourceObject
    Form_frmYg_sg_Main!frmChild.SourceObject = strFrm
    '********提示成功
    MsgBox "数据保存已成功!", vbInformation, "消息"
End Sub

Private Sub cmdCancel_Click()    '取消按钮的单击事件
    DoCmd.Close acForm, Me.Name    '关闭窗体
End Sub

Sub zdbh()    '自动编号子过程
' MaxID = DMax("[ygID]", "tblCodeyg")
' Me.ygId = "Y" & Format(Val(Right$(MaxID, 2) + 1), "00")   '这个编号不适合空表
    MaxID = Nz(DMax("[ygID]", "tblCodeyg"), "")
    If Len(MaxID) = 0 Then
        Me.ygId = "Y01"
    Else
        Me.ygId = "Y" & Format(Val(Right$(MaxID, 2) + 1), "00")
    End If
End Sub


Private Sub cmdSave_Click()    '保存按钮的单击事件
    Call 保存    '运行【保存】子过程
    Call zdbh    '自动编号
    Me.ygxm.SetFocus    '让员工姓名获得焦点
End Sub

Private Sub Form_Load()    '窗体加载事件
    Call zdbh    '自动编号
    Me.ygxm.SetFocus    '让员工姓名获得焦点
End Sub



半夜罗 发表于:2015-09-10 16:36:36

丘山老师的代码更简单、直接,不过是在我点评缪伟老师这后,所以没能作出最佳答案的

MaxID = nz(DMax("[ygID]", "tblCodeyg"),"Y00")'此处我修改为“Y00”

 Me.ygId = "Y" & Format(Val(Right$(MaxID, 2) + 1), "00")




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