代码之家  ›  专栏  ›  技术社区  ›  FrustratedWithFormsDesigner

Access正在重写并破坏我的查询!

  •  1
  • FrustratedWithFormsDesigner  · 技术社区  · 16 年前

    我在msaccess(2003)中有一个使用子查询的查询。子查询部分如下所示:

    ...FROM (SELECT id, dt, details FROM all_recs WHERE def_cd="ABC-00123") AS q1,...
    

    当我切换到表视图来验证结果时,一切正常。

    然后,我希望将此查询的结果打印在报表的页眉上(查询返回一行,该行是页眉内容)。我得到一个错误,因为查询突然被重写为:

    ...FROM [SELECT id, dt, details FROM all_recs WHERE def_cd="ABC-00123"; ] AS q1,...
    

    所以圆括号被方括号自动替换是可以的,Access觉得需要这样做,很好!但为什么要加上 ; 进入子查询,这会导致它失败吗?

    我想我可以为这些子查询创建新的查询对象,但这样做似乎有点愚蠢 去做那件事。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Thomas    16 年前

    啊,进入的乐趣。查询设计器通常不能很好地处理派生表。事实上,Jet将支持在查询设计器中无法正确查看的多个构造。事实上,QBE将破坏(如您所见的改变)许多复杂的查询。一般来说,您应该简单地假设您不能在QBE中安全地查看派生表或“复杂”查询的设计,而只能在代码中查看。

        2
  •  3
  •   Community Mohan Dere    9 年前

    如果要使用更标准的派生表语法,则需要切换到SQL92模式。但是,请注意,这也会将您的通配符更改为SQL Server兼容(%and\uu,而不是*and?)。

    正如@HansUp指出的,SQL中的错误不是“;”但缺少尾随期结束后的方括号。这种语法一直是Jet的一部分,因为我一直在使用派生表(可以追溯到A97左右)。它的缺陷是防止派生表SQL中的任何表达式需要方括号(例如字段名中有空格),但我不认为这是一个可怕的缺陷,因为我避免以需要方括号的方式命名。

    编辑:

    另外请注意,SQL92模式还有其他问题,请参见本部分末尾的编辑部分 this post of mine .

        3
  •  1
  •   HansUp    16 年前

    ... FROM [ SELECT whatever FROM someTable ]. AS q ...
    

    注意右方括号后面的点。你的样品里没有点。因此,我想知道如果添加点并删除分号(在SQL视图中)会发生什么情况,如下所示:

    ...FROM [SELECT id, dt, details FROM all_recs WHERE def_cd="ABC-00123" ]. AS q1,...
    

    Access是否接受该更改,并且在通过查询设计器进行任何进一步更改时是否保留该更改?

    推荐文章