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


    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生成的语句自动加上了[]无法去掉。

    在sourcedatafiredacFireDAC.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  //列不存在,这种写法不行吗
  • 相关阅读:
    创建百度地图实例
    IntelliJ IDEA使用(1)——IDEA配置JDK
    IntelliJ IDEA使用(2)——IDEA配置Tomcat
    怎样使用 GitHub?
    IntelliJ IDEA使用(3)——IDEA连接Git
    AS3.0杂记——Dictionary、Object与Array
    AIR文件操作:使用文件对象操作文件和目录 .
    As3.0 TextField
    关于乘机
    Html 嵌入 swf
  • 原文地址:https://www.cnblogs.com/cb168/p/5656180.html
Copyright © 2020-2023  润新知