Access交流中心

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

回复 加入收藏帖  复制
我要提问 帖子上移

Access开发平台新增,修改,删除,查找VBA代码详解

钱玉炜 等级: 贵宾★★★★★ 积分:3029 金币:15640 来自:江阴Access交流中心 发表于:2008-11-11 21:15:20   已结帖
楼主

以Access开发平台专业版报销教程中的报销明细的新增修改删除查找为例来详细说明下各代码的作用
以下代码是制作完成后的各个窗体的所有代码,具体哪一部分代码负责新增,哪一部分代码负责修改,可以在前面的教程中找到

首先是frmBxmx_child窗体,所有功能都做好以后窗体中的代码应该是如下所示:
Private Sub报销编号_GotFocus()                     -------机型代码获得焦点事件
On Error GoTo Err_报销编号_GotFocus:     -------错误处理语句,出错的时候转到Err_机型代码_GotFocus:执行
strSelectID = Me. 报销编号                               -------给变量赋值,使strselectID等于控件机型代码的值      
Forms!usysfrmMain!btnEdit.Tag = 999        -------这是个判断条件,当其大于1时点击"修改"按钮时,平台就会自动打开"_Edit"窗体
Forms!usysfrmMain!labFind.Tag = 1            -------同上,当其等于1时点击查询按钮时,打开平台内的查询窗体  
Exit_报销编号_GotFocus:       
    Exit Sub
Err_机型代码_GotFocus:
    Resume Exit_机型代码_GotFocus
End Sub
Private Sub Form_Timer()                                  ------窗体计时器事件
    Acchelp_FindStrRecord (g_CurrentSelectStrID)  ------利用平台函数acchelp_findstrrecord找到修改前鼠标所选择的记录
    '计时器执行一次后不再执行
    Me.TimerInterval = 0                                        ------设定刷新时间为0
End Sub
Public Sub btnDel()                                             ------删除代码
    If MsgBox("您确认要删除吗?", vbYesNo + vbInformation, Forms!usysfrmLogin.Caption) = vbYes Then -----判断提示框的值,当值为vbyes的时候执行下面代码,vbno的时候跳出代码
        DoCmd.Echo False                           ------防止屏幕闪动
        Call acchelp_deletefldstrrow("tblBxmx ", " mxId ", selectstr)         ------调用平台自定义函数AccHelp_DeleteFldStrRow,函数的详细说明请看平台帮助第九章
        Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child" ------重新加载子窗体frmBxmx_child,以刷新数据子窗体数据
        DoCmd.Echo True           ------打开屏幕闪动
    End If
End Sub
Public Sub btnFind()                   -------查询按钮单击事件
    DoCmd.OpenForm "usysfrmFind"   -------打开查询窗体
    '文本型对应 3 ,日期型对应 1 ,数值型对于 2      -------查询不同的字段类型的时候,对应不同的数字来表示
    Forms!usysfrmFind!cobfldName.RowSource = "报销日期;1;类别名称;3;员工姓名;3;报销金额;2;报销摘要;3;"   -------设置需要查询的字段,已经设定该查询字段的数据类型
    '指定查询数据来源
    Forms!usysfrmFind!labDataSource.Caption = "qryBxmx"
End Sub
Public Sub FindEnd()                            ----------------查询结束后执行的过程
    Forms!usysfrmMain!frmChild.Form.RecordSource = Acchelp_ChildFormRecordSource("qryBxmx", "报销编号", True)    -----------刷新子窗体数据
    strRptReSource = Forms!usysfrmMain!frmChild.Form.RecordSource              ---------让定义的变量变量等于当前查询结束后子窗体的数据源
End Sub


 

 

access培训  诚聘access开发人员

    钱玉炜
      获得社区协助:请教问题(即发帖)8篇,其中获得解决的6篇;
      协助社区成员:协助他人(即回帖)1094篇,其中被设为【最佳答案】的346篇;
      协助我们社区:发布技术文章391篇,邀请了571名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
