Access 2007运行时错误

时间:2011-06-16 18:23:15

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

我不确定这是否是发布此问题的正确网站,但此处就是......

在Access 2007中,我收到错误“运行时错误'3061':参数太少。预计这个VBA代码为1”:

Private Sub btnCheck_Click()

    Dim rs As Recordset
    Dim db As Database
    Dim id As String
    Dim query As String
    MsgBox ("one")
    Set db = CurrentDb()
    id = Me.UniqueID.Value
    query = "SELECT [Unique_ID] from tblPatients WHERE [Unique_ID] =" & id
    MsgBox (id)
    Set rs = db.OpenRecordset(query) <<<<<HIGHLIGHTED LINE

    If IsNull(rs) Then
        Me.lblCheck.Caption = "NEW"
    Else
        Me.lblCheck.Caption = "EXISTS"
    End If

End Sub

数据源是表,而不是查询。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:5)

Unique_ID中没有名为tblPatients的字段。如果您发布了所有代码,那么这是唯一可能的解释。

编辑:您的评论证实了我的怀疑:

  

我只是三重检查:P表名:tblPatients列名:唯一ID

您在代码中添加了一个下划线,该下划线在您的字段名称中不存在。你使用方括号是正确的,但正确的代码应该是:

query = "SELECT [Unique ID] from tblPatients WHERE [Unique ID] =" & id

请注意删除的下划线。或者(我会说,如果您处于设计的早期阶段),您可以将表格中的字段重命名为Unique_IDUniqueID,并为您节省大量的麻烦。< / p>

答案 1 :(得分:1)

很少有东西会导致这个错误。常见错误是拼写错误的表名和字段名。 我会检查tblPatients是否拼写正确,或者如果表链接到服务器连接,则不需要像dbo.tblPatients那样的先前后缀。 我们也假设id是一个数字,而不是一个文本字段,如果你没有正确的引号会导致错误。即。 它会改为阅读 query =“SELECT [Unique_ID] from tblPatients WHERE [Unique_ID] ='”&amp; id&amp; “';”

最后,尝试放置“;”就像我在上面那样做的那样。

答案 2 :(得分:1)

我建议您在代码中添加一个Debug.Print语句,如下所示:

query = "SELECT [Unique_ID] from tblPatients WHERE [Unique_ID] =" & id
Debug.Print "query: " & query

该建议的原因是Debug.Print会将您的SQL语句打印到立即窗口。 (您可以使用Ctrl + g键盘快捷键进入立即窗口。)然后,您可以查看要求OpenRecordset使用的已完成字符串。通常只是看到那个字符串(而不是试图想象它应该是什么样子)将让你发现问题。如果没有,您可以从立即窗口复制字符串并将其粘贴到新查询的SQL视图中...查询设计器可以帮助您查明语法错误...或者在这种情况下,我认为它可能提醒您哪个数据库引擎无法识别您的查询中的项目,因此必须将嫌疑人作为参数。如果该步骤仍然无法解决问题,您可以将字符串粘贴到Stack Overflow上的问题中。

最后,我认为你可能有一个IsNull(rs)的逻辑错误...因为rs已被声明为记录集,它永远不会是Null。在以下示例中,SELECT语句不返回任何记录。 Debug.Print语句在OpenRecordset之前和之后都显示IsNull(rs): False

Public Sub RecordsetIsNeverNull()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSql As String

    strSql = "SELECT * FROM tblFoo WHERE 1 = 2;"
    Set db = CurrentDb

    Debug.Print "IsNull(rs): " & IsNull(rs)
    Set rs = db.OpenRecordset(strSql)
    Debug.Print "IsNull(rs): " & IsNull(rs)

    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub

修改:根据Problem names and reserved words in Access查询是一个访问保留字。我实际上并不认为这是你的问题的原因,但建议你改变它...也许 strQuery