联合查询在Interbase DB上访问

时间:2012-11-01 12:43:36

标签: ms-access odbc interbase

我正在通过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加入时我得到了这个错误。

任何帮助都将不胜感激。

感谢

1 个答案:

答案 0 :(得分:2)

您没有提到您的查询是直通查询还是在Access查询中使用链接的ODBC表。

如果您使用的是普通的Access查询

Normal Access Query

在普通Access查询中使用链接ODBC表时,Access数据引擎将根据需要重写查询,以使它们与其他数据库引擎兼容。
有时,它可能会失败。

  1. 确保每个SELECT查询都有效,并独立返回正确的数据。

  2. 尝试更简单的UNION查询,以确保问题来自UNION关键字本身。

  3. 尝试UNION ALL

  4. 请尝试使用传递查询。

  5. 如果您使用的是传递查询

    Pass-Through query

    传递查询逐字发送到ODBC引擎,Access只收集结果而不重写查询本身。

    1. 确保每个SELECT查询都可以作为传递查询,并独立返回正确的数据。

    2. 确保literal dates are properly formatted for Interbase SQL
      您使用的那些对于Access SQL是正确的,但不同的数据库接受不同的格式。

    3. 使用仅包含1或3个字段的简单UNION语句尝试更简单的SELECT查询。

    4. 尝试UNION ALL

    5. 您没有在问题中显示,但为了以防万一,如果您使用ORDER BY语句,则have to wrap UNION查询。

    6. 尝试转换字段的数据类型。它可能是some fields's data are incorrectly interpreted并且联合失败,因为它假定检索的数据是不同类型的。

    7. 请尝试使用标准的Access查询。