1

多年来,我们一直通过 Delphi后代组件成功地将Advantage Database Server 9.1 (Netware) 与 DBF/CDX 索引文件一起使用。TDataSet(这是统计/报告目的所需的遗留数据。)

几周前,我们从 Netware 切换到 Win2K8 作为我们的网络操作系统,并迁移到 ADS 9.1。SELECT这破坏了对服务器数据库执行查询的本地客户端的查询功能。

例如,下面的查询在 ARC32 的 SQL 窗口中使用 ADS 9.1 的 Netware 版本运行良好,运行时与以下中的空闲表的本地连接C:\Data

INSERT INTO MyLocalDB 
  SELECT TOP 10 * FROM [\\MyServer\Data\MyRemoteDB.dbf] WHERE somecondition

相同的查询使用映射到服务器目录的驱动器来工作:

INSERT INTO MyLocalDB 
  SELECT TOP 10 * FROM [S:\Data\MyRemoteDB.dbf] WHERE somecondition

请注意,它是一个自由表- 它不是数据字典的一部分。它是一个空闲表,位于对存储它的服务器上的文件夹具有读/写访问权限的位置。本地客户端连接的文件夹是完全可访问的(它用于每天测试应用程序,使用与数据的本地连接)。正常的应用程序可以在客户端上针对本地连接数据或远程连接数据运行而不会出现任何问题。只是来自本地连接查询以检索服务器数据是一个问题,并且之前它工作正常。唯一的区别是操作系统和 ADS 从 Netware 切换到 Win2k8,根据文档(请参阅下面引用的帮助文件内容),它应该仍然可以工作。

切换到 ADS 9.1 的 Windows 版本后,上述两个查询都失败并显示

错误 7008:无法打开指定的表、备忘录文件或索引文件。表名 \MyServer\Data\MyRemoteDB.dbf(或 S:\Data\MyRemoteData.dbf)。

本周我们在系统上升级到 ADS 10.10(以及 ADS 10.10 TDataSet10.10 组件),但上述查询仍然失败。

这在 Windows 版本的 ADS 下根本不支持吗?该文档使第一个看起来应该可以工作:

表名路径中的驱动器号只能用于 Advantage Local Server。当使用适用于 NT 或 NetWare 的 Advantage Database Server 时,完全限定的路径必须使用 UNC(例如,“\server\volume\path\table”),因为在客户端驱动器号没有意义的服务器上解析 SQL 语句。请注意,像这样引用的表必须用双引号或 [](括号)括起来,因为它们包含非标准字符。

UNC 路径正确地用[]括号括起来,并且路径或表名中的任何位置都没有空格。我尝试过添加和不添加.dbf扩展名;错误消息保持不变。

4

2 回答 2

3

我怀疑您遇到了专有锁定的更改。对 Advantage Database Server 进行了更改,以使默认行为在使用专有锁定时完全拒绝对其他应用程序的访问。您可以使用名称有点混乱的NONEXCLUSIVE PROPRIETARY LOCKING配置设置来禁用它。我认为,如果您将该配置值设置为 1,那么它将按您的意愿工作。

将该配置设置更改为 1 并重新启动 ADS 后,本地服务器连接应该能够获得对服务器已打开的 DBF 表的只读访问权限。

于 2013-03-22T15:36:57.367 回答
0

假设您使用的是远程 ADS 服务器(不是 ALS),您必须使用服务器端别名来获得此功能:

http://devzone.advantagedatabase.com/dz/webhelp/advantage9.0/extprocs/server_side_aliases.htm

将其放入C:\adsserver.ini文件中MyServer(或您的 ADS 日志所在的任何位置):

[ServerAliases]
Data=X:\Data

表文件X:\Data的位置在哪里。MyRemoteDB.dbf

但是,这只有在还有共享或您已设置IgnoreRights设置时才能正常工作:

服务器端别名必须始终与 Advantage 客户端的“忽略权限”设置结合使用。有关详细信息,请参阅数据库安全主题。否则将导致文件存在检查,这将使用来自客户端的服务器端别名并失败,从而导致 AE_FILE_NOT_FOUND (5004) 错误。

对于 ALS,您可以只使用普通的 Windows 文件共享。

于 2013-03-22T13:48:22.197 回答