Delphi 10-SQL语句语法错误更新

Delphi 10-SQL语句语法错误更新,sql,delphi,syntax,Sql,Delphi,Syntax,我不知道我的代码有什么问题,它在UPDATE语句中不断给我一个Synxtax错误,下面是代码: adoQueryUsers.SQL.Clear; adoQueryUsers.SQL.Add('Update Users SET Password = "' + EdtPassword.Text + '" where Username = "' + sUsername + '" '); adoQueryUsers.Active := true;

我不知道我的代码有什么问题,它在UPDATE语句中不断给我一个Synxtax错误,下面是代码:

  adoQueryUsers.SQL.Clear;
      adoQueryUsers.SQL.Add('Update Users SET Password = "' +
          EdtPassword.Text + '"  where Username = "' + sUsername + '"  ');
      adoQueryUsers.Active := true;
      adoQueryUsers.ExecSQL;

我确实尝试使用了
adokeryusers.SQL.Text:=
,但它给了我完全相同的问题。

删除您的“adokeryusers.Active:=true;”。这是update语句,不返回记录集。只需要您的ExecSQL


此外,我将使用参数,而不是将密码和用户直接解析到查询中,或者您将面临SQL注入

删除您的“adoQueryUsers.Active:=true;”。这是update语句,不返回记录集。只需要您的ExecSQL


此外,我将使用参数,而不是将密码和用户直接解析到查询中,或者您将面临SQL注入

您的代码中有几个问题

让我们从一个不恰当的电话开始

adoQueryUsers.Active := true;
只能对返回行集的SQL语句使用
TADOQuery.Active
TADOQuery.Open
。您的语句没有这样做,请删除该语句。
TADOQuery.ExecSQL
是这里唯一相关的

接下来,停止连接SQL,改用参数。它不再是代码,它可以正确地处理诸如引用值、格式化日期等事情。它还可以防止SQL注入问题

adoQueryUsers.SQL.Clear;
adoQueryUsers.SQL.Add('Update Users SET Password = :Password')
adoQueryUsers.SQL.Add('Where UserName = :UserName');
adoQueryUsers.Parameters.ParamByName('Password').Value := EdtPassword.Text;
adoQueryUsers.Parameters.ParamByName('UserName').Value := sUserName;
adoQueryUsers.ExecSQL;

您的代码中有几个问题

让我们从一个不恰当的电话开始

adoQueryUsers.Active := true;
只能对返回行集的SQL语句使用
TADOQuery.Active
TADOQuery.Open
。您的语句没有这样做,请删除该语句。
TADOQuery.ExecSQL
是这里唯一相关的

接下来,停止连接SQL,改用参数。它不再是代码,它可以正确地处理诸如引用值、格式化日期等事情。它还可以防止SQL注入问题

adoQueryUsers.SQL.Clear;
adoQueryUsers.SQL.Add('Update Users SET Password = :Password')
adoQueryUsers.SQL.Add('Where UserName = :UserName');
adoQueryUsers.Parameters.ParamByName('Password').Value := EdtPassword.Text;
adoQueryUsers.Parameters.ParamByName('UserName').Value := sUserName;
adoQueryUsers.ExecSQL;


使用
时错误是否持续存在。。。Password=“”+StringReplace(EdtPassword.Text)、“,[rfReplaceAll])+”,其中用户名…
?对sUsername执行相同的操作too@fantaghirocco是,完全相同的错误。不要在SQL中内联您的值!这是相当不安全(和缓慢),由于使用参数!另外,
adokeryusers.Active:=true
对于更新更多参考资料是不必要的:)使用
时错误是否仍然存在。。。Password=“”+StringReplace(EdtPassword.Text)、“,[rfReplaceAll])+”,其中用户名…
?对sUsername执行相同的操作too@fantaghirocco是,完全相同的错误。不要在SQL中内联您的值!这是相当不安全(和缓慢),由于使用参数!另外,
adoQueryUsers.Active:=true
对于更新更多参考资料是不必要的:)谢谢,但完全相同的错误?还有什么会导致这个错误发生,因为我确信你的代码是正确的,现在我想知道是不是其他原因导致了这个错误?(错误是UPDATE语句中的语法错误)。是否为保留字?我看不到运行此查询所针对的数据库类型的任何引用。如果将表名和字段名括起来,例如更新[Users]设置[Password]=连接到哪个数据库,会有什么不同吗?如果使用任何必须运行手动查询(Delphi之外)和运行语句(使用字段内容的实际值)的工具,会发生什么情况?它在那里工作吗?我正在使用Microsoft Access 2003数据库(提供程序Microsoft.Jet.OLEDB.4.0)。。用户名是数据库和密码字段中的短文本。我试着用括号括起来,同样的错误。@Iknowone:好吧,这是我要求的一半。下半场呢?谢谢,但还是同样的错误?还有什么会导致这个错误发生,因为我确信你的代码是正确的,现在我想知道是不是其他原因导致了这个错误?(错误是UPDATE语句中的语法错误)。是否为保留字?我看不到运行此查询所针对的数据库类型的任何引用。如果将表名和字段名括起来,例如更新[Users]设置[Password]=连接到哪个数据库,会有什么不同吗?如果使用任何必须运行手动查询(Delphi之外)和运行语句(使用字段内容的实际值)的工具,会发生什么情况?它在那里工作吗?我正在使用Microsoft Access 2003数据库(提供程序Microsoft.Jet.OLEDB.4.0)。。用户名是数据库和密码字段中的短文本。我试着用括号括起来,同样的错误。@Iknowone:好吧,这是我要求的一半。下半场怎么样?