我在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。
有没有人找到任何解决方案?提前感谢任何回复
答案 0 :(得分:2)
我得到了Emarcadero的回复,它对我有用:
“问题不在FireDAC中,而是在SQL Server ODBC驱动程序中 SQLPrimaryKeys函数。它无法使用目录名称 包含一个点。 FireDAC使用此功能获取主键字段 对于结果集,当fiMeta包含在FetchOptions.Items中时。所以, 作为解决方法/解决方案,请从中排除fiMeta FetchOptions.Items“。
答案 1 :(得分:2)
我能够重现你在这里所描述的内容。我最终得到了metainformation命令,特别是SQLPrimaryKeys ODBC函数调用。我使用连接到Microsoft SQL Server Express 12.0.2000.8的本地数据库服务器实例的SQL Server Native Client 11.0驱动程序。
当我尝试通过具有默认设置的TFDQuery组件实例执行以下SQL命令(创建 TEST_2.0 数据库)时(链接的连接对象留有空数据库连接参数) )在德尔福东京申请:
SELECT * FROM [TEST_2.0].INFORMATION_SCHEMA.TABLES
在 CatalogName 参数设置为 TEST_2.0 (来自metainformation语句方法{{中)调用SQLPrimaryKeys函数时,我引发了此异常3}}):
[FireDAC] [Phys] [ODBC] [Microsoft] [SQL Server Native Client 11.0] [SQL 服务器]无法在sys.servers中找到服务器'TEST_2'。验证 指定了正确的服务器名称。如有必要,执行存储 过程sp_addlinkedserver将服务器添加到sys.servers。'。
我的下一次尝试是自然地将 CatalogName 参数值修改为 [TEST_2.0] ,同时进行调试,但即使失败也有类似的原因(只是名称失败< strong> [TEST_2 ),所以对我来说,使用我使用的驱动程序的Execute ODBC函数实现似乎无法正确处理虚线 CatalogName 参数值(似乎在点之后忽略一切。
唯一的解决方案似乎只是修复ODBC驱动程序。解决方法我建议不使用数据库名称中的点(如SQLPrimaryKeys中所述)。另一个可能是阻止FireDAC获取数据集对象元数据(通过从this thread选项集中排除fiMeta选项)。这将使您自己负责提供数据集对象元数据(此时只有主键定义)。