MS Access 2007使用VBA打开独立窗体到特定记录
问题描述:
我有两种形式,一种是数据输入形式,另一种是列出数据库中所有记录的摘要形式。在摘要表单上有一个列出所有记录的列表框。我希望用户能够从列表框中选择一条记录并使用命令按钮,打开第二个表单到特定记录。我已经得到了这个工作,使用特定的领域,在一个案例中“姓名”,使用下面的代码:MS Access 2007使用VBA打开独立窗体到特定记录
DoCmd.OpenForm "frmEditAddPerson", acNormal, ,"[PersonName]='" & Me.listPeople.Value & "'"
,但是当我意识到两个人可以有相同的名字,我决定这是有道理的使用PersonID是主键,其数据类型是“AutoNumber”。我似乎无法得到这个工作:
DoCmd.OpenForm "frmEditAddPerson", acNormal, "[PersonName] = " & SelectPersonID
注意,我收到来自一个隐藏的列从Control拉SelectedPersonID。我确认我试图通过在试图调试时在MessageBox中显示AutoNumber字段的数字值来得到正确的值。
对于这个方法/命令的WHERE参数,我知道你应该在引号中包含字符串值,不包含整数,并且在SQL语句中包含“#”的日期。我试过将SelectedPersonID作为一个字符串和一个整数进行分离,并且仍然无法获得上述工作。我甚至尝试了以下方法以确保:
DoCmd.OpenForm "frmEditAddPerson", acNormal, "[PersonName] = " & CInt(SelectPersonID)
每次我得到“类型不匹配”。自动编号字段的特殊之处在于它不能用于这样的事情,还是需要以特殊的方式处理?
答
如果PersonID
是自动编号主键,请在第四个参数OpenForm
中参考(WhereCondition)。您的OpenForm
示例仍包括PersonName
而不是PersonID
。
此外,在您的最后两个示例中,PersonID在第三个参数OpenForm
中引用(FilterName)。
DoCmd.OpenForm "frmEditAddPerson", acNormal, , "[PersonID] = " & SelectPersonID
它可以更容易地跟踪哪些选项是通过包括选项名称。
DoCmd.OpenForm FormName:="frmEditAddPerson", View:=acNormal, _
WhereCondition:="[PersonID] = " & SelectPersonID
谢谢!你的最后一个建议帮助我清理了我的代码,现在我没有收到错误,但是当它启动表单时,它将它启动到空白/新记录而不是被选中的记录。 – smk081 2014-10-29 22:20:52
在设计视图中打开该窗体,检查其属性表上的数据选项卡。找到数据输入属性。如果是,请将其更改为No. – HansUp 2014-10-29 22:23:28
好吧,看起来像是最后一块。数据输入=是表示该表单将只允许添加新记录。它不会显示现有记录。 – HansUp 2014-10-29 22:34:15