Ms access 记录集-无当前记录

Ms access 记录集-无当前记录,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我在录制唱片时遇到了一些困难 代码: 问题: 我有一个带有帐户列表的列表框。当一个帐户被点击时,一个文本框将填充记录id,我希望这些更改能够更新该特定记录 错误: 收到的消息为“无当前记录” 非常感谢您的帮助。可能的错误是您的ID列是一个数字,而不是字符串,因此您应该删除引号: Set rs = db.OpenRecordset("SELECT * FROM tbl_Suggestions_Historic WHERE ID = " & ID) 如果是字符串,则需要注意空格。您将在ID

我在录制唱片时遇到了一些困难

代码:

问题: 我有一个带有帐户列表的列表框。当一个帐户被点击时,一个文本框将填充记录id,我希望这些更改能够更新该特定记录

错误: 收到的消息为“无当前记录”


非常感谢您的帮助。可能的错误是您的ID列是一个数字,而不是字符串,因此您应该删除引号:

Set rs = db.OpenRecordset("SELECT * FROM tbl_Suggestions_Historic WHERE ID = " & ID)
如果是字符串,则需要注意空格。您将在ID之前和之后包含一个空格

然而,对于更新查询而不是记录集来说,这是一个很好的用例。依我看,您应该删除所有记录集代码,只需使用以下命令:

CurrentDb.Execute "UPDATE tbl_Suggestions_Historic SET [Status] = 'Closed By User', [ReasonClosed] = '" & ClosedWhy & "' WHERE ID = " & ID
或者,如果您想正确地执行此操作,请使用参数。自从你没用过以后,我就没用过

有关使用参数的示例,请参见下文

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb
Set qdf = db.CreateQueryDef("","UPDATE tbl_Suggestions_Historic SET [Status] = 'Closed By User', [ReasonClosed] = ? WHERE ID = ?" )
qdf.Parameters(1) = ClosedWhy
qdf.Parameters(2) = ID
qdf.Execute

您的ID列是什么类型的?如果你引用这个值,我假设它是一个文本列?在这种情况下,尝试省略空白空间,即将id='& id & ''改为id='& id '。如果它不是一个文本字段,则完全不要引用,即ID=&ID&;谢谢你的建议-我按照建议直接运行了SQL,效果很好。我仍在学习,所以请欣赏help@dmorgan20如果你还在学习,你最好学会如何正确地做。请参见下面的示例以使用参数,这既可以防止在某个字符串(例如ClosedWhy)包含撇号时出错,也可以帮助大多数应用程序保持访问的安全性,这一点不太相关
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb
Set qdf = db.CreateQueryDef("","UPDATE tbl_Suggestions_Historic SET [Status] = 'Closed By User', [ReasonClosed] = ? WHERE ID = ?" )
qdf.Parameters(1) = ClosedWhy
qdf.Parameters(2) = ID
qdf.Execute