我有两个表单,一个是数据输入表单,另一个是汇总表单,列出了数据库中的所有记录。在摘要表单上有一个列出所有记录的列表框。我希望用户能够从列表框中选择一条记录并使用命令按钮,打开第二个表单到特定记录。我使用特定字段完成了这项工作,在一个案例“名称”中,使用下面的代码:
DoCmd.OpenForm "frmEditAddPerson", acNormal, ,"[PersonName]='" & Me.listPeople.Value & "'"
但是当我意识到两个人可能有相同的名字时,我认为使用作为主键的PersonID并且其数据类型是“AutoNumber”是有意义的。我似乎无法让这个工作:
DoCmd.OpenForm "frmEditAddPerson", acNormal, "[PersonName] = " & SelectPersonID
注意,我通过从隐藏列中的ListBox中提取它来获取SelectedPersonID。我确认我在尝试调试时通过在MessageBox中显示AutoNumber字段的数值来更正。
对于这个方法/命令的WHERE参数,我知道你应该在引号中包含String值,没有整数,并且在SQL语句中包含带有“#”的日期。我已经尝试将SelectedPersonID作为字符串和整数进行delcaring,我仍然无法使上述工作。我甚至试过以下只是为了确定:
DoCmd.OpenForm "frmEditAddPerson", acNormal, "[PersonName] = " & CInt(SelectPersonID)
每次我收到“类型不匹配”。自动编号字段是否特殊,因为它不能用于此类内容或是否需要以特殊方式处理?
答案 0 :(得分:3)
如果PersonID
是自动编号主键,请在第四个OpenForm
参数( WhereCondition )中引用它。您的OpenForm
示例仍然包含PersonName
而不是PersonID
。
此外,在最后两个示例中,PersonID在第三个OpenForm
参数( FilterName )中被引用。
DoCmd.OpenForm "frmEditAddPerson", acNormal, , "[PersonID] = " & SelectPersonID
通过包含选项名称,可以更容易地跟踪哪个选项。
DoCmd.OpenForm FormName:="frmEditAddPerson", View:=acNormal, _
WhereCondition:="[PersonID] = " & SelectPersonID