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

时间:2018-04-10 16:06:00

标签: delphi firedac anydac

我在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。

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

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选项)。这将使您自己负责提供数据集对象元数据(此时只有主键定义)。