上Interbase的数据库联合查询访问(Union query Access on an Inte

2019-10-17 08:53发布

我从通过ODBC(斯软件)版本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失败,[斯软件] [Interbase的]动态SQL错误,SQL错误代码= -104,令牌未知-line1,炭0,((#-104)”

当运行SELECT查询自己他们的工作很好,但是当通过UNION加入我得到这个错误。

任何帮助,将不胜感激。

谢谢

Answer 1:

如果您的查询是直通查询或你不提,如果你在访问查询中使用链接的ODBC表。

如果您使用的是正常的访问查询

当在正常访问查询使用链接的ODBC表,访问数据引擎将改写查询作为必要以使它们与其它数据库引擎兼容。
有时,它虽然可以失败。

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

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

  3. 尝试UNION ALL

  4. 尝试使用传递查询代替。

如果您使用的是传递查询

传递查询是逐字发送到ODBC引擎和访问只是收集结果而无需重写查询本身。

  1. 确保每个SELECT查询工作作为传递查询和独立返回正确的数据。

  2. 确保字面日期的格式正确Interbase的SQL 。
    您使用的那些是正确的SQL访问,但不同的数据库中接受不同的格式。

  3. 尝试一个简单的UNION使用简单的查询SELECT只涉及1个或3个字段声明。

  4. 尝试UNION ALL

  5. 你不会在你的问题表现出来,但以防万一,如果你使用的ORDER BY语句,你必须包装的UNION查询。

  6. 试着投你的字段的数据类型。 这可能是某些字段的数据被错误地解释 ,并且因为它假设检索到的数据是不同类型的联合失败。

  7. 尝试使用标准的Access查询来代替。



文章来源: Union query Access on an Interbase DB