#使用MS Access通过ODBC查询db2数据库时作为值删除

dav*_*jal 3 db2 odbc

当尝试查询某些 db2 表时,我得到#Deleted了表中的所有值。但对于其他表,它工作正常。

此查询的行数等于使用数据工作室客户端时的行数,因此它实际上查询的是同一个表,只是字段显示不正确。

这个数据工作室的结果看起来像这样

在此处输入图片说明

并且 ms 访问结果如下所示

在此处输入图片说明

更新

检查其他表格后,我发现了相似之处。包含大量记录的表给了我结果(但值是“#Deleted”)。其他表正确显示结果。

Phi*_*ilS 5

此问题的原因很可能是 DB2 中表的主键。

Access 不能很好地将某些数据类型作为主键处理。

众所周知,对 PK 不利的是所有浮点数字类型。它们在服务器和 Access 中的舍入方式可能不同。如果 Access 使用浮点值从服务器查询单个记录,则不会有结果,因为服务器上的实际值不同。 这通常是表格单元格中显示#Deleted的原因。

主键的良好数据类型是整数类型(最大 int32)和字符串/varchar 类型(最大长度 255 个字符)。

日期和定点小数点数据类型也可能导致问题。这主要取决于实际的后端数据库系统和使用的 ODBC 驱动程序。- 我对 DB2 没有这方面的经验。

以下是解决或解决此问题的一些选项

  1. 如果问题是由主键列中的日期或十进制数据类型引起的,您应该检查 ODBC 驱动程序中是否有更改这些类型行为的设置。如果没有,您可以研究是否有另一个更适合与 Access 一起使用的 ODBC 驱动程序可用。请注意,Access 根本无法正确支持某些数据类型。由于缺乏 DB2 经验,我无法就此提供更详细的建议。

  2. 解决这个问题的最好方法显然是改变服务器数据库中基表的结构。如果只在所有主键列中使用没有问题的数据类型将使问题消失。如果 Access 是数据库的主要前端应用程序,我强烈建议采用这种方式。不幸的是,在很多情况下这是不可行的。

  3. 如果选项 1 和 2 失败或无法在您的方案中使用,则解决方法是在服务器上创建包含有问题表的视图。然后将视图链接到 Access 应用程序而不是基表。

    如果您只需要对数据进行只读访问,这是一个简单的解决方案。链接视图时,您可以(但不是必须!)选择视图的唯一键。如果您不选择任何,视图将是只读的,但数据应正确显示。

    如果您确实需要对数据进行直接写访问,它会变得更加复杂。您需要在视图中创建一个人工唯一列,方法是将表的主键列中的数据转换为键数据的 varchar 表示。将视图链接到 Access 时,您选择人工列作为主键。现在表中的数据应该可以正常显示并且应该是可编辑的(当然关键列除外)。这种方法会因为计算出的 PK 列本身没有索引而导致性能下降。您应该调查数据库是否支持对视图中的人工键列进行持久化和索引。

  4. 如果选项 1-3 不能使用,还有另一个选项。根本不要使用链接的表(或视图),而是在 Access 中创建一个 Pass-Through-Query 来查询来自 DB2 的数据。PT-Query 是只读的。

    如果需要编辑 PT-Query 返回的数据,则需要向数据库发送自定义 SQL 语句来更新数据。因此,在这种情况下,这将比其他选项花费更多的精力。