【问题标题】:MS Access 2007 Open Separate Form to Specific Record Using VBAMS Access 2007 使用 VBA 打开单独的表单到特定记录
【发布时间】:2014-12-25 19:19:56
【问题描述】:

我有两种形式,一种是数据输入表,另一种是汇总表,其中列出了数据库中的所有记录。在汇总表上有一个列出所有记录的列表框。我希望用户能够从列表框中选择一条记录并使用命令按钮打开第二个表单到特定记录。我已经通过使用特定字段(在一种情况下为“名称”)使用以下代码完成了这项工作:

DoCmd.OpenForm "frmEditAddPerson", acNormal, ,"[PersonName]='" & Me.listPeople.Value & "'"

但是当我意识到两个人可以有相同的名字时,我认为使用作为主键的 PersonID 并且它的数据类型是“AutoNumber”是有意义的。我似乎无法让它工作:

DoCmd.OpenForm "frmEditAddPerson", acNormal, "[PersonName] = " & SelectPersonID

注意,我通过从隐藏列中的 ListBox 中拉取 SelectedPersonID 来获取它。我确认我在尝试调试时通过在 MessageBox 中显示它来获得正确的 AutoNumber 字段的数值。

对于此方法/命令的 WHERE 参数,我知道您应该在引号中包含字符串值,不包含整数,以及带有“#”的日期,就像在 SQL 语句中一样。我已经尝试将 SelectedPersonID 作为字符串和整数进行 delcaring,但我仍然无法使上述内容正常工作。为了确定,我什至尝试了以下方法:

DoCmd.OpenForm "frmEditAddPerson", acNormal, "[PersonName] = " & CInt(SelectPersonID)

每次我得到“类型不匹配”。 AutoNumber 字段在某种意义上是特殊的,它不能用于这样的事情,还是需要以特殊方式处理?

【问题讨论】:

    标签: ms-access vba ms-access-2007


    【解决方案1】:

    如果 PersonID 是自动编号主键,请在第四个 OpenForm 参数 (WhereCondition) 中引用它。您的 OpenForm 示例仍然包括 PersonName 而不是 PersonID

    此外,在您的最后两个示例中,PersonID 在第三个 OpenForm 参数 (FilterName) 中被引用。

    DoCmd.OpenForm "frmEditAddPerson", acNormal, , "[PersonID] = " & SelectPersonID
    

    通过包含选项名称可以更轻松地跟踪哪个选项是哪个选项。

    DoCmd.OpenForm FormName:="frmEditAddPerson", View:=acNormal, _
        WhereCondition:="[PersonID] = " & SelectPersonID
    

    【讨论】:

    • 谢谢!您的最后一个建议帮助我清理了一堆代码,现在我没有收到错误,但是当它启动表单时,它会将它启动到空白/新记录而不是选择的记录。
    • 在设计视图中打开该表单,检查其属性表上的数据选项卡。找到数据输入属性。如果是,则改为否。
    • 好的,看起来那是最后一块了。数据输入 = 是意味着表格将只允许添加新记录。它不会显示现有记录。
    • 非常感谢 - 我在这一期上浪费了不少时间!
    • 您能想到为什么我的表单的 DataEntry 属性会自行更改的原因吗?我注意到在测试期间每隔一段时间,它就会变回 =“是”,当我单击上面描述的按钮时,它会恢复为新记录。我也有一个新记录按钮,它只是启动相同的表单以添加新记录 - 但我没有明确设置表单的 DataEntry 属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多