【问题标题】:Error: too few Parameters. Expected 3...while executing SQL statement in Access错误:参数太少。预期 3...在 Access 中执行 SQL 语句时
【发布时间】:2014-06-28 01:09:58
【问题描述】:

我之前做过这个,只是在插入新记录之前测试表中是否已经存在记录。这基本上是我所做的,但是这次我得到了一个错误

Error: "3061 Too few parameters. Expected 2."

我试图非常具体(tblfromICPMS.Woid 而不仅仅是Woid)认为这可能会有所帮助,但这并没有真正产生影响。我得到了具体的线路

If rs.RecordCount = 0 Then

这是代码,其中ThisWoid、Analyte和ThisTestId是局部变量:

DIM rs As Object
strSQL = "SELECT tblfromICPMS.Woid, tblfromICPMS.Analyte, tblfromICPMS.TestID FROM tblFROMICPMS WHERE (tblFROMICPMS.woid = " & ThisWoid & ") AND (tblFROMICPMS.analyte = " & Analyte & ") AND (tblfromICPMS.Testid=" & ThisTestID & ") "
Set rs = CurrentDb.OpenRecordset(strSQL)
If rs.RecordCount = 0 Then
   "insert record"
End IF 

更新: 更新 cmets 中的 sqlstr 后,错误消息更改为 1,还包括 rs 的声明。为澄清起见,tblFromICPMS 是一个包含 Woid、Analyte 和 TestId 列的表。我检索了三个值并将它们存储在局部变量 ThisWoid、Analyte 和 ThisTestId 中。我想插入一条记录,但首先我必须查看它是否已存在于 tblfromICPMS 中。 ThisWoid 和 Analyte 也是字符串

【问题讨论】:

  • 你试过调试吗?恐怕,在您在此处发布的内容中,您没有引起错误的行。这是什么? (tblFROMICPMS.woid = ThisWoid)。什么是ThisWoid。不应该是(tblFROMICPMS.woid = " & ThisWoid & ")"吗?
  • 看看TabelfromICPMS.TestID。那应该是tblfromICPMS.TestID
  • 您是否在实际代码中连接该 sql 字符串?如果你单步执行,你会看到语句字面上是SELECT tblfromICPMS.Woid, tblfromICPMS.Analyte, TabelfromICPMS.TestID FROM tblFROMICPMS WHERE (tblFROMICPMS.woid = ThisWoid) AND (tblFROMICPMS.analyte = Analyte) AND (tblfromICPMS.Testid=ThisTestID) ,你想要像“WHERE (tblFromICPMS.woid = " & strVariable & ") AND " ` 这样的语句
  • 能否包含 rs 的声明?
  • 基本上,我们都同意你应该试试这个字符串 "SELECT tblfromICPMS.Woid, tblfromICPMS.Analyte, tblfromICPMS.TestID FROM tblFROMICPMS WHERE (tblFROMICPMS.woid = " & ThisWoid & ") AND (tblFROMICPMS.analyte = " & Analyte & ") AND (tblfromICPMS.Testid=" & ThisTestID & ") " 而且,如果你的任何条件与字符串进行比较,你需要在每一边加上一个单引号 "... ='" & var & "' and ..."

标签: sql ms-access vba


【解决方案1】:

首先,我会尝试将 rs 调暗为 RecordSet,而不是 Object。此外,插入消息框只是为了确保您的 SQL 字符串有意义:

DIM rs As Recordset
strSQL = "SELECT Woid, Analyte, TestID FROM tblFROMICPMS WHERE (woid = " & ThisWoid & ") AND (analyte = " & Analyte & ") AND (Testid=" & ThisTestID & ") "
msgbox strSQL
Set rs = CurrentDb.OpenRecordset(strSQL)
If rs.RecordCount = 0 Then
   "insert record"
End IF 

查看消息框结果是否为您提供任何关于问题所在的线索。通常,当 Access 不理解您的变量之一时会发生该错误。

别忘了,文本需要在你的 SQL 字符串中用单引号括起来,整数不需要。

【讨论】:

    猜你喜欢
    • 2018-07-09
    • 2011-07-23
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多