【问题标题】:Trying to execute an update query where rows are variables from TEdit尝试执行更新查询,其中行是来自 TEdit 的变量
【发布时间】:2021-04-30 19:35:49
【问题描述】:

我有一个表,其中包含需要更新的值。由于过去不同的人添加了很多错别字,所以我不得不使用'like'

我创建了一个包含所有需要更新的必要字段的表单。我使用了简单的TEditTLabel。计划是从编辑框中选择一种类型的项目,并使用TListBox

然后将要更新的信息添加到每个TEdit中。

我创建一个更新过程如下:

MyQuery1.SQL.Text := ' UPDATE TheTable SET iName = edtName.text WHERE iType like "%edtType.text%" ';
MyQuery1.SQL.Text := ' UPDATE TheTable SET iPart = edtPart.text WHERE iType like "%edtType.text%" ';
...
MyQuery.ExecSQL;

我的问题是以正确的格式传递edtVariables。如何在edtVariable 之前添加"%%" 之后?

我尝试过'"%'+edtPart.text+'%"' 之类的,但我以前从未在运行时这样做过。

【问题讨论】:

  • 我强烈建议您阅读 Delphi 的 db-aware 控件(参见 f.i. 本教程 etutorials.org/Programming/mastering+delphi+7/…)。关于 db-aware 控件(如 TDBEdit)的要点在于,在数据库中的记录和屏幕上的编辑控件之间来回传输数据是完全自动的,并且像您这样的 qs 完全是多余的。
  • 除了@MartynA 的评论,我不知道您为什么认为数据库服务器会知道edtName.text 是什么,因为这仅在您的Delphi 代码中可用。在此站点中搜索 [delphi] parambyname 以获取一些使用参数化查询的示例。
  • etutorials.org/Programming/mastering+delphi+7/...) 从我住的地方无法到达。你真的认为我应该检查 120,000 行数据库中的每条记录来编辑每个不正确的条目吗?我没有那么多时间活下去了!查询的想法是更新每个项目组的每条不正确的记录,这仍然会花费我一天中最好的时间。恐怕这不是很有帮助。 15 年前退休时,我丢失了所有关于德尔福的书籍。我正在为朋友的生意做点好事(少数几个尚未破产的公司之一)

标签: mysql sql delphi


【解决方案1】:

在参数化查询中使用 FireDAC,在参数名称前使用“:”:

MyQuery1.SQL.Text := 'UPDATE TheTable SET iName = :NameText WHERE iType like :TheValue';

然后你在执行请求之前设置参数值:

MyQuery1.ParamByName('TheValue').AsString := EdtType.Text;
MyQuery1.ParamByName('NameText').AsString := EdtName.Text;
MyQuery1.ExecSQL;

【讨论】:

  • 我没有使用 FireDAC,我什至从未看过它。我是老同学。我以不同的方式解决了我的问题。我使用 HeidiSQL 在记事本中编写了我的查询,通过将所有 SQL 行复制到 Heidi 并运行更新来使用正确的值更新所有行。使用搜索和替换更改记事本中的值并再次复制和粘贴。我很快就会完成。不完全是我想要的,但是当你全家都因为“流感骗局”而失业时,被告知要在 80 岁时重返学校并努力赚取一些额外的现金,这并不完全是什么我曾希望。
  • 我展示了使用 FireDAC 的代码,因为您没有指定您使用的是哪个组件,也没有指定 Delphi 版本。话虽如此,它是相同类型的代码,所有组件集略有不同。您只需要查看您使用的组件的文档即可。
  • @MartynA 当您明确表达您的意见时,您总是会得到更好的理解 :-) 修正了我在回答中遗漏的项目。
  • @fpiette 啊。好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 2017-03-26
  • 2020-05-25
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
相关资源
最近更新 更多