我不知道我的代码出了什么问题,它总是在UPDATE语句中给我一个语法错误,下面是代码:
adoQueryUsers.SQL.Clear;
adoQueryUsers.SQL.Add('Update Users SET Password = "' +
EdtPassword.Text + '" where Username = "' + sUsername + '" ');
adoQueryUsers.Active := true;
adoQueryUsers.ExecSQL;我确实尝试过使用adoQueryUsers.SQL.Text : =,但它给我带来了完全相同的问题。
发布于 2015-10-08 20:48:08
删除您的“adoQueryUsers.Active := true;”。这是一条update语句,不返回记录集。只需要您的ExecSQL。
另外,我将使用参数,而不是直接将密码和用户解析到查询中,否则您将暴露在SQL注入中
发布于 2015-10-08 22:03:39
您的代码中有几个问题。
让我们从不适当的调用开始
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;https://stackoverflow.com/questions/33015610
复制相似问题