我不确定这是否是发布此问题的正确网站,但此处就是......
在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
数据源是表,而不是查询。任何帮助将不胜感激!
答案 0 :(得分:5)
表Unique_ID
中没有名为tblPatients
的字段。如果您发布了所有代码,那么这是唯一可能的解释。
编辑:您的评论证实了我的怀疑:
我只是三重检查:P表名:tblPatients列名:唯一ID
您在代码中添加了一个下划线,该下划线在您的字段名称中不存在。你使用方括号是正确的,但正确的代码应该是:
query = "SELECT [Unique ID] from tblPatients WHERE [Unique ID] =" & id
请注意删除的下划线。或者(我会说,如果您处于设计的早期阶段),您可以将表格中的字段重命名为Unique_ID
或UniqueID
,并为您节省大量的麻烦。< / 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 。