首页 > 其他分享 >ACCESS 说说组合框的应用

ACCESS 说说组合框的应用

时间:2023-08-15 09:02:22浏览次数:46  
标签:Sub 应用 组合 仓库 列表 ACCESS RowSource 设置 属性

在说应用之前,我觉得很有必要先讲讲组合框的一些常用属性:

1.Dropdown : 显示下拉菜单.这个属性可以在VBA下主动显示出来,但如果要隐藏它,只能通过转移焦点来达成.

ComboObj.Dropdown

2.AutoExpand : 这是个布尔值,默认为True.一般会在Load事件中设置好.当用户输入的值与列表中的值相似时,组合框将会自动匹配并上屏

ComboObj.AutoExpand = False

光看代码可能理解不来,我给个动画吧:

下面这种是值为True(默认)时的情形.可以看到,我只打了个"布"字,后面就自动补全为"布依族".这种设计很方便,但是如果有些场合是不适用的.比如用SQL智能查询时,拿到的结果可能有多个,如果这个功能打开了,会导致结果只有一个显示出来.所以此时这个功能要设置成False,后面会详细讲到.

 

下面是我在Load事件中设置为False的情形.可以看到,补全功能被关闭了.

3.ListIndex.使用 ListIndex 属性,设置组合框中选择菜单中的选项。 只读 Long。此属性只能通过使用宏或 Visual Basic 使用.它的下标是从0开始的.还有,使用它有个前提,就是组合框必须要先获得焦点,不然就会提示"您错误地使用了ListIndex"

4.RowSource.就是 数据 选项卡下的 行来源 属性,它是用来设置下拉菜单的.它的表达方式受 下面一个属性 行来源类型决定,这是官方资料:ComboBox.RowSource 属性 (Access) | Microsoft Learn

 一般用法:

Me.Combo0.RowSource = "Select [民族] FROM 民族"

5.ControlSource 与上面的 RowSource 属性不同.使用 ControlSource 属性可指定控件中显示的数据。 可以显示和编辑绑定到表、查询或 SQL 字符串/语句中的字段的数据。 您还可以显示表达式的结果。 读/写 String。ComboBox.ControlSource 属性 (Access) | Microsoft Learn

我当时开始玩ACCESS时,经常被ControlSource 与RowSource 搞混,所以摆在这里,让大家看清楚.

6.说说下面两个图片中这几个属性的作用.

 

 

 列数: 设置下拉菜单有几列.注意: 设置几列是一回事,显示几列又是另外一回事,也就是说有些列可以设置成不显示出来,往下看

列宽: 如果我列数设置成了4,然后列宽这里设置成: 0CM;0CM;2CM;0CM  大家想一想,它会显示出来几列? 答案是1列.宽度设置成0的列都会被隐藏起来

列标题: 就是表头,像这样:

 列表行数: 这个似乎没什么可说的,就是列表最多显示多少行记录

列表宽度:字面意思

绑定列: 当用户选中菜单时,返回第几值的值. 注意,这里是从1开始.而它的另外一个属性Column则是从0型

限于列表: 就是只能选择菜单内的选项,不允许用户再输入其他值

允许编辑值列表:  当  行来源类型  属于  值列表  时,用户可以往列表里追加选项.其他情况下不支持.如下图,如果这个选项有打开,会显示个编辑的图标:

 

 

 

 

下面来做几个常见的组合框的应用.

一.用SQL语句来智能提示记录.我们还是用 民族 这个表来做.

  需求:

  1.在组合框内输入关键时,智能过虑下拉菜单.

  2.用户可以按上下方向键来选择数据.这个需求看似有点多余了,因为我们日常中用到的,都是可以按上下键来选择.但是在这个场景下,它是有问题的.因为我们会用到Change事件,按上下键时,选项会自动上屏,再次触发change事件.所以就要处理这个按键的问题了.

以下是全部代码与效果展示:

Option Compare Database
Dim cf As Boolean   '开关变量,这里是局部变量,只能在本窗体内可见
Private Sub Combo0_Change()
    If Not cf Then Exit Sub '用一个开关变量来决定是否进行过虑
    Dim txt As String
    txt = Trim(Me.Combo0.Text)
    Me.Combo0.RowSource = "Select [民族代码],[民族] FROM 民族 WHERE 民族代码 & '|' & 民族 like '*" & txt & "*'"     '设置匹配规则
    Me.Combo0.Dropdown  '更新并显示下拉菜单
