1

我是 Firedac 的新手,但不是 Delphi

我可以与 SQL Server 建立连接,当我连接时,没有问题。我得到连接OK。它适用于代码、向导和 FireDAC 资源管理器。

数据库的名称是:

C:\PROGRAM FILES (X86)\MICROSOFT SQL SERVER\MSSQL.1\MSSQL\DATA\3410b539-431f-4dff-ad0d-a574d1b13498.MDF

我被一个简单的查询困住了。

SELECT * 
FROM Account;

此查询在 FireDac 资源管理器中有效,但不适用于我的程序,我收到以下错误:

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

当我尝试从 Delphi 中的 UI 执行此操作时,我也遇到了同样的错误。

为了尝试查询,我将 TFDQuery 放到表单上,连接属性自动设置为表单上的唯一连接。然后我使用查询编辑器设置查询,单击执行时出现错误。

使用这样的代码:

FDConnection1.Connected := true;
FDQuery1.Close;
FDQuery1.SQL.Text := 'select * from Account;';
FDQuery1.Active := True;

调试程序时,将查询设置为活动时出现错误。

我看到错误消息中的数据库名称不完整。但是在组件设置里面是完整的

请指教,


我尝试了一些额外的测试:如果我从 UI 编辑器运行查询(双击 FDConnection、Tab SQL 脚本),输入查询,它可以工作:-)。

但是当我尝试在 FDQuery 组件上执行此操作时,将连接分配给先前的 FDConnection,我得到了同样的错误。就像缺少一些参数一样。

4

2 回答 2

0

我收到了 Embarcadero 工程师的回复:

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

于 2018-04-11T11:19:14.787 回答
0

您使用的是 SQL 数据文件的位置,而不是 SQL 数据库的名称。

如果您不知道名称,您可以使用向导尝试找到它。

(抱歉还不能添加评论。Jens 在评论中也提到了这一点)

更新:如果这确实是名称,请尝试将其包含在 [ ] 中。

于 2015-11-09T03:21:30.673 回答