怎么了?
我能够重现您在此处描述的内容。我结束了元信息命令,特别是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选项)。这将为您带来自己提供数据集对象元数据的责任(此时只有主键定义)。