通过嵌入式dll

时间:2015-10-02 07:53:46

标签: database firebird embedded-database firebird-embedded

我对数据库编程比较陌生。我使用firebird 2.5和IBPP。我至少有两个使用sampe firebird数据库的应用程序。我想连接嵌入式变体(fbembedded.dll,icudt30.dll,icuc30.dll),因为它将成为客户PC上的主机应用程序。我写了一个简单的测试应用程序从数据库中读取数据并同时启动此应用程序三次。一切正常。

但是,如果这种情况一直有效,并且如果这种情况稳定而没有损坏数据的危险,那么现在我并不感到害羞。因为当我使用查看器ibexpert与数据库建立连接时,我的测试应用程序无法连接到数据库。另外,文档sais(firebirdEmbedded):

  

您可以同时运行多个嵌入式服务器,以及   您可以将多个应用程序连接到同一个嵌入式服务器。   已经运行的常规服务器也不是问题。   但是,嵌入式服务器会锁定自己的数据库文件   成功连接后专用。这意味着你不能   从多个嵌入式服务器进程访问同一数据库   同时(或从任何其他服务器,一旦嵌入式服务器具有   锁定文件)。

文件记录是否正确?我的示例应用程序似乎表明相反。我不久前在我的电脑上安装了一个firebird超级服务器,但在测试之前已将其卸载。

1 个答案:

答案 0 :(得分:4)

您引用的文档基于Firebird 2.0或2.1。 '服务器'在Firebird 2.5中更改了Firebird Embedded on Windows的体系结构。在Firebird 2.5之前,Firebird Embedded在Windows上表现为SuperServer,这意味着它需要对数据库文件的独占访问。

从Firebird 2.5开始,Firebird Embedded在Windows上的行为类似于SuperClassic服务器模型,这意味着它使用对数据库文件的共享访问,并且Classic中的多个Firebird Embedded应用程序和Firebird服务器可以访问同一个数据库或SuperClassic服务器型号(但不是SuperServer),如果它们在同一台机器上运行 。这种变化的缺点是嵌入式应用程序需要能够创建,读取和写入共享数据库锁定文件(在C:\ ProgramData \ Firebird中)。

您不必担心损坏:如果嵌入式引擎无法访问共享锁文件,则连接将失败。您无法与IB Expert连接的原因可能是您尝试使用SuperServer模型(需要独占访问权限)通过Firebird服务器进行连接。

另请参阅Firebird 2.5发行说明:Changes in the Firebird Engine

  

Windows库中的嵌入式服务器 fbembed.dll 现在使用Superclassic,而不是之前的Superserver,从而将其模型与POSIX上Superclassic的本地连接统一。以前限制与单个应用程序空间的连接的数据库文件锁由全局锁定表替换,该表允许从不同的嵌入式服务器模块同时访问同一数据库。这有助于并发调试应用程序和使用本机实用工具,如 gbak gstat 等。