Access-培训管理系统-05-清空界面及下拉列表实现(下篇)

微信公众号原文

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

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

Part 1:本篇目标

  1. 之前介绍了界面及数据库部分
  2. 今天继续上一篇的内容,介绍下拉列表实现

1.png

Part 2:代码整体逻辑建立

  1. 本窗体中,有两个组合框,分别获取其对应的rsRecordset
  2. 窗体中显示对应的rs

入口Sub

Sub sMod_sr_02_下拉列表(frmName)
    Rem>>
    Rem>>
    Dim arr
    Dim tblName
    Dim dbAddr
    Dim i
    Dim fild
    Dim searchC
    Dim SQL
    Dim ctrlName
    Dim mode
    Dim rsAdConn
    Dim rs
    Dim adConn

    arr = Array("培训课程名称", "培训老师")

    tblName = "01_常数项"
    dbAddr = fMod_dz_01_数据库地址

    For i = 0 To UBound(arr) Step 1
        fild = arr(i)
        searchC = fild & " is Not Null"
        SQL = "Select distinct " & fild & " From " & tblName & " Where (" & searchC & " )"
        ctrlName = fild
        mode = 2
        rsAdConn = fMod_tyk_01_rs产生(dbAddr, SQL, mode)

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

        Call sMod_tyk_02_组合框下拉列表(rs, adConn, frmName, ctrlName)

        rs.Close

    Next i

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

End Sub

代码截图
1.png

Part 3:获取rs

Function fMod_tyk_01_rs产生(dbAddr, SQL, Optional mode = 1)
    Rem>>通过运行SQL,产生rs
    Rem>>两种运行方式:
    Rem>>mode=1Set rs = adConn.Execute(SQL);
    Rem>>mode=2,rs.Open SQL, adConn, adOpenKeyset, adLockOptimistic

    Dim adConn As ADODB.Connection  '连接
    Set adConn = New ADODB.Connection

    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset

    With adConn
        .Provider = "Microsoft.ACE.OLEDB.12.0;"
        .Open "Data Source=" & dbAddr
    End With

    If mode = 1 Then
        Set rs = adConn.Execute(SQL)
    ElseIf mode = 2 Then
        rs.Open SQL, adConn, adOpenKeyset, adLockOptimistic
    End If

    fMod_tyk_01_rs产生 = Array(rs, adConn)

End Function

代码截图
2.png

Part 4:rs更新下拉列表

Sub sMod_tyk_02_组合框下拉列表(rs, adConn, frmName, ctrlName)
    Rem>>
    Rem>>
    Dim rsCount
    Dim frm
    Dim cbo
    Dim j

    rsCount = rs.RecordCount

    Set frm = Forms(frmName)
    Set cbo = frm.Controls(ctrlName)

    cbo.RowSource = ""
    cbo.Value = ""

    If rsCount > 0 Then
        rs.MoveFirst
        cbo.RowSource = ""
        For j = 1 To rs.RecordCount
            cbo.AddItem rs.Fields(0) & ""    '使用该方法需先设置 行来源类型 为 值列表
            rs.MoveNext
        Next j
    End If

End Sub

代码截图
3.png

Part 5:部分代码解读

  1. 对数据库的操作套路
    • 连接数据库
    • 获取SQL
    • 执行SQL,得到rs
    • 关闭数据库连接
  2. cbo.AddItem rs.Fields(0) & "",官方解释如下:
    • cbo.AddItem(Item, Index),其中Item为字符串,这也是上面代码中连接一个空的字符的原因
    • Index省略,默认加到列表的尾部
  3. cbo.RowSource = ""将选项清空
  4. cbo.Value = ""将取值清空

AddItem
4.png

RowSource
5.png

  • 接下来就是下拉列表实现了,今天就讲到这里了,且听下回分解
  • 因为这系列,是一边写程序,一边写文章,所以后期可能存在对先前发表的文章进行更改
  • 有的时候做一个系统就是这样,会返回去改动,所以说前期想的越周到,返工的可能性就越低

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

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

公众号底部二维码.jpg

猜你喜欢

转载自blog.csdn.net/fourseasonbeans/article/details/79630658