0

当 FireDAC -> FDQuery 组件尝试使用“。”从数据库中选择数据时,我遇到了这个问题。(点)在它的名字中。

数据库名称是 TEST_2.0 并且打开数据集的错误说:

在 sys.servers [...] 中找不到服务器“TEST_2”

我试过{TEST_2.0}(大括号)和[TEST_2.0](方括号)。将 QuotedIdentifiers (Format Opetions) 属性设置为 True 似乎也不能解决问题。在 SQL 查询中,我可以添加 'SET QUOTED_IDENTIFIER ON;' 但这会中断对数据集的插入。

FDConnection 组件可以使用 MSSQL 驱动程序毫无问题地连接到该服务器和该数据库。似乎是数据集没有处理它。UniDAC 似乎可以毫无问题地处理所有事情。

我正在使用 RadStudio 10.2。

有没有人找到任何解决方案?提前感谢您的任何回复

4

2 回答 2

2

我收到了 Emarcadero 的回复,它对我有用:

“问题不在于 FireDAC,而在于 SQL Server ODBC 驱动程序 SQLPrimaryKeys 函数。它无法使用包含点的目录名称。当 fiMeta 包含在 FetchOptions 中时,FireDAC 使用此函数获取结果集的主键字段。项目。因此,作为一种解决方法/解决方案,请从 FetchOptions.Items 中排除 fiMeta。”

于 2018-04-11T11:03:15.573 回答
2

怎么了?

我能够重现您在此处描述的内容。我结束了元信息命令,特别是SQLPrimaryKeys ODBC 函数调用。我使用 SQL Server Native Client 11.0 驱动程序连接到本地数据库服务器实例 Microsoft SQL Server Express 12.0.2000.8。

当我尝试在 Delphi Tokyo 应用程序中通过具有默认设置(链接连接对象留有空数据库连接参数)的TFDQuery组件实例执行以下 SQL 命令(创建TEST_2.0数据库)时:

SELECT * FROM [TEST_2.0].INFORMATION_SCHEMA.TABLES

当调用SQLPrimaryKeys函数并将CatalogName参数设置为TEST_2.0(从元信息语句方法Execute中)时,我得到了这个异常:

[FireDAC][Phys][ODBC][Microsoft][SQL Server Native Client 11.0][SQL Server]在 sys.servers 中找不到服务器“TEST_2”。验证是否指定了正确的服务器名称。如有必要,执行存储过程 sp_addlinkedserver 将服务器添加到 sys.servers.'。

我的下一次尝试是在调试时自然地将CatalogName参数值修改为[TEST_2.0],但即使这样也以类似的原因失败(只是名称[TEST_2失败),所以对我来说似乎SQLPrimaryKeys ODBC 函数实现与驱动程序我用过的不能正确处理带点的CatalogName参数值(它似乎忽略了点之后的所有内容)。

我能做些什么?

唯一的解决方案似乎只是修复 ODBC 驱动程序。我建议的解决方法是不在数据库名称中使用点(如本线程中所讨论的)。另一个可能是阻止 FireDAC 获取数据集对象元数据(通过从Items选项集中排除fiMeta选项)。这将为您带来自己提供数据集对象元数据的责任(此时只有主键定义)。

于 2018-04-11T11:04:54.367 回答