首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Delphi 10 - SQL语句语法错误更新

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

Stack Overflow用户
提问于 2015-10-08 20:19:23
回答 2查看 973关注 0票数 0

我不知道我的代码出了什么问题,它总是在UPDATE语句中给我一个语法错误,下面是代码:

代码语言:javascript
运行
复制
  adoQueryUsers.SQL.Clear;
      adoQueryUsers.SQL.Add('Update Users SET Password = "' +
          EdtPassword.Text + '"  where Username = "' + sUsername + '"  ');
      adoQueryUsers.Active := true;
      adoQueryUsers.ExecSQL;

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

EN

回答 2

Stack Overflow用户

发布于 2015-10-08 20:48:08

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

另外,我将使用参数,而不是直接将密码和用户解析到查询中,否则您将暴露在SQL注入中

票数 2
EN

Stack Overflow用户

发布于 2015-10-08 22:03:39

您的代码中有几个问题。

让我们从不适当的调用开始

代码语言:javascript
运行
复制
adoQueryUsers.Active := true;

只能对返回行集的SQL语句使用TADOQuery.ActiveTADOQuery.Open。您的语句不会这样做,因此请删除该语句。TADOQuery.ExecSQL是这里唯一相关的。

接下来,停止尝试连接SQL,改为使用参数。它不需要更多的代码,它可以正确地处理诸如引用值、格式化日期等事情。它还可以防止SQL注入问题。

代码语言:javascript
运行
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33015610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档