代码之家  ›  专栏  ›  技术社区  ›  dave

访问2007到Oracle10g链接表-查询结果有缺陷,但未引发任何错误

  •  0
  • dave  · 技术社区  · 14 年前

    当使用WHERE子句筛选出不需要的记录时,查询链接的Oracle10g表的Access2007数据库将返回有缺陷的结果集。奇怪的是, 一些 过滤正在发生,但不可靠。

    我可以可靠地演示/产生这样的问题:

    1. 使用Access 2007创建一个*新*数据库。
    2. 使用Access 2007创建第二个*新*数据库,然后“另存为”2000。
    3. 使用旧版本的Access创建第三个*新*数据库。
    4. 在每个数据库中运行以下查询:
    SELECT 
        STATUS, 
        ID, 
        LAST_NAME, 
        FIRST_NAME
    FROM 
        Oracle10g_table
    WHERE 
            STATUS="A" 
    
    • 在使用Access2007创建的两个数据库中,运行此查询将为您提供一个结果集,其中 一些 已筛选出(status=“a”)=false的记录,但并非所有记录。
    • 在使用旧版本的Access创建的数据库中,WHERE子句正确筛选,结果集正确。
    • 状态是文本字段
    • 该表是一个“链接”表,指向Oracle10g数据库
    • 这张桌子有68K行
    • 我在60、1000和0测试了超时

    有人碰到这个问题吗?

    我想知道这是否是一个新的访问“功能”,也将影响2010年。这和ODBC有什么关系吗?

    谢谢你的帮助, -戴夫

    更多…

    我刚刚尝试了另一种形式的查询,使用having而不是where,它起作用了!问题是,除此之外,这不应该更改任何内容(是——更多的虚拟表,但不应该更改最终结果),我的最终用户将使用Access2007可视化查询设计器,而不是直接键入SQL,这将默认他们输入的任何条件。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Brian    14 年前

    我的预感是,Access用来连接到Oracle的一个ODBC驱动程序将“a”视为列名,而不是文字“a”。你试过在“A”上单引号吗?在Oracle中,双引号用于引用列名,是否有一个名为“a”的列?

    Oracle查询示例1

    Select object_name from all_objects
    where "OBJECT_NAME" = 'DUAL'
    

    Oracle查询示例2

    with example as (
    Select object_name as "Fancy Column Name" from all_objects
    )
    select * from example
    where "Fancy Column Name" = 'DUAL'
    
        2
  •  1
  •   user417408    14 年前

    我也遇到过类似的问题。在我的例子中,更改ODBC驱动程序是有效的,但是我也可以将“唯一记录标识符”更改为一个不包含空值的列。它仍然不必是“正确”的唯一记录标识符。

        3
  •  0
  •   dave    14 年前

    这是一个与ODBC相关的问题。我们的技术支持服务单元在我们的每个工作站上安装连接性——它们自己编程,谁知道它们实际放入了什么——但最终的结果是,当您通过访问(任何版本)链接到一个ODBC数据源时,我们的网络服务器会显示在“机器数据源”选项卡中,因此我们只需单击我们想要的数据源。我们走了。这在2007年之前一直很有效。

    我所做的是创建一个“新的”机器数据源,它让我自己选择ODBC驱动程序(而不是让我使用我们的技术支持人员创建的驱动程序)。我选择了“MicrosoftODBC for Oracle”,输入了我想要的服务器的名称,以及它所需要的一切。现在,WHERE子句的不一致过滤问题得到了解决(我希望如此)。

    剩下的唯一一件事就是把它发送回我们的技术支持人员,这样他们就可以清理他们的安装了。我应该要求风险赔偿吗?- -和合