vba
  • ms-access
  • ms-access-2010
  • 2013-06-27 55 views 3 likes 
    3

    我想查询到一个文本框的结果联系起来,但我得到这个错误:这里是我的代码:运行时错误3021-没有当前记录

    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 
    

    应该回报CA 20记录

    为什么我得到这个错误,我该如何解决?

    +3

    重新安排你的代码,以便您的SQL语句是一个字符串变量,并将其打印到直接窗口中。这样你会看到它是否有什么问题。如果没有什么明显的,那就是输出SQL并将其放入查询中,并验证是否有符合条件的记录。 – GregHNZ

    回答

    6

    一个可能的原因的错误是Name是在Access中保留字,所以你应该使用

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

    你也可以尝试使用rst!XValue之前测试rst.EOF。也就是说,以验证您的查询是否已返回至少一个行可以在.OpenRecordset调用后立即添加代码

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

    。如果记录集为空,那么您需要验证您的SQL语句,如上面的注释中@GregHNZ所述。

    +0

    谢谢你的回答。我做到了,但它没有帮助:/ – Kaja

    +1

    @Kaja我已经更新了我的答案。 –

    1

    通常,我会这样做。在Access中创建一个新的查询,切换到SQL视图,在那里粘贴我的代码并转到设计>>运行。

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

    1

    还有一两件事我想补充一点,可能会导致这,是你返回设置了一个“保留字”领域,例如结果集:

    你的“客户”表中有字段名称如下所示:

    Custnum | Date | Custname 
    

    我们知道日期场是大多数数据库

    这样的保留字,当你使用获得的记录

    SELECT * FROM Customers 
    

    这将可能返回“没有当前记录”,这样反而选择了该表的所有领域,只是减少你的领域的选择是这样的:

    SELECT custnum, custname FROM Customers 
    
    相关问题