Advantage ADT 文件连接中的归类错误 5175

Collation error 5175 in a conection to Advantage ADT files

我正在 VB.NET 中开发应用程序,它必须连接到 table Advantage (ADT)

我使用以下连接字符串:

DSN=kantechX;DataDirectory=C:\DB\Data;SERVER=NotTheServer;
Compression=Never;DefaultType=Advantage;Rows=False;
collation=SPANISH_VFP_CI_AS_1252;AdvantageLocking=ON;Locking=Record;
MemoBlockSize=64;MaxTableCloseCache=5;ServerTypes=1;
TrimTrailingSpaces=False;EncryptionType=RC4;FIPS=False

建立连接后生成以下错误:

Error 7200: AQE Error: State = HY000; NativeError = 5175 [iAnywhere Solutions] [SQL Advantage] [ASA] Error 5175: The index file was created with a different collation sequence than is Currently Being used. Table name: Card

我们还尝试使用 Advantage Data Architect 1110 进行连接,当 table 打开时显示此错误:

Error 7200: AQE Error: State = HY000; NativeError = 5209 [iAnywhere Solutions] [SQL Advantage] [ASA] Error 5209: Different collations are used, Which can result in poor query optimization. Table collation: (none), collation index: SPANISH_VFP_CI_AS_1252 Table name: Card

Architect 要求重新索引 table,当我们这样做时,它不显示警报 2,但是当我们尝试从 vb.net 连接 ODBC 时,异常保持第一条错误信息。

我检查了 adslocal.cfg 文件,但没有发现任何有用的东西

我该如何解决这个问题?

您从哪里获得 "collation=" 设置? ADS ODBC 驱动程序不接受该选项。

The official documentation 有一个 "Language=" 设置,您可能想尝试一下。

Language=OEM | ANSI | named collation

If this setting is provided, it overrides the CharSet setting. It can be used to specify one of the dynamic collations such as GENERAL_VFP_CI_AS_1252 for Visual FoxPro compatibility. These collations can be used with Advantage ADT tables and Visual FoxPro (VFP) tables.

感谢 Jens link 和我在 google 上找到的其他信息,我终于可以解决问题了。

步骤如下:

  1. 备份文件(以防万一)

  2. 在要连接的 ADT table 所在的机器上安装 Advantage Architect。

  3. 下载并安装 .NET 数据提供程序(保留语言 [Current Languaje] 和编码 [USA] 的默认设置)我们有 .NET 的解决方案

  4. 在我们有 .NET 解决方案的机器上下载并安装 Advantage ODBC 驱动程序(保留语言 [Current Languaje] 和编码 [USA] 的默认设置)。

    4.1 尝试安装32位版本或64位版本,虽然我的系统是64位我必须安装32位才能正常工作

  5. 打开 Architect 并创建与现有 tables(ADT 文件)的新连接

  6. 在 Architect 中双击打开 table

    6.1 出现一个警告,表明 table 是用不同的语言编码的,如果你想改变连接参数(永久,只有这一次或忽略),我们说我们想要永久更改(如果不是永久选中,我们不能执行下面的步骤)

    6.2 这里发生了两种情况之一:

    -它显示一个警告,表明 table 的索引在另一个排序规则中并建议重新索引(这正是需要做的)

    -表示table正在使用中,打不开,此时必须将文件分开复制,重复5、6步,然后覆盖被屏蔽的文件。

  7. 只是为了安全我们会执行一个允许多个排序规则的命令 index EXECUTE PROCEDURE sp_AllowMultipleCollations ('', true), 第一个参数为空,'',表示适用于所有encodings不是特别像'Spanish_vfp_ci_as_1252',第二个参数true,表示自由限制。

    7.1 到 运行 此命令在 Architect

  8. 的菜单中查找 运行 的选项或使用 SQL 创建手动查询
  9. 打开Windows我们有解决方案的机器的ODBC连接,使用ODBC Stream Advantage连接ADT table创建一个新连接,默认语言是ANSI,更改评级警报步骤6.1、指定配置是本地服务器。
  10. 在 .NET 中,我们使用连接字符串创建一个新的 ODBC 连接,指定创建的 ODBC 在 Windows 中的使用位置和步骤 6.1
  11. 的语言

DSN = [在 Windows 中创建的 ODBC]; DataDirectory = [ADT 文件的路径];服务器 = NotTheServer;压缩=; 默认类型 = 优势;行数=假;语言=SPANISH_VFP_CI_AS_1252; AdvantageLocking = ON;锁定=记录; MemoBlockSize = 64; MaxTableCloseCache = 5;服务器类型 = 1; TrimTrailingSpaces = 假;加密类型 = RC4; DD密码 = kantech; FIPS = 假; TLSCiphers = AES128-SHA: AES256-SHA: RC4-MD5

  9.1 if when You run the application doesnt allow use odbc for any reason maybe you you must add the advantage DLL in the solution references (Right click in the solution folder > add references > search in the COM for Advantage) .