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

Access组合框:输入项不在列表时从预留供应商表添加(带搜索)

实现组合框无匹配项时从潜在供应商列表选择添加的功能

核心思路

利用Access组合框的NotInList事件(输入内容不在列表时触发),弹出带实时搜索的潜在供应商选择窗体,选中后将供应商信息插入到原供应商表,再刷新原组合框的行源并定位到新添加的项。


步骤1:修正原有实时搜索代码

先修正原代码中变量名的笔误(source应为sSource1),确保实时搜索功能正常:

Option Compare Database

Dim sSource1 As String

Private Sub Form_Load()
    ' 移除行源中的分号,提取基础SQL语句
    sSource1 = Replace(Me.Suplier.RowSource, ";", "")
End Sub

Private Sub Suplier_Change()
    ' 调用实时过滤函数,实现输入时动态筛选组合框列表
    Call filtercomboasyoutype(Me.Suplier, sSource1, "supliername")
End Sub

步骤2:创建潜在供应商选择窗体

新建窗体frmPotentialSuppliers,添加一个组合框cboPotentialSearch,配置属性:

  • 行来源:SELECT PotentialID, PotentialName FROM PotentialSuppliers(替换为你的潜在供应商表字段)
  • 列数:2
  • 绑定列:1
  • 列宽:0cm;5cm(隐藏ID列,仅显示供应商名称)
  • 限制列表:Yes

为该窗体添加实时搜索代码:

Option Compare Database

Dim sPotentialSource As String

Private Sub Form_Load()
    ' 初始化潜在供应商列表的基础SQL
    sPotentialSource = "SELECT PotentialID, PotentialName FROM PotentialSuppliers"
    Me.cboPotentialSearch.RowSource = sPotentialSource
End Sub

Private Sub cboPotentialSearch_Change()
    ' 实时过滤潜在供应商列表
    Call filtercomboasyoutype(Me.cboPotentialSearch, sPotentialSource, "PotentialName")
End Sub

步骤3:实现无匹配时的弹窗选择与添加功能

在原组合框的NotInList事件中编写逻辑,处理输入不在列表的情况:

Private Sub Suplier_NotInList(NewData As String, Response As Integer)
    Dim strSelectedID As String
    Dim strSelectedName As String
    
    ' 禁用默认的"不在列表中"错误提示
    Response = acDataErrContinue
    
    ' 弹出潜在供应商选择窗体(模态对话框,等待用户操作)
    DoCmd.OpenForm "frmPotentialSuppliers", , , , , acDialog
    
    ' 判断用户是否选中了潜在供应商
    If Not IsNull(Forms!frmPotentialSuppliers!cboPotentialSearch) Then
        ' 获取选中项的ID和名称(注意列索引从0开始)
        strSelectedID = Forms!frmPotentialSuppliers!cboPotentialSearch.Column(0)
        strSelectedName = Forms!frmPotentialSuppliers!cboPotentialSearch.Column(1)
        
        ' 转义单引号避免SQL注入问题
        strSelectedID = Replace(strSelectedID, "'", "''")
        strSelectedName = Replace(strSelectedName, "'", "''")
        
        ' 将选中的潜在供应商插入到正式供应商表
        CurrentDb.Execute "INSERT INTO suplier (suplierid, supliername) VALUES ('" & strSelectedID & "', '" & strSelectedName & "')"
        
        ' 刷新原组合框的行源,显示新添加的供应商
        Me.Suplier.RowSource = sSource1
        Me.Suplier.Requery
        
        ' 将原组合框定位到新添加的供应商
        Me.Suplier = strSelectedID
        Me.Suplier.Text = strSelectedName
    End If
    
    ' 关闭潜在供应商选择窗体
    DoCmd.Close acForm, "frmPotentialSuppliers"
End Sub

注意事项

  1. 确保filtercomboasyoutype函数能正确生成过滤后的SQL,示例逻辑应为:在基础SQL后追加WHERE [字段名] LIKE '*" & 组合框文本 & "*'(Access SQL使用*作为通配符)。
  2. 如果潜在供应商的ID是自动编号类型,需调整INSERT语句,去掉ID字段的插入逻辑。
  3. 测试时需确保用户对suplier表和PotentialSuppliers表有读写权限。

内容的提问来源于stack exchange,提问作者Fredi Bineri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:26:10