Vba 运行时错误3021-无当前记录

Vba 运行时错误3021-无当前记录,vba,ms-access,ms-access-2010,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!XVa

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

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


为什么会出现此错误以及如何解决此错误?

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

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

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

在调用
.OpenRecordset
之后。如果记录集为空,那么您需要按照@GregHNZ在上面的评论中所描述的方式验证SQL语句。

通常,我会这样做。在Access中创建一个新查询,切换到SQL视图,将我的代码粘贴到那里,然后转到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]

我想补充的另一件事可能会导致这种情况,那就是返回一组包含“保留字”字段的结果集,例如:

“Customers”表的字段名如下所示:

Custnum  | Date | Custname
我们知道,日期字段是大多数数据库的保留字

所以当你使用

SELECT * FROM Customers
这可能会返回“No Current Record”(无当前记录),因此选择该表的所有字段时,只需最小化字段选择,如下所示:

SELECT custnum, custname FROM Customers

在尝试了上述解决方案之后,我发现了另一个解决方案:Access表中的Yes/no字段不能为Null(请参阅)

虽然我的情况略有不同,因为我只得到了“No current record.”错误,但在使用GROUPBY运行查询时,我的查询在临时删除“是/否”字段后仍然有效


然而,我的Yes/No字段竟然不包含任何空值。但是,故障排除使我找到了一个关联的错误,该错误确实用空的Yes/No值填充了我的查询结果。修复该相关错误消除了结果中的空Yes/No值,从而消除了此错误。

谢谢您的回答。我这样做了,但没有帮助:/The
eof
测试是一个救命稻草。重新排列代码,使SQL语句位于字符串变量中,并将其打印到即时窗口。这样你就能知道它有什么问题了。如果没有什么明显的问题,请检查输出SQL并将其放入查询中,并验证是否有符合条件的记录。