【发布时间】:2020-12-01 17:28:57
【问题描述】:
我在 Delphi 10.3 中使用 FireDAC 和 EMS Rad 服务器时断时续地解决了这个问题。我没有在 Delphi 10.2 或更低版本中体验过它,但除了 Delphi 10.3 之外,我没有在任何地方使用 FireDAC。 我遇到的问题是一些特殊字符似乎在它们到达数据库之前被从 SQL 语句中删除。
例如,如果我运行:
update messageread set
MessageDeliveredDateTime = '8/11/2020 6:33:45 PM'
where messageread.dts in ('5/7/2020 12:48:20 PM-!+[[786', '5/7/2020 12:47:06 PM-!#[[782', '5/7/2020 12:43:35 PM-&K[[775', '5/7/2020 12:41:01 PM-&K[[773')
在 SQL 服务器上执行的是:
update messageread set MessageDeliveredDateTime = '8/11/2020 6:33:45 PM' where messageread.dts in ('5/7/2020 12:48:20 PM-+[[786', '5/7/2020 12:47:06 PM-[[782', '5/7/2020 12:43:35 PM-[[775', '5/7/2020 12:41:01 PM-[[773')
它似乎在“-”之后删除了 2 个字符。因为它是 2 个字符,所以我觉得它是 Unicode 的东西。 过去,我通过使用参数化查询来解决这个问题,但在这种情况下,它仍然没有帮助。我目前正在运行的 Delphi 代码是:
fdTemp.SQL.Text := 'update messageread set MessageDeliveredDateTime = ' + QuotedStr(DateTimeToStr(now)) + ' where messageread.dts in (' + sUpdateDTS + ')';
fdTemp.ExecSQL;
sUpdateDTS = '5/7/2020 12:48:20 PM-!+[[786', '5/7/2020 12:47:06 PM-!#[[782', '5/7/2020 12:43:35 PM-&K[[775', '5/7/2020 12:41:01 PM-&K[[773'
其中 fdTemp 是 TFDQuery,DTS 是表的主键。 如果我采用 SQL 语句并在 Mgt Studio 中运行它,它就可以正常工作。但是,当从 Delphi 运行时,0 行会受到影响,因为没有任何内容与 where 子句匹配。
有人知道吗?
【问题讨论】:
标签: sql-server delphi firedac delphi-10.3-rio