运行时错误3021-没有当前记录

时间:2013-06-27 06:46:22

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

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

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记录

为什么我会收到此错误,如何解决?

5 个答案:

答案 0 :(得分:10)

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

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

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

If rst.EOF Then
    MsgBox "The Recordset is empty."
End If
.OpenRecordset电话后立即

。如果Recordset 为空,那么您需要在上面的评论中验证您的SQL语句,如@GregHNZ所述。

答案 1 :(得分:1)

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

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]。

答案 2 :(得分:1)

我想添加的另一个可能导致此问题的是,您返回的是一组结果集,其中包含"保留字"字段,例如:

您的"客户" table的字段名如下:

Custnum  | Date | Custname

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

所以当你使用

获取记录时
SELECT * FROM Customers

这将可能返回"没有当前记录",因此选择该表的所有字段,只需最小化您的字段选择,如下所示:

SELECT custnum, custname FROM Customers

答案 3 :(得分:0)

尝试上述解决方案无济于事后,我发现了另一种解决方案:是/否Access表中的字段不能为Null(请参见allenbrowne.com/bug-14

尽管我的处境略有不同,因为我仅获得了“无当前记录”。使用GROUPBY运行查询时出现错误,暂时删除了“是/否”字段后,查询工作了。

但是,我的“是/否”字段令人惊讶地没有包含任何Null。但是,故障排除使我发现了一个相关的错误,该错误的确在查询结果中填充了Null是/否值。解决该相关错误后,结果中的Null Yes / No值消除了,从而消除了此错误。

答案 4 :(得分:0)

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

在我的例子中,记录集返回了一条记录,其中包括一些值为 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 时和在分配之前查看局部变量,按我的预期显示记录集。尝试从此记录集中分配值时抛出错误。

解决这个问题的是确保所有字段都包含非 Null 值。

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