1

无论我做什么,我似乎都无法使用 FireDAC 连接到 Firebird 2.5 嵌入式数据库。有趣的是,昨天它似乎可以工作,现在突然就不行了。

为了弄清楚为什么它突然停止工作,我开始重建一个干净的项目,这样我就可以逐步弄清楚发生了什么。我添加(复制)了从 Firebird 下载的包的全部内容到我的应用程序目录和数据库本身。

为了避免文件夹问题,我设置了 Delphi 环境选项以将所有文件(和 exe)放在同一目录中。然后我使用在 Firebird *.doc 文件夹中找到的建议并将 fbembed.dll 重命名为 fbclient.dll。(在一些关于我读到 Firedac 需要 fbembed.dll 文件的问题的 FireDAC Q&A 中。好吧,我已经尝试了两种方法,但无论如何它都不起作用)。但让我坚持 fbclient.dll 的第一个问题。

为了建立连接,我在数据模块上放置了一个 FDPhysFBDriverLink1 和一个 FDConnection1。

现在 FDPhysFBDriverLink1:它的 BaseDriverID 是 FB。对于 DriverID,我尝试了两个建议:首先使用“FB”,然后提供 fbclient.dll 的完整路径。似乎没有任何区别。

当我转到 Firedac 连接编辑器并输入数据库文件的路径时,我收到“无法加载供应商库(fbclient.dll 或 fbembed.dll)”错误。但是这两个文件都在应用程序 exe 文件夹中(就像 Embarcadero 网站上建议的那样)。那么,FireDAC 在哪里寻找文件?我对 Firebird 和 FireDAC 有点厌倦了,因为他们不能简单地解释必须做什么才能使连接成功。他们给出的只是一些模糊的选项,它们都不起作用。加这个加那个,最后失败。

因此,如果有人有如何通过直接回答来做到这一点的经验(请不要链接,我已经看过并尝试过所有链接),我将非常感激。尝试几天建立一个简单的连接真的很愚蠢。我也尝试过使用 UniDAC 获得类似的结果。我必须做什么才能完成连接?

4

2 回答 2

8

问题似乎是这样的: FDPhysFBDriverLink1 需要此信息:

BaseDriverID=FB
DriverID=FB 
VendorLib=C:\Users\***\Documents\Delphi\FIREBIRD\fbembed.dll

设置后,我可以使用以下参数连接 FDConnection1:

DriverID=FB
Database=C:\Users\***\Documents\Delphi\FIREBIRD\MYDB.FDB
User_Name=sysdba
Password=masterkey 
Protocol=local
于 2014-08-16T17:01:05.677 回答
2

Firebird 是一个客户端-服务器系统——它具有服务器部分(fbserver.exe 或 fb_inet_server.exe)和客户端部分(fbclient.dll)。因此,当您连接到 Firebird 的普通(非嵌入式)实例时,您应该将 fbclient.dll 指定为客户端库。

Embedded Firebird 是单个 dll 中的服务器和客户端的组合——它们都被编译成 fbembed.dll(您可以查看它的大小并与 fbclient.dll 进行比较)。

当您使用嵌入式服务器时,您需要将 fbembed.dll 指定为客户端库,因此,您将在代码中嵌入 Firebird 服务器(即代码,负责处理 SQL 查询)。

如果您没有在 FireDAC 中指定供应商库,它将尝试加载第一个可用的 dll,这很可能是 fbclient.dll(来自 System32?)。

FireDAC 以及任何其他客户端组件不了解您正在使用的 Firebird 的体系结构 - 它只是加载指定的 dll 并调用其 API。它提供了极大的灵活性 - 您可以连接到 Embedded,或 SuperServer/Classic/SuperClassic 实例,只需更改客户端库(并调整连接字符串)。

显而易见但仍然很重要的一点是 - Embedded 不能用于远程连接(连接字符串如下:severname:Disk:\Path\Database.fdb)。

于 2014-08-18T06:19:38.690 回答