【问题标题】:MS Access XP record is #deleted special charMS Access XP 记录是#deleted 特殊字符
【发布时间】:2018-08-06 10:18:55
【问题描述】:

我正在将在 Windows XP 下运行的旧系统升级到 Windows 10。

其中一个应用程序是在 MS Access XP 中开发的,链接到 Oracle 数据库(Oracle 9i - 即时客户端 ODBC 驱动程序 32 位)。

我的电脑是法语的,MS Access 是法语的。

当我运行一条 SQL 行时:

SELECT LIST_NAME FROM WZ_LISTS_HD WHERE LIST_REL1 = 'Produit'

我得到以下结果: Summary Access vs SQL Explorer Windows 10 vs Windows XP

在 Windows 10(访问)中,我会为每个带有特殊字符(在本例中为“è”或“é”)的记录获得一个 #Deleted。我尝试使用自制的 SQL Explorer 并没有得到 #Deleted 但我没有特殊字符。

在我的旧系统 (Windows XP) 和我的 SQL 资源管理器中,我得到了带有特殊字符的完整记录集。

有人知道如何解决这个问题吗?大多数关于#Deleted 的帖子都建议每个数据库损坏或“需要进行数据库压缩”。就我而言,我可以毫无问题地使用旧系统获取记录。每天都有用户使用数据库。因此,数据库是好的。

“压缩数据库”没有意义,因为我不使用 mdb(访问主数据库文件)。

我尝试更改我的 Windows 键盘和语言功能。没用。

最后一件事,我已经为 Windows 7 下的某些用户进行了相同的升级(Windows XP -> Windows 7)。效果很好。没有#Deleted 记录。这似乎与 Windows 10 处理语言的方式有关。

这是 TNSNAMES.ORA 文件内容。

SYNDATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = serveur-oracle)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oracle6)
    )
  )

ODBC 信息如下:

ODBC Screenshot

这是调用 SQL 请求的代码部分:

VBA Code

欢迎任何想法。

【问题讨论】:

  • 听起来像是 ODBC 驱动程序的问题。当访问实际值出现问题时,Access 往往会显示 #Deleted。您是通过直通查询还是通过 Access 访问?你的连接字符串是什么(服务器/密码被审查)?
  • 我编辑了原始帖子以添加您要求的信息。你似乎是对的。我创建了一个包含一个表和 2 个字段的 MDB 文件。我填充了一些带有特殊字符的单词和一些没有特殊字符的单词。我在桌子上做了一个请求,Access 显示一切都没有问题。因此,问题似乎来自 ODBC 驱动程序。
  • 我不确定“通过”还是“通过访问”。我没有正确的 VBA 代码。但这是代码的失败位(抱歉格式化):
  • 那是通过Access(你使用Access SQL,并让Access将其翻译成Oracle SQL)。它很容易出错。使用 ADO 和直接连接到 Oracle 数据库可能可以解决这个问题。
  • 最后将代码发布为图片,我无法正确格式化。请看下文。

标签: sql vba ms-access windows-10 oracle9i


【解决方案1】:

要使用直通查询而不是普通记录集:

Dim qd As DAO.QueryDef
Set qd = CurrentDb.CreateQuerydef("", "SELECT LIST_NAME FROM WZ_LISTS_HD WHERE LIST_REL1 = 'Produit'")
qd.Connect = CurrentDb.TableDefs("LIST_NAME").Connect 'Reuse the connect
Dim rs As DAO.Recordset
Set rs = qd.OpenRecordset(dbOpenSnapshot, dbReadOnly) 'Minimal chance to see weird things with snapshots

使用直通查询时,SQL 需要对 Oracle (PL/SQL) 有效,而对 Access 无效。它们直接在后端数据库上执行,限制了 Access 做奇怪事情的机会。例如,您确实需要使用UPPER 而不是UCASE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2010-10-03
    相关资源
    最近更新 更多