我正在通过ODBC(Easysoft)ver.7在Interbase数据库上执行Access 2010中的查询。一切正常,除非我来点这样的联盟查询:
SELECT TRIP.TRIPDATE, RESERVATION.BOOKINGREF, RESERVATION.LEADNAME, TRIP.DRIVERID, RESERVATION.STATUS, RESERVATION.DATECANCELLED, TRIP.TRANSPORTTYPEID
FROM TRIP INNER JOIN RESERVATION ON TRIP.TRIPID = RESERVATION.ARRIVALTRIPID
WHERE (((TRIP.TRIPDATE) Between #2/1/2012# And #2/29/2012#) AND ((TRIP.DRIVERID)=2) AND ((RESERVATION.DATECANCELLED) Is Null) AND ((TRIP.TRANSPORTTYPEID)=12))
UNION
SELECT TRIP.TRIPDATE, RESERVATION.BOOKINGREF, RESERVATION.LEADNAME, TRIP.DRIVERID, RESERVATION.STATUS, RESERVATION.DATECANCELLED, TRIP.TRANSPORTTYPEID
FROM TRIP INNER JOIN RESERVATION ON TRIP.TRIPID = RESERVATION.DEPARTURETRIPID
WHERE (((TRIP.TRIPDATE) Between #2/1/2012# And #2/29/2012#) AND ((TRIP.DRIVERID)=2) AND ((RESERVATION.DATECANCELLED) Is Null) AND ((TRIP.TRANSPORTTYPEID)=12));
当我从Access运行此查询时,我得到
“ODBC --call failed,[Easysoft] [Interbase]动态SQL错误,SQL错误 code = -104,Token unknown -line1,char 0,((#-104)“
当他们自己运行select查询时,它们工作正常但是当通过UNION加入时我得到了这个错误。
任何帮助都将不胜感激。
感谢
答案 0 :(得分:2)
您没有提到您的查询是直通查询还是在Access查询中使用链接的ODBC表。
在普通Access查询中使用链接ODBC表时,Access数据引擎将根据需要重写查询,以使它们与其他数据库引擎兼容。
有时,它可能会失败。
确保每个SELECT
查询都有效,并独立返回正确的数据。
尝试更简单的UNION
查询,以确保问题来自UNION
关键字本身。
尝试UNION ALL
请尝试使用传递查询。
传递查询逐字发送到ODBC引擎,Access只收集结果而不重写查询本身。
确保每个SELECT
查询都可以作为传递查询,并独立返回正确的数据。
确保literal dates are properly formatted for Interbase SQL。
您使用的那些对于Access SQL是正确的,但不同的数据库接受不同的格式。
使用仅包含1或3个字段的简单UNION
语句尝试更简单的SELECT
查询。
尝试UNION ALL
。
您没有在问题中显示,但为了以防万一,如果您使用ORDER BY
语句,则have to wrap UNION
查询。
尝试转换字段的数据类型。它可能是some fields's data are incorrectly interpreted并且联合失败,因为它假定检索的数据是不同类型的。
请尝试使用标准的Access查询。