You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求调整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:58:18