【问题标题】:How to change SortOrder to avoid "unsupported collating sort order" error?如何更改 SortOrder 以避免“不支持的整理排序顺序”错误?
【发布时间】:2015-11-04 01:14:57
【问题描述】:

我一直在使用来自第三方客户端的 .mdb 数据库开发一个程序。一切都很好,直到我尝试更新数据库中的元素。 sortOrder 字段不正确。我尝试使用 MS Access 将其更改为通用,但没有运气。执行更新查询时收到的消息是:

java.lang.IllegalArgumentException: Given index Index@150ab4ed[
  name: (EXART) PrimaryKey
  number: 2
  isPrimaryKey: true
  isForeignKey: false
  data: IndexData@3c435123[
    dataNumber: 2
    pageNumber: 456
    isBackingPrimaryKey: true
    isUnique: true
    ignoreNulls: false
    columns: [
      ReadOnlyColumnDescriptor@50fe837a[
        column: Column@636e8cc[
          name: (EXART) ARCodArt
          type: 0xa (TEXT)
          number: 0
          length: 30
          variableLength: true
          compressedUnicode: true
          textSortOrder: SortOrder[3082(0)]
        ]
        flags: 1
      ]
    ]
    initialized: false
    pageCache: IndexPageCache@3a62c01e[
      pages: (uninitialized)
    ]
  ]
] is not usable for indexed lookups due to unsupported collating sort order SortOrder[3082(0)] for text index
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.createCursor(IndexCursorImpl.java:111)
    at com.healthmarketscience.jackcess.CursorBuilder.toCursor(CursorBuilder.java:302)
    at net.ucanaccess.commands.IndexSelector.getCursor(IndexSelector.java:150)
    at net.ucanaccess.commands.CompositeCommand.persist(CompositeCommand.java:83)
    at net.ucanaccess.jdbc.UcanaccessConnection.flushIO(UcanaccessConnection.java:268)
    at net.ucanaccess.jdbc.UcanaccessConnection.commit(UcanaccessConnection.java:169)
    at cultifortgestio.EntradaEixidaDades.Insercio(EntradaEixidaDades.java:76)

如您所见,Access 根本没有改变 sortOrder,我认为应该是 1033,并且一直是 3082。有没有办法改变这个?正如我所说,更改 Access 并执行压缩和修复数据库对我不起作用。

【问题讨论】:

  • 我无法在 Access 2010 下重新创建您的问题。在我将“新数据库排序顺序”从“西班牙现代”更改为“常规 - 旧版”并执行压缩和修复数据库后,排序顺序不再是 3082 并且 UCanAccess 可以更新该列。您确定您正在对正确的数据库文件进行压缩和修复吗?您可以随时尝试删除主键并重新创建它,看看是否有帮助。
  • 我无法删除它并重新创建它,因为另一个程序在客户端环境中访问它。这些是我更改 SortOrder 的步骤:我在 access 中打开 de DB,选择表 EXART,然后将其更改为一般。之后,我做了一个压缩和修复数据库,我使用 Access 2007 版本。可能是数据库创建日期是 1998 年的问题?
  • 我不确定您所说的“我选择表 EXART 然后将其更改为常规”是什么意思,但是您需要更改整个数据库的排序顺序,而不仅仅是一个表。您需要进入访问选项(屏幕截图here),将“新数据库排序顺序”更改为“常规 - 旧版”,然后执行压缩和修复数据库。
  • 同样的结果,sortOrder一直保持在3082,不知道为什么,开始厌倦MDB的了。
  • 完成,美国英语的 Access 语言工作,谢谢,正如你所说,我不知道西班牙语变体发生了什么

标签: java ms-access netbeans ucanaccess


【解决方案1】:

与其他类似情况一样,解决方案是更改受影响数据库的排序顺序。这通常由

  • 在 Access 中打开数据库,
  • 将“新数据库排序顺序”(参见下面的屏幕截图)更改为“常规 - 旧版”,然后
  • 执行压缩和修复数据库操作。

但是,在这种情况下,问题在于 Windows 区域设置为“西班牙语”,因此 Access 中的“常规”排序选项不会映射到 UCanAccess(实际上是 Jackcess)可以更新的值。提问者的解决方法是暂时将他们的 Windows 语言环境更改为“English ...”,执行上述步骤更改数据库排序顺序,然后将 Windows 语言环境更改回来。

对于那些不想弄乱他们的 Windows 区域设置的人,另一种解决方案是让 UCanAccess 通过 newDatabaseVersion 选项创建一个新的空数据库文件,例如,

String connStr = "jdbc:ucanaccess://C:/someplace/new.accdb;newDatabaseVersion=V2010";
try (Connection conn = DriverManager.getConnection(connStr)) {
}

在 Access 中打开新数据库,然后使用导入功能将旧数据库文件中的表传输到新数据库中。 UCanAccess 创建的数据库文件将具有与更新操作兼容的排序顺序。

【讨论】:

  • 感谢您提供 newDatabaseVersion 选项
猜你喜欢
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多