如何使 MS Access 运行 查询焦点丢失事件并采取相应措施

How to make MS Access run a query on focus lose event and take actions accordingly

我正在为我们的数据输入人员创建一个小型 Access 数据库。我们的主数据库是 mysql,但由于易于使用,我们正在创建一个 Access 数据库,使他们更容易输入数据。我已经完成了大部分工作,但仍被这个问题困扰(我知道如何在 mysql+php 中解决)请原谅我的无知,但我才刚刚开始使用 MS Access。

我有两个 tables - ClientPhones 和 sales。 ClientPhones table 有 phone, clientid 字段。 sales table 有 salesid、clientid、date 等字段。

我还有一个表格,其中包含销售的所有相关字段 table。我想在该表单中添加一个新字段 phone_no。当用户输入数字并发生焦点丢失事件时,我可以访问 运行 对客户端 table 的查询,以查看 phone 数字是否存在于 3 [=23] 中的任何一个中=] 数字字段。如果找到具有该 phone 号码的客户,则应填充客户 ID,否则应显示用于输入客户详细信息的新表格。

这可以通过 MS 访问实现吗?还是我做错了?

使用文本框的更新后事件检索与用户输入的 phone 号码匹配的 clientid

如果找到 clientid,将其存储在绑定到 clientid 的文本框中。

如果未找到匹配项,询问用户是否要添加新客户端,如果他们回答是,则打开该表单。

此代码大纲假定 txtSearchPhone 是用户输入目标 phone 号码的文本框名称,txtClientId是你要存放的文本框的名字clientid.

Private Sub txtSearchPhone_AfterUpdate()
    Dim varClientId As Variant
    Dim strCriteria As String

    strCriteria = "[phone]='" & Me.txtSearchPhone.Value & "'"
    Debug.Print strCriteria '<-- inspect this in Immediate window; Ctrl+g will take you there
    varClientId = DLookup("clientid", "ClientPhones", strCriteria)
    If IsNull(varClientId) Then
        If MsgBox("Add new user?", vbYesNo) = vbYes Then
            'DoCmd.OpenForm ... (see Access help topic)
        End If
    Else
        Me.txtClientId.Value = varClientId
    End If
End Sub

确保 txtSearchPhone 中的文本不包含单引号字符 ('),因为如果包含,DLookup 会中断。您可以使用文本框的验证规则 and/or Before Update 事件来确保不存在单引号。