码迷,mamicode.com
首页 > 数据库 > 详细

FDQuery多表更新生成sql语句的问题

时间:2016-07-09 18:02:15      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:

query.sql=‘select  a,b,c,d,e from a,b,c where ....‘;

来源3个表,

设计时添加字段列表,每个字段有Origin属性

分别是a.a,b.b,c.c格式,表示该字段是那个表。

 

然后query.edit,query.post方法调用后,生成update或insert语句的时候,

UPDATE ttdb.dbo.a

SET [a.a] = @P1
WHERE [a.a] = @P2

AND [a.b] = @p3

 

sql server报错,提示

消息 207,级别 16,状态 1,第 3 行
列名 ‘a.a 无效。

数据库字段肯定存在,只是加了[]就不识别了,去掉[]就不报错了,加[]的字段名[a]是可以识别,比如

[table1.a],[t1.b],[t1.c];这样是无法识别列的存在.t1.a,t1.b,t1.c这样是可以识别。前段firedac生成的语句自动加上了[]无法去掉。

在source\data\firedac\FireDAC.DApt.pas文件里,

arUpdate:          Result.CommandText := oCmdGen.GenerateUpdate;

就是FireDAC.Phys.SQLGenerator.pas文件里的方法,GetWhere方法,GetColumn和NormalizeColName方法最加上了[],暂时找不到去的地方。FGenOptions也没有赋值调用的地方,故而放弃此思路。

 

query有UpdateOptions>UpdateTableName属性,设置为要更新的表名,然后把各个字段的Origin的前缀去掉,使得生成的update 语句只有列名而无前缀[field];试试。

select [fieldname] from table //列存在
select table1.fieldname from table //列存在
select [table1.fieldname] from table  //列不存在,这种写法不行吗

FDQuery多表更新生成sql语句的问题

标签:

原文地址:http://www.cnblogs.com/cb168/p/5656180.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!