SQL语句:Select * from (Select * from T_FHD) Union (Select * from T_FHD2) where fcsj between  2005-6-29   and  2005-7-14 
的作用是:用联合查询的方式,在ACCESS某数据库中从T_FHD和T_FHD2表里查找“发车时间”在2005-6-29和2005-7-14之间的所有数据。操作环境是Delphi+Access由此引发三个问题:
1、运行后,提示:“联合查询语法错误”。怎样解决?
2、单独用Select * from (Select * from T_FHD) Union (Select * from T_FHD2)可以显示结果,只是T_FHD中的记录和T_FHD2中的记录交替显示。如果要让T_FHD2中的记录显示在T_FHD中的记录的下面,怎么办?(结果是显示在DBGrid里的)3、Select * from (Select * from T_FHD) Union (Select * from T_FHD2) 
是(Select * from T_FHD)和(Select * from T_FHD2)先联合再查询呢,还是先查询Select * from (Select * from T_FHD)再和(Select * from T_FHD2)联合呢?迷惑!请给我解决一下吧。先谢谢了!

解决方案 »

  1.   

    Select * from ((Select * from T_FHD) Union (Select * from T_FHD2)) where fcsj between  2005-6-29   and  2005-7-14 这样应该没有问题了,不过ACCESS对SQL语句的支持并不是太好。有些SQL语句在ACCESS里面是不支持的。
      

  2.   

    Select * from (Select * from T_FHD) Union (Select * from T_FHD2) where fcsj between  #2005-6-29#   and  #2005-7-14#
    注意数据库自身需要的语法格式,这个和delphi没有关系
      

  3.   

    先用access测试一下你的语法是否能够通过,如果不能,就不要寄希望于delphi了,这不是一回事
      

  4.   

    多表连接查询格式:
    select emp.empno, emp.ename, emp.deptno, dept.dname,dept.loc from scott.emp,scott.dept where   emp.date,  scott.date between  2005-6-29   and  2005-7-14 
      

  5.   

    你可以这样啊
    Select * from ((Select *,1 as orderid from T_FHD) Union (Select *,2 as order id from T_FHD2)) where fcsj between  2005-6-29   and  2005-7-14 
    order by orderid
    如果你要先联合再查询就需要用括号将联合先括起。
      

  6.   

    在Access中应该是这样吧:
    Select * from ((Select *,1 as orderid from T_FHD) Union (Select *,2 as order id from T_FHD2)) where fcsj between  '2005-6-29'   and  '2005-7-14' 
    order by orderid