FireDAC (FDQuery) - 名称中带有点的数据库



当FireDAC ->FDQuery组件尝试从数据库中选择带有"的数据时,我遇到了这个问题。(点)在其名称中。

数据库名称为 TEST_2.0,打开数据集时出现错误:

在系统服务器中找不到服务器"TEST_2" [...]

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

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

我正在使用RadStudio 10.2。

有没有人找到解决这个问题的方法?提前感谢您的任何回复

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

"问题不在于FireDAC,而在于SQL Server ODBC驱动程序。 SQLPrimaryKeys 函数。它无法使用目录名称 包含一个点。FireDAC使用此函数获取主键字段 对于结果集,当 fiMeta 包含在 FetchOptions.Items 中时。所以 作为解决方法/解决方案,请将 fiMeta 排除在外 FetchOptions.Items.">

出了什么问题?

我能够重现您在此处描述的内容。我最终选择了元信息命令,特别是SQLPrimaryKeysODBC函数调用。我已使用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(从元信息语句方法执行中)时,我遇到了此异常:

[

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

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

我能做什么?

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

最新更新