Top
钱玉炜 等级:贵宾★★★★★ 积分:3029 金币:15640 来自:江阴Access交流中心 发表于2009/1/17 9:00:08 
1楼 得分: 0
以下是frmBxmx_child_add窗体的所有代码:
Private Sub cmd_Save()            --------------定义cmd_Save过程,执行数据新增
    Dim rst As DAO.Recordset      --------------定义DAO记录集
    If IsNull(Me.bxrq) Then       --------------判断报销日期是否为空,如果为空,则弹出对话框提示,下同
        MsgBox "请输入报销日期!", vbCritical, "提示:"
        Me.bxrq.SetFocus
        Exit Sub
    End If
    If IsNull(Me.lbId) Then
        MsgBox "请输入报销类别!", vbCritical, "提示:"
        Me.lbId.SetFocus
        Exit Sub
    End If
    If IsNull(Me.ygId) Then
        MsgBox "请输入员工姓名!", vbCritical, "提示:"
        Me.ygId.SetFocus
        Exit Sub
    End If
If IsNull(Me.bxje) Then
        MsgBox "请输入报销金额!", vbCritical, "提示:"
        Me.bxje.SetFocus
        Exit Sub
End If
Me.Refresh                  --------------数据输入完毕后刷新一下窗体控件


    钱玉炜
      获得社区协助:请教问题(即发帖)8篇,其中获得解决的6篇;
      协助社区成员:协助他人(即回帖)1094篇,其中被设为【最佳答案】的346篇;
      协助我们社区:发布技术文章391篇,邀请了571名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
麥田 等级:管理员★★★★★ 积分:35842 金币:58480 来自:上海Access交流中心 发表于2009/2/9 14:33:04 
2楼 得分: 0
    If MsgBox("您确认要保存吗?", vbOKCancel + vbInformation, "提示") = vbOK Then      ------弹出对话框,询问用户是否需要保存数据,如果选择是,则执行以下代码
        Set rst = CurrentDb.OpenRecordset("tblBxmx", dbOpenDynaset)            ------设置记录集为表tblBxmx
        rst.AddNew            ---------开始新增数据
        rst("mxId") = acchelp_autoid("M", 10, "tblBxmx", "mxId")             ---------用平台函数设置编号字段
        rst("bxrq") = Me.bxrq          ---------让表中的bxrq字段等于当前窗体bxrq控件的值,下同
        rst("lbId") = Me.lbId
        rst("ygId") = Me.ygId
        rst("bxje") = Me.bxje
        rst("bxzy") = Me.bxzy
        rst.Update                                                     ----------新增完毕后更新一下记录集
        rst.Close            ----------关闭记录集
        Set rst = Nothing                                               ----------清空记录集
        '刷新数据


    希望我的回答能解决了您的问题,或者所附上的这些信息对您有所帮助!如有任何疑问或需要进一步帮助,请您直接在本站发贴,我们非常乐意帮助您解决问题!
    如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,以方便大家对那些正在等待解决的帖子给予关注!
    麥田  [协助社区成员回帖5120篇,其中【最佳答案】1833篇;发布技术文章1462篇。]
    UMVSoft在线支持工程师
    http://www.umvsoft.com
    QQ:3002789054 点击这里给麥田发消息
    如果您没有注册这个论坛,请单击下面的链接进行注册,与我在论坛进行交流:
    http://www.accessoft.com/reg/reg.asp?userid=11
    本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。
麥田 等级:管理员★★★★★ 积分:35842 金币:58480 来自:上海Access交流中心 发表于2009/2/9 14:33:44 
3楼 得分: 0
        If IsLoaded("usysfrmMain") Then
            DoCmd.Echo False
            Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child"         --------------重新加载一下子窗体,以刷新数据
            DoCmd.Echo True
        End If
        MsgBox "保存成功!", vbInformation, "提示"
        Me.bxrq = Null                                                     ---------------让窗体里的控件清空,下同
        Me.lbId = Null
        Me.ygId = Null
        Me.bxje = Null
        Me.bxzy = Null
    End If
End Sub
Private Sub cmdOK_Click()
    cmd_Save                                                           ------------单击确定按钮,执行cmd_Save过程
End Sub
Private Sub cmdCancel_Click()
    DoCmd.Close acForm, Me.Name                 -----------单击取消按钮关闭当前窗体
End Sub
Private Sub cmdBX_ButtonClick(ByVal Button As Object)
    DoCmd.OpenForm "frm_CodeBxlb_child_Add"          ----------打开报销类别新增窗体,用来快捷添加
