1

我正在通过 ODBC (Easysoft) 版本 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 --调用失败,[Easysoft][Interbase]动态 SQL 错误,SQL 错误代码 = -104,令牌未知 -line1,char 0,((#-104)"

自行运行选择查询时,它们可以正常工作,但是通过 UNION 加入时,我会收到此错误。

任何帮助,将不胜感激。

谢谢

4

1 回答 1

2

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

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

正常访问查询

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

  1. 确保每个SELECT查询都能独立运行并返回正确的数据。

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

  3. 尝试UNION ALL

  4. 尝试改用直通查询。

如果您使用的是直通查询

直通查询

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

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

  2. 确保为 Interbase SQL 正确格式化文字日期
    您使用的那些对于 Access SQL 是正确的,但不同的数据库接受不同的格式。

  3. 尝试使用仅涉及 1 或 3 个字段的UNION简单语句进行更简单的查询。SELECT

  4. 试试UNION ALL

  5. 您没有在问题中显示它,但以防万一,如果您使用了ORDER BY语句,则必须包装UNION查询。

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

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

于 2012-11-02T01:41:45.797 回答