Access-培训管理系统-10-按钮代码设置之 录入(2)

微信公众号原文

系统:Windows 7
软件:Excel 2010 / Access 2010

  • 这个系列开展一个新的篇章,主体使用Access,包括数据库部分及界面部分,当然输出部分也会涉及到ExcelExcel的可读性还是比较好的
  • 本公众号的不同阶段:Excel -> Excel + Access -> Access。但并不表示Access就一定比Excel好啊,各有所长吧,合适才是最好的
  • 主体框架:换一种讲解方式,以项目为基础,从开始到结束
  • 项目名称:培训管理系统
  • 主要功能:两个界面。界面1,培训时录入信息;界面2,以培训老师和培训学员为客户,输出信息
  • 涉及知识:Access界面,数据库知识,VBA,SQL,Excel

Part 1:本篇目标

  1. 接下来几篇分别介绍一下几个按钮的实现
  2. 今天说说录入按钮,点击该按钮,主体实现三个功能
    • 检查信息是否填写完整
    • 录入培训信息进数据库
    • 禁用当前按钮,防止重复录入(也可以从数据库端控制)
  3. 今天只讲第2部分中的录入课程信息,还缺少一部分,学员信息的录入,下次会说,代码部分是差不多的

程序架构
2.png

运行效果
7.png

Part 2:逻辑过程

  1. 每一次培训有唯一的ID号,设置其格式为8位数字,示例:20180001,其意义为2018的第一次培训
  2. 培训课程ID将课程信息及学员信息联系起来
  3. 代码逻辑过程
    • 获取培训课程ID,ID逐渐增加
    • 将窗体中的信息+培训课程ID录入数据库,形成一条记录
  4. 对应数据库结构如下图,将培训课程ID设为主键

培训课程数据库结构
1.png

长整数取值范围
3.png

数据库中数据存储效果
4.png

Part 3:代码

窗体内代码
只是在上一篇基础上增加一个调用

Call sMod_sr_07_信息录入(frmName, arr, listboxName)

完整代码如下

Private Sub 录入_Click()
    Dim arr
    Dim listboxName
    Dim frmName
    frmName = fFrm_pxsr_01_当前窗体名称

    arr = Array("培训课程名称", "培训开始时间", "培训多少小时", "培训老师")
    listboxName = "学员列表框"

    Call sMod_sr_06_录入信息检查(frmName, arr, listboxName)
    Call sMod_sr_07_信息录入(frmName, arr, listboxName)
    MsgBox "信息填写完毕"
End Sub

模块内代码分成两部分:信息录入;培训课程ID获取

模块内代码

Sub sMod_sr_07_信息录入(frmName, arr, listboxName)
    Rem>>录入课程及学员信息
    Rem>>
    Dim courseID
    Dim frm
    Dim d
    Dim ctrl
    Dim ctrlName
    Dim filds
    Dim fildsValue

    courseID = fMod_01_获取课程ID

    '第1部分:录入课程信息
    Set frm = Forms(frmName)
    Set d = CreateObject("Scripting.Dictionary")

    For Each ctrlName In arr
        Set ctrl = frm.Controls(ctrlName)
        d(ctrlName) = ctrl.Value
    Next

    ' 连接数据库
    Dim dbAddr
    Dim tblName
    Dim SQL
    Dim mode
    Dim rsAdConn
    Dim rs
    Dim adConn

    dbAddr = fMod_dz_01_数据库地址

    tblName = "02_培训课程"
    filds = "培训课程ID,培训课程名称,培训开始时间,培训多少小时,培训老师"

    fildsValue = courseID & "," & Chr(39) & d("培训课程名称") & Chr(39) & "," _
                         & "#" & d("培训开始时间") & "#" & "," & d("培训多少小时") & "," _
                         & Chr(39) & d("培训老师") & Chr(39)

    SQL = "Insert Into " & tblName & " (" & filds _
                & ") VALUES(" & fildsValue & ")"

    mode = 1
    rsAdConn = fMod_tyk_01_rs产生(dbAddr, SQL, mode)

    Set rs = rsAdConn(0)  ' 注意:必须有set
    Set adConn = rsAdConn(1)

    '关闭数据库连接
    adConn.Close
    Set adConn = Nothing

    '第2部分:录入人员信息

End Sub

代码截图
5.png

Function fMod_01_获取课程ID()
    Rem>>
    Dim dbAddr
    Dim tblName
    Dim SQL
    Dim rsAdConn
    Dim rs
    Dim mode
    Dim adConn

    dbAddr = fMod_dz_01_数据库地址

    tblName = "02_培训课程"

    SQL = "SELECT 培训课程ID" & " from " & tblName

    mode = 2
    rsAdConn = fMod_tyk_01_rs产生(dbAddr, SQL, mode)

    Set rs = rsAdConn(0)  ' 注意:必须有set
    Set adConn = rsAdConn(1)

    Dim rsCount
    Dim nowTime
    Dim nian
    Dim courseID
    Dim maxIndex
    Dim existsNian

    rsCount = rs.RecordCount
    rs.Close

    nowTime = Now()
    nian = Year(nowTime)

    If rsCount < 1 Then
        courseID = nian * 10 ^ 4 + 1 '无记录则为本年第一次培训
    Else
        SQL = "SELECT MAX(培训课程ID)" & " from " & tblName
        Set rs = adConn.Execute(SQL)

        maxIndex = rs.Fields(0).Value '只有一条记录
        existsNian = CInt(Left(CStr(maxIndex), 4))
        If existsNian <> nian Then
            courseID = nian * 10 ^ 4 + 1 '无记录则为本年第一次培训
        Else
            courseID = maxIndex + 1
        End If
    End If

    fMod_01_获取课程ID = courseID

    '关闭数据库连接
    adConn.Close
    Set adConn = Nothing

End Function

代码截图
6.png

Part 4:部分代码解读

  1. SQL = "SELECT MAX(培训课程ID)" & " from " & tblName,获取该字段最大值,当无数据的时候,没试过会返回啥,尴尬

Ps:最近在使用Python进行一些UI方面的编程,主要使用Traitsui。讲真,Python简化很多,快去学吧,哈哈

- 本文为原创作品,如需转载,可加小编微信号learningBin

更多精彩,请关注微信公众号
扫描二维码,关注本公众号

公众号底部二维码.jpg

猜你喜欢

转载自blog.csdn.net/fourseasonbeans/article/details/80200557
今日推荐