vba
  • ms-access
  • access-vba
  • ms-access-2007
  • 2014-10-29 120 views 2 likes 
    2

    我有两种形式,一种是数据输入形式,另一种是列出数据库中所有记录的摘要形式。在摘要表单上有一个列出所有记录的列表框。我希望用户能够从列表框中选择一条记录并使用命令按钮,打开第二个表单到特定记录。我已经得到了这个工作,使用特定的领域,在一个案例中“姓名”,使用下面的代码: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) 
    

    每次我得到“类型不匹配”。自动编号字段的特殊之处在于它不能用于这样的事情,还是需要以特殊的方式处理?

    回答

    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 
    
    +0

    谢谢!你的最后一个建议帮助我清理了我的代码,现在我没有收到错误,但是当它启动表单时,它将它启动到空白/新记录而不是被选中的记录。 – smk081 2014-10-29 22:20:52

    +1

    在设计视图中打开该窗体,检查其属性表上的数据选项卡。找到数据输入属性。如果是,请将其更改为No. – HansUp 2014-10-29 22:23:28

    +0

    好吧,看起来像是最后一块。数据输入=是表示该表单将只允许添加新记录。它不会显示现有记录。 – HansUp 2014-10-29 22:34:15

    相关问题