MS Access-更新SQL查询错误3061

MS Access-更新SQL查询错误3061,sql,ms-access,inputbox,Sql,Ms Access,Inputbox,我试图用输入框中的文本更新表中的数据 Private Sub editname_Click() Dim GivenNameTB As String Dim EnterName As String Dim SQl As String Dim LocationID As Integer Me.txt_name.SetFocus GivenNameTB = Me.txt_name.Text EnterName = InputBox("Change name", "Change na

我试图用输入框中的文本更新表中的数据

Private Sub editname_Click()

 Dim GivenNameTB As String
 Dim EnterName As String
 Dim SQl As String
 Dim LocationID As Integer


 Me.txt_name.SetFocus
 GivenNameTB = Me.txt_name.Text
 EnterName = InputBox("Change name", "Change name", GivenNameTB)
 LocationID = Me.list_ma.Column(1)

 SQl = " Update tWorkers SET GivenName = forms!mainform!EnterName WHERE tWorkers.IDName = forms!mainform!LocationID "

 CurrentDb.Execute SQl




End Sub
但是,我得到的错误代码3061参数太少。预期2

编辑:

tWorkers的表结构:

我通过设置GivenName=…,将列GivenName作为目标,并通过LocationID将行作为目标

LocationID从列表字段list_ma获取其值。列表字段由五列组成,而IDName是第2列

我的重点是更新表中的字段。“我的表单”中的文本框显示一个名称,单击按钮可以编辑该名称。然后弹出一个输入框。输入的字符串应保存在所需字段中。

我认为您需要DoCmd.RunSQL而不是CurrentDb.Execute


重新阅读您的问题,您的数据存在于VBA变量中,而不是表单控件中。因此,您无法从表单DoCmd中读取参数。RunSQL不会有帮助

必须动态构造SQL字符串,最好使用:


一些解释会有用的。e、 或使用DoCmd.RunSQL,它可以工作,但Access要求允许更新0条记录。不知何故,通过ID-ID-name进行识别似乎不起作用。有什么建议吗/我觉得代码确实有点奇怪。您能否向我们展示您的表结构、一些匿名的示例数据(如有必要),并让我们知道我们正在更正的代码应该做什么。在编写时,它似乎将IDName字段与表单上的LocationID匹配的所有行作为目标。这听起来很奇怪,但如果不知道你的数据,就无法在没有进一步信息的情况下进行判断。我做了一些编辑,这可能有助于不太确定。如果您仍然有问题,请让我们知道此代码放入即时窗口的文本无法看到它?按CTRL+G。我必须将char34更改为Chr34-尽管如此,它仍然有效-谢谢!!
IDName - auto-increment (primary key)
LastName - text
GivenName - text
Private Sub editname_Click()

 Dim GivenNameTB As String
 Dim EnterName As String
 Dim SQl As String
 Dim LocationID As Integer

 Me.txt_name.SetFocus
 GivenNameTB = Me.txt_name.Text
 EnterName = InputBox("Change name", "Change name", GivenNameTB)
 LocationID = Me.list_ma.Column(1)

 SQL = " Update tWorkers SET GName = " & chr(34) & EnterName & chr(34) & " WHERE tWorkers.IDName = " & LocationID

 Debug.Print SQL -- For checking what code we are running.

 DoCmd.RunSQL SQL 

End Sub
SQL = "Update tWorkers SET GivenName = " & CSql(EnterName) & _
      " WHERE tWorkers.IDName = " & CSql(LocationID)
Debug.Print SQL
CurrentDb.Execute SQL