End Sub

Private Sub Combo0_KeyDown(KeyCode As Integer, Shift As Integer)
    cf = Not (KeyCode = vbKeyUp Or KeyCode = vbKeyDown)     '当用户按下 上下  方向键时,设置开关为关闭状态,避免执行Change事件
End Sub

Private Sub Form_Load() '初始化变量
    cf = True
    Me.Combo0.AutoExpand = False
    Me.Combo0.RowSource = "Select [民族代码],[民族] FROM 民族"
End Sub

我这里绑定的列是第一列.所以会返回一个民族代码,而不是民族这个字段

 

  第二个场景.在数据表中应用组合框.本例无代码,全靠操作即可完成.也可以不用SQL语句,直接设置成值列表

我有一个 员工  表,设计视图如下:

 效果如下:

 

 第三个场景: 这个场景严格来说应该与组合框无关,算是技巧吧.比如我们做了一个可以筛选部门的功能,如果是用 值列表 直接把值写死了,这个没什么难度,但是后期维护麻烦.所以我们一般是用SQL来做,比如:

Select 部门编号,部门 From 部门;

 这也不难,对吧.但是,大家有没有想过,如果我要显示全部的部门怎么办?部门里面也没有全部这个值啊,怎么办?留空的话,先不说用户能不能理解吧,起码,它就很丑,对不对?所以我们把这条SQL稍微改造一下,变成:

 

 

Select 0,"全部" From 部门
Union 
Select 部门编号,部门 From 部门;

 第四个场景.对Column属性的应用.这个属性是用来取当前选项的其他列的值的.上面例子中,多都使用到了 多列  的方式来展现下拉菜单,有些甚至还是隐藏的,要取他们的值,就要用到column这个属性

  在开始之前,我还要说一个组合框的属性: columns 这货就是用来统计有多少列的,不要跟上面这个不带S的属性搞混.鬼知道我经历了什么才会跟你们讲这个属性.

  取上一个图为例,当用户选择了"全部" 菜单时,

  me.combo0.value => "全部"

  me.combo0.column(0) => 0  .这里注意一下,column的下标是从0开始的

  me.combo0.column(1) => "全部"

  ....以此类推

我在刚刚开始用这个控件时,都是很粗糙的下拉用一列展现数据,后来我发现,当我选中 "人事部"时,我还要去取它的"部门编号",然后用DLookup去取...真是太傻了.直到我学会了用column,我直接把有用的数据直接拉到选项里.需要的就让它显示,不需要的就隐藏它,真是太爽了

第五个场景: 在多个组合框之间进行联动,最常见的是省市区选择模块,比如:

 这个图是我网上找的,因为我并不给写这么复杂的例子[狗头].这种联动多发生在上下级,有所属关系的场景中.

我以我开发过程中的仓库为例,来为大家做个演示吧

 表设计如下:

 

 设计思路:

1.设置下拉菜单显示为2列,分别是WHID,仓库名称,列宽设置为 0,4  .绑定第2列(这里看不明白同学,上面有讲过了)

 

2.主仓库肯定是不包含子仓库的,所以我得把主仓库分离出来,也就是把 父级ID=2 的记录提取出来.设置主仓库的组合框控件的行记录来源设置为:

SELECT WHID, 仓库名称 FROM 仓库列表 WHERE 启用状态=-1 and 父级ID=2 ORDER BY WHID; 

3.设置子仓库.子仓库的联动来源于主仓库的变化,所以会使用到主仓库"更新后"事件

 

Private Sub cpwh_AfterUpdate()
    '获得仓库前缀
    iWHID = cpwh.Column(0)    '拿到主仓库的ID
    '设置子仓库
    cpwh2.Value = Null
    '按不同的仓库设置不同的联动数据
    If cpwh.Value = "成品仓" Or cpwh.Value = "半成品仓" Then
        cpwh2.RowSource = "SELECT 客户名称 from 客户列表 where 启用状态=-1"
    Else
        cpwh2.RowSource = "SELECT 仓库名称 from 仓库列表 where 启用状态=-1 and 父级ID=" & iWHID
    End If
    cpwh2.Requery  '刷新控件数据
End Sub

以上就是今天的内容.如果有写得不对的地方,请大家多多指教.后面如果有其他新应用或者技巧,我再补充上来

标签:Sub,应用,组合,仓库,列表,ACCESS,RowSource,设置,属性
From: https://www.cnblogs.com/yoooos/p/17628588.html

相关文章

  • 字节码的终极应用-GitHub高星开源APM项目之Pinpoint
    大家好,我们前面的章节javaagent以及一些字节码修改框架ASM和Javassist,以及他们的一些简单的应用场景.今天重点给大家介绍一款github上开源的APM分布式链路监控产品--Pinpoint.Pinpoint是什么?Pinpoint是一个开源的APM(ApplicationPerformanceManagement/应用性能管理......
  • 抽象类在项目中的实际应用
    一.抽象类和接口的区别?1.接⼝的⽅方法默认是public,所有⽅方法在接⼝口中不不能有实现(Java8开始接⼝口⽅方法可以有默认实现),⽽而抽象类可以有⾮非抽象的⽅方法。2.接⼝口中除了了static、final变量量,不不能有其他变量量,⽽而抽象类中则不不⼀一定。3.⼀一个类可以实现多个接⼝口,但......
  • 如何用随机方法求解组合优化问题(三)
    局部搜索应用:百万皇后问题皇后问题皇后问题:在一个\(n\timesn\)的棋盘上,每行每列有且只有一个皇后棋子,每对角线至多一个皇后棋子。如果使用回溯法,计算10皇后、20皇后问题还是可行的。但是当皇后数增加到一百万个时,又该如何求解呢?局部搜索算法用于求解组合优化问题,而皇后......
  • 智慧工地平台的技术应用:无线传感器、人脸识别和云计算
    智慧工地云平台源码 智慧工地源码智慧工地是指通过信息化技术、物联网、人工智能技术等手段,对建筑工地进行数字化、智能化、网络化升级,实现对施工全过程的实时监控、数据分析、智能管理和优化调控。智慧工地的建设可以提高工地的安全性、效率性和质量,降低施工成本,是建筑行业数字化......
  • 深入解析Spring的IOC与AOP及其在项目中的应用
    推荐阅读「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间https://drive.uc.cn/s/2aeb6c2dcedd4AIGC资料包https://drive.uc.cn/s/6077fc42116d4https://pan.xunlei.com/s/VN_qC7kwpKFgKLto4KgP4Do_A1?pwd=7kbv#https://yv4kfv1n3j.feishu.cn/docx/MRyxdaq......
  • 应用拖拽式表单设计器,实现提效,创造增值价值!
    当前,应用传统的表单制作方式效率低下,满足不了日益繁杂的业务需求。这也让很多用户朋友非常头疼,迫切需要采用理想的办公软件实现高效率发展。在低代码发展时代,可以应用拖拽式表单设计器的优势和功能特点,帮助客户解决这些棘手的问题,从而实现提质增效,创造可观的市场价值。当然,低代码......
  • 线下活动 | 谷歌云 AI:探索人工智能时代 跨境电商的应用趋势
    所有跨境人看过来!AI+跨境电商线下活动,你值得拥有!赶快报名参与吧!主题:谷歌云AI:探索人工智能时代跨境电商的应用趋势时间:8月30日周三13:30——8月30日周三17:30地点:广州番禺报名链接:https://cloud-ace.cn/20230830-guangzhou-offline-event-retail/01.活动流程13......
  • 多功能杆在智慧农业中的应用
    随着农业现代化发展,农业生产和管理不断运用越来越多新技术、新设施,以提高农业生产的综合效率、产品质量,降低管理经营成本。诸如数字化监测、物联网管理、5G远程控制,以及本次我们为大家介绍的多功能智慧杆系统。  多功能智慧杆拥有广泛的场景适用性优点,可以针对市政、街道、......
  • 父子关系旋转应用
    想要让这个转起来,直接设置摄像机不是很好可以设置一个空对象,然后把摄像机的父级设置为空对象把空对象的3D属性打开,修改Y值旋转的时候,摄像机也会跟着旋转......
  • 用uniapp开发打包多端应用完整指南
    一、uni-app项目介绍用uni-app开发多端项目,一套代码可同时打包出各端小程序、h5和app,uni-app支持通过HBuilderX可视化界面和vue-cli命令行两种方式创建项目,下面示例项目采用HBuilderX可视化界面的方式创建,cli项目可参考uni文档,大部分流程都是通用的。项目结构:├──common......