【问题标题】:Query with SQL Server 2008 R2 with FireDAC使用 FireDAC 使用 SQL Server 2008 R2 进行查询
【发布时间】:2015-11-06 21:45:28
【问题描述】:

我是 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,我得到了同样的错误。好像缺少一些参数。

【问题讨论】:

  • 对不起德尔福“西雅图”。它可以在带有 ADOConnetion + ADOQuery 的 UI 中正常工作。嗯,我必须考虑切换到 ADO。什么是最好的速度,设施..?你怎么看?
  • “你怎么看?” FireDAC 似乎很好,但我更喜欢 ADO 的“数量安全”(我指的是一般的 ADO 用户数量,而不仅仅是 Delphi 用户)来解决问题。 FireDAC 对于一个人的努力来说非常好,直到你遇到问题,在这种情况下,它的代码和抽象程度可能是不可理解的。不过,作者在 EMB NG 上非常活跃。
  • 您如何配置 FireDAC 连接?您没有提供任何相关信息,甚至没有解释您在哪里(或如何)执行SELECT在组件设置里就完成了其实没啥用。
  • 为什么使用文件名作为数据库名?通常在连接到 MS SQL 时,您需要提供服务器的名称(DNS 或 ip)、用户名和密码。那么数据库名称将只是数据库的名称而不是数据库的文件名
  • 这是我的 SQL Server Provider=SQLOLEDB.1;Password=pass1234;Persist Security Info=True;User ID=sa;Initial Catalog=MOWD;Data Source=Dellserver 的连接字符串 如您所见数据库名称(初始目录)是 MOWD 而不是 MOWD 数据库的文件名

标签: sql-server delphi sql-server-2008-r2 firedac delphi-10-seattle


【解决方案1】:

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

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

(抱歉还不能添加cmets,这点Jens在cmets中也提到了)

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

【讨论】:

  • 正如我在之前的评论中所说,这确实是数据库名称。前程序员选择文件名,如文件路径。这是我在使用向导和使用 Microsoft SQL Server Management Studio 时看到的名称。
  • 将数据库名括在[ ]中
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多