End Sub
Private Sub cmdYG_ButtonClick(ByVal Button As Object)
    DoCmd.OpenForm "frmyg_child_Add"                        --------------打开员工信息新增窗体,快捷添加
End Sub

    希望我的回答能解决了您的问题,或者所附上的这些信息对您有所帮助!如有任何疑问或需要进一步帮助,请您直接在本站发贴,我们非常乐意帮助您解决问题!
    如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,以方便大家对那些正在等待解决的帖子给予关注!
    麥田  [协助社区成员回帖5120篇,其中【最佳答案】1833篇;发布技术文章1462篇。]
    UMVSoft在线支持工程师
    http://www.umvsoft.com
    QQ:3002789054 点击这里给麥田发消息
    如果您没有注册这个论坛,请单击下面的链接进行注册,与我在论坛进行交流:
    http://www.accessoft.com/reg/reg.asp?userid=11
    本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。
麥田 等级:管理员★★★★★ 积分:35842 金币:58480 来自:上海Access交流中心 发表于2009/2/9 14:34:00 
4楼 得分: 0

以下是修改窗体的代码:
Private Sub cmdCancel_Click()       -----------单击取消按钮事件
    Me.Undo          -----------撤销修改
    DoCmd.Close acForm, Me.Name     -----------关闭当前窗体
End Sub

Private Sub cmdOK_Click()       -----------单击确定按钮事件
    If IsNull(Me.bxrq) Then       -----------判断控件是否为空,如果为空则提示要求输入的信息
        MsgBox "请输入报销日期!", vbCritical, "提示:"
        Me.bxrq.SetFocus
        Exit Sub
    End If
    If IsNull(Me.lbId) Then
        MsgBox "请输入报销类别!", vbCritical, "提示:"
        Me.lbId.SetFocus
        Exit Sub
    End If
    If IsNull(Me.ygId) Then
        MsgBox "请输入员工姓名!", vbCritical, "提示:"
        Me.ygId.SetFocus
        Exit Sub
    End If
    If IsNull(Me.bxje) Then
        MsgBox "请输入报销金额!", vbCritical, "提示:"
        Me.bxje.SetFocus
        Exit Sub
    End If
    Me.Refresh         ------------刷新一下窗体
DoCmd.Echo False
Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child"         --------------修改完毕后刷新一下子窗体
    DoCmd.Echo True
    '触发子窗体计时器事件
    Forms!usysfrmMain!frmChild.Form.TimerInterval = 300
    DoCmd.Close acForm, Me.Name      ----------关闭当前窗体
End Sub

Private Sub Form_Load()
    Me.RecordSource = "Select * FROM tblBxmx Where mxId = '" & selectstr & "'"      ------------窗体加载事件,加载的时候设置窗体的数据源为后面的SQL语句所查询到的数据
End Sub



    希望我的回答能解决了您的问题,或者所附上的这些信息对您有所帮助!如有任何疑问或需要进一步帮助,请您直接在本站发贴,我们非常乐意帮助您解决问题!
    如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,以方便大家对那些正在等待解决的帖子给予关注!
    麥田  [协助社区成员回帖5120篇,其中【最佳答案】1833篇;发布技术文章1462篇。]
    UMVSoft在线支持工程师
    http://www.umvsoft.com
    QQ:3002789054 点击这里给麥田发消息
    如果您没有注册这个论坛,请单击下面的链接进行注册,与我在论坛进行交流:
    http://www.accessoft.com/reg/reg.asp?userid=11
    本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。
pbcwn2008 等级:普通会员 积分:12 金币:0 来自:临沂Access交流中心 发表于2011/12/17 16:52:37 
5楼 得分: 0
总结的太好了,谢谢楼主,谢谢平台开发团队的辛勤劳动!!!

    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    pbcwn2008
      获得社区协助:请教问题(即发帖)16篇,其中获得解决的6篇;
      协助社区成员:协助他人(即回帖)9篇,其中被设为【最佳答案】的1篇;
      协助我们社区:发布技术文章0篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
总记录:5篇  页次:1/1 9 1 :
您还没有在Access软件网登录不能回复帖子
  • 你没有登录,请点击后面链接登录:登录
  • 如果你没有注册,请点击后面链接注册:注册,注册完成后,请再次访问本页功能。