Ms access 3061 VBA错误-SQL查询“参数太少。应为1。”简单查询

Ms access 3061 VBA错误-SQL查询“参数太少。应为1。”简单查询,ms-access,vba,Ms Access,Vba,我有以下代码: Private Sub lst1Model_Operation_Click() Dim db As Database Dim sSQL As String Dim rst As Recordset Set db = CurrentDb sSQL = "SELECT * FROM qryOrder_Model_Operation_Value WHERE Model_Operation_ID = " & CInt(Me![lst1Model_Operation].

我有以下代码:

Private Sub lst1Model_Operation_Click()
Dim db As Database
Dim sSQL As String
Dim rst As Recordset

Set db = CurrentDb

    sSQL = "SELECT * FROM qryOrder_Model_Operation_Value WHERE Model_Operation_ID = " & CInt(Me![lst1Model_Operation].Value)

Debug.Print sSQL 'when pasted this into a query SQL, it works flawlessly.

Set rst = db.OpenRecordset(sSQL) 'error line

'some code here

rst.Close
Set db = Nothing
End Sub
我不知道该怎么办。Debug.Print看起来像:

SELECT * FROM qryOrder_Model_Operation_Value WHERE Model_Operation_ID = 748
正如我所说,如果我将Debug.Print粘贴到Access本身的查询中,它将生成所需的结果

我已尝试在值周围添加“”,但使用CInt已确保将其解析为整数。Model_Operation_ID还希望得到一个整数,否则它也无法在单独的查询中工作

编辑: qryOder_模型_操作_值如下:

SELECT tbl1Model_Operation.Model_Operation_ID, tbl1Model_Operation.Model_ID, tbl1Model_Operation.Operation_Value_ID, tbl2Operation_Value.Operation_Name_ID, tbl3OperationsList.Operation_Name, tbl1Order_Model.Quantity AS [Počet párov], tbl1Order_Model.Order_ID
FROM tbl3OperationsList INNER JOIN (tbl2Operation_Value INNER JOIN (tbl1Model_Operation INNER JOIN tbl1Order_Model ON tbl1Model_Operation.Model_ID = tbl1Order_Model.Model_ID) ON tbl2Operation_Value.Operation_Value_ID = tbl1Model_Operation.Operation_Value_ID) ON tbl3OperationsList.Operation_ID = tbl2Operation_Value.Operation_Name_ID;
试着这样做:

Set rst = db.OpenRecordset(sSQL,dbOpenTable)


确保Access了解您希望rst是DAO.Recordset而不是ADODB.Recordset:

'将rst设置为记录集 将rst设置为DAO.Recordset ADO和DAO对象模型都包含记录集对象。虽然在某些方面相似,但它们不能互换使用


当Access VBA项目引用包含ADO ActiveX数据对象的版本并且该引用的优先级高于DAO引用时,Dim rst As记录集将为您提供ADODB.Recordset。通过始终使用DAO或ADODB(视情况而定)限定您的记录集声明,避免不受欢迎的意外事件。

我将在问题本身中添加它,以便格式保持可读性。查询本身看起来正常。。。但是您正在查询一个可能需要参数的访问查询?现在问题本身就是qryOrder_Model_Operation_值。我得到以下错误:在dbOpenTable上,而在dbOpenSnapshot上,13-类型不匹配:/。这样更好。告诉我你的数据库是什么?是阿克斯女士吗?我们可以从OP中删除mysql标记吗?抱歉@Alex,现在删除了mysql标记。事实上,我的数据库是MS Access。不客气。这似乎不能解释3061错误。但是,当你给亚历克斯看3011错误时,那是一个致命的泄露-net检测可变函数的参数数量和类型的方式带来了很多惊喜:-
Set rst = db.OpenRecordset(sSQL,dbOpenSnapshot)