Firedac - 连接到Firebird 2.5嵌入式

时间:2014-08-16 14:47:55

标签: delphi firebird delphi-xe6 firedac firebird-embedded

无论我做什么,我似乎无法使用Firedac连接到Firebird 2.5嵌入式数据库。 有趣的是,昨天它似乎工作,现在突然间它不会。

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

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

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

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

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

所以如果有人有直接回答如何做到这一点的经验(没有链接,请...我已经看过并尝试过所有这些)我会非常感激。尝试建立一个简单的连接几天是非常愚蠢的。我也尝试过与Unidac类似的结果。所以在我第99次精神崩溃之前,我该怎么办才能完成连接?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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

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

如果你没有在FireDac中指定供应商lib,它会尝试加载第一个可用的dll,这很可能是fblclient.dll(来自System32?)。

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

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

此致 Alexey Kovyazin

IBSurgeon