请求调整Access VBA代码:实现表单按唯一键查询或新增记录
Access VBA 表单跳转逻辑优化方案
需求说明
点击cmdBtn按钮打开fDRout表单时,需实现:
- 若当前表单的
lnLocNo值在fDRout的数据源中存在,打开表单并显示匹配该编号的记录; - 若不存在,打开表单并自动将
lnLocNo值填入新记录的对应字段。
解决方案
1. 新增辅助函数
添加两个辅助函数,分别用于检查记录是否存在、判断表单是否加载:
' 检查lnLocNo是否在数据源中存在 Private Function IsLocNoExists(locNo As Variant) As Boolean Dim rs As Recordset Dim strSql As String ' 替换为fDRout表单绑定的实际表名 strSql = "SELECT COUNT(*) FROM tblDRout WHERE lnLocNo = " & locNo Set rs = CurrentDb.OpenRecordset(strSql) IsLocNoExists = (rs.Fields(0).Value > 0) rs.Close Set rs = Nothing End Function ' 判断表单是否已加载 Private Function IsLoaded(formName As String) As Boolean IsLoaded = (SysCmd(acSysCmdGetObjectState, acForm, formName) <> 0) End Function
2. 修改按钮点击事件代码
替换原cmdBtnRoute_Click事件代码为:
Private Sub cmdBtnRoute_Click() Const fName = "fDRout" Dim targetLocNo As Variant targetLocNo = Me.lnLocNo.Value ' 保存当前表单未提交的修改 If Me.Dirty Then Me.Dirty = False End If If Not IsNull(targetLocNo) Then If IsLocNoExists(targetLocNo) Then ' 记录存在,打开表单并筛选匹配记录 DoCmd.OpenForm fName, , , "[lnLocNo] = " & targetLocNo, , acDialog Else ' 记录不存在,打开表单进入新增模式并赋值 DoCmd.OpenForm fName, , , , acFormAdd, acDialog If IsLoaded(fName) Then Forms(fName).lnLocNo.Value = targetLocNo End If End If Else ' lnLocNo为空时直接打开表单 DoCmd.OpenForm fName, , , , , acDialog End If End Sub
注意事项
- 文本类型字段适配:如果
lnLocNo是文本类型,需给SQL语句和筛选条件中的值添加单引号,例如:strSql = "SELECT COUNT(*) FROM tblDRout WHERE lnLocNo = '" & locNo & "'" ' 打开表单的筛选条件对应改为 DoCmd.OpenForm fName, , , "[lnLocNo] = '" & targetLocNo & "'", , acDialog - 数据源表名替换:请将代码中的
tblDRout替换为fDRout表单实际绑定的数据源表名称。
内容的提问来源于stack exchange,提问作者n00dnutt
相关产品推荐
相关产品推荐

