【问题标题】:Run time error 3021- no current record运行时错误 3021 - 没有当前记录
【发布时间】:2013-06-24 13:13:39
【问题描述】:

我想将查询结果链接到文本框,但出现此错误:这是我的代码:

Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT XValue, YValue,Wert FROM tb_DCM_Daten WHERE (FzgID=" & Forms!frm_fahrzeug!ID & " AND Name='" & List2.Value & "')")
Text10.Text = rst!XValue //error in this line

应该是返回 c.a 20 记录

为什么会出现此错误,我该如何解决?

【问题讨论】:

  • 重新排列您的代码,使您的 SQL 语句位于字符串变量中,并将其打印到即时窗口。这样你就可以看看有没有问题。如果没有什么明显的,那么输出 SQL 并将其放入查询中并验证是否有一条记录符合您的条件。

标签: vba ms-access ms-access-2010


【解决方案1】:

错误的一个可能原因是Name 是 Access 中的保留字,因此您应该使用

... & " AND [Name]='" & ...

您还可以在尝试使用rst!XValue 之前测试rst.EOF。也就是说,要验证您的查询是否至少返回一行,您可以添加代码

If rst.EOF Then
    MsgBox "The Recordset is empty."
End If

.OpenRecordset 呼叫之后立即。如果 Recordset 为空,那么您需要按照@GregHNZ 在上面的评论中的描述验证您的 SQL 语句。

【讨论】:

  • 感谢您的回答。我做到了,但没有帮助:/
  • eof 测试是救命稻草。
【解决方案2】:

通常,我会这样做。在 Access 中创建一个新查询,切换到 SQL View,将我的代码粘贴到那里,然后转到 Design >> Run。

SELECT XValue, YValue,Wert FROM [tb_DCM_Daten] WHERE [FzgID]=12 AND [Name]='ABC';

如果您的查询语法正确,您应该会看到结果,否则错误 mssg 会告诉您哪里错了。我曾经调试过比你的更复杂的查询,这就是我所做的方式。 如果仍然有错误,也许你应该尝试

Dim sql as String
sql = "SELECT...."
Set rst = CurrentDb.OpenRecordset(sql)

另一个可能的原因可能是您的表名。我只是想知道你的表名到底是什么?如果您的表格包含空格,您应该像这样 [DCM Daten]。

【讨论】:

    【解决方案3】:

    我想补充的另一件事可能会导致这种情况,即您返回一组具有“保留字”字段的结果集,例如:

    您的“客户”表的字段名称如下:

    Custnum  | Date | Custname
    

    我们知道日期字段是大多数数据库的保留字

    所以当你使用

    SELECT * FROM Customers
    

    这可能会返回“无当前记录”,因此请选择该表的所有字段,只需最小化您的字段选择,如下所示:

    SELECT custnum, custname FROM Customers
    

    【讨论】:

      【解决方案4】:

      在尝试了上面的解决方案无济于事后,我找到了另一个解决方案:Access表中的Yes/No字段不能为Null(参见allenbrowne.com/bug-14

      虽然我的情况略有不同,我只得到了“没有当前记录”。使用 GROUPBY 运行查询时出错,我的查询在临时消除是/否字段后工作。

      但是,我的 Yes/No 字段令人惊讶地不包含任何 Null。但是,故障排除让我发现了一个相关的错误,该错误确实用 Null Yes/No 值填充了我的查询结果。修复该相关错误消除了我的结果中的 Null Yes/No 值,从而消除了此错误。

      【讨论】:

        【解决方案5】:

        我在以下情况下遇到了同样的错误:

        在我的例子中,记录集返回了一条记录,其中包括一些具有 Null 值的字段。

        Dim rst As DAO.Recordset
        Set rst = CurrentDb.OpenRecordset("SELECT * FROM tbl WHERE (criteria)", dbOpenDynaset)
        Textbox1 = rst!field1 'error in this line - Non-Null value
        Textbox2 = rst!field2 'Null value
        Textbox3 = rst!field1 'Null value
        

        在打开 rst 并在分配之前查看 Locals 会按照我的预期显示记录集。尝试从此记录集中分配值时引发错误。

        解决此问题的方法是确保所有字段都包含非 Null 值。

        只是为未来的求职者发布这个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多