【问题标题】:Firebird embedded installation issue: library could not be determinedFirebird嵌入式安装问题:无法确定库
【发布时间】:2017-12-30 15:37:46
【问题描述】:

我一直在编写一个打开 Firebird 数据库的小型 Python 应用程序。
为了实现这个目标,我正在使用 Firebird 嵌入式 2.5.7.27050,64 位。

虽然,每当我尝试使用 Python 连接数据库文件,出现以下错误:

Traceback (most recent call last):
  File "C:\Matteo\CMakeR\initApp.py", line 36, in <module>
    connection = connectToDB(path)
  File "C:\Matteo\CMakeR\initApp.py", line 10, in connectToDB
    charset='WIN1252'
  File "C:\Program Files\Python36\lib\site-packages\fdb\fbcore.py", line 682, in connect
    load_api(fb_library_name)
  File "C:\Program Files\Python36\lib\site-packages\fdb\fbcore.py", line 181, in load_api
    setattr(sys.modules[__name__],'api',fbclient_API(fb_library_name))
  File "C:\Program Files\Python36\lib\site-packages\fdb\ibase.py", line 1398, in __init__
    raise Exception("The location of Firebird Client Library could not be determined.")
Exception: The location of Firebird Client Library could not be determined.
>>> 

FB 客户端似乎没有正确安装。
但是我非常仔细地按照 doc 文件夹中的安装指南进行操作。
这是我的应用程序文件夹:

04/01/2018  15:11    <DIR>          .
04/01/2018  15:11    <DIR>          ..
04/01/2018  14:57               133 aliases.conf
03/01/2018  14:20                 0 CMakeR.conf
02/01/2018  13:40             2.480 DB in chiaro.odb
04/01/2018  14:57    <DIR>          doc
30/12/2017  17:32               191 editXLS.py
30/12/2017  17:24            23.032 Export.xlsx
04/01/2018  14:57         5.664.256 fbclient.dll
04/01/2018  14:57         5.664.256 fbembed.dll
04/01/2018  14:46         5.199.849 Firebird-2.5.7.27050-0_x64_embed.zip
04/01/2018  14:57            27.661 firebird.conf
04/01/2018  14:57           149.440 firebird.msg
04/01/2018  14:57         5.664.256 gds32.dll
04/01/2018  14:57             8.192 ib_util.dll
04/01/2018  14:57         1.558.016 icudt30.dll
04/01/2018  14:57           575.488 icuin30.dll
04/01/2018  14:57           935.936 icuuc30.dll
04/01/2018  14:57            26.023 IDPLicense.txt
04/01/2018  15:09             1.583 initApp.py
04/01/2018  14:57    <DIR>          intl
04/01/2018  14:57            24.301 IPLicense.txt
04/01/2018  14:57               524 Microsoft.VC80.CRT.manifest
30/12/2017  17:24            28.625 Modulo CMR.xlsx
04/01/2018  14:57         1.097.728 msvcp80.dll
04/01/2018  14:57           822.784 msvcr80.dll
04/01/2018  14:57             2.333 Readme.txt
02/01/2018  13:40        50.790.400 testArchive.eft
04/01/2018  14:57    <DIR>          udf

【问题讨论】:

  • 事情不会神奇地停止工作,那么发生了什么变化?
  • @MarkRotteveel 我真的不知道,因此我感到非常尴尬。我希望有人能告诉我如何配置 Firebird Embedded。我确实阅读了文档,并且做了他们提到的所有事情。
  • 首先尝试将您的步骤追溯到它工作的时间,否则我建议您将您的问题发布到 firebird-python 邮件列表。我不经常使用 Firebird 嵌入式或 Python,所以我不知道所有的来龙去脉。
  • @MarkRotteveel 感谢您的评论。我会尝试写信给邮件列表,我会告诉你的。再次感谢。
  • 一个最简单的想法是他更改了 Python 实现,现在使用 32 位 Python 引擎运行他的脚本,而不是之前运行脚本的 64 位。如果他可能使用 Jython 之类的东西,那么进行这样的切换就像将不同的 JVM 设置为默认值一样简单:-D

标签: python dll firebird firebird-embedded client-library


【解决方案1】:

感谢大家帮我解决这个问题。
感谢 Arioch 'The 的建议,我终于找到了解决方案。

使用Microsoft Process Monitor 我能够检测到我的应用程序正在寻找客户端库的文件夹。然后我注意到它们与 PATH 环境变量中指定的文件夹相同。
所以我将包含我的 Python 文件的文件夹添加到 PATH 变量中,一切终于解决了。

【讨论】:

  • 添加两个可能的技巧:1) 修改您的 Windows 全局 PATH 以解决一个特定应用程序的问题似乎是一个相当侵入性的更改。我认为您可以修改您的应用程序以更改它自己的应用程序本地副本PATH,这样它既不依赖于全局操作系统设置,也不会影响其他程序。 2)使用Windows实现细节,你也许可以在连接数据库之前加载所需的DLL(在你的情况下应该是fbEmbed.dll,但不知道实际上尝试了哪个fdb),并在连接后卸载它 - Win32调用@987654325 @ 和 FreeLibrary 进行热身
【解决方案2】:

我使用来自 .NET 的嵌入式 FB,但我仍然将 firebird.msg 文件保存在与应用程序相同的文件夹中。并且 intl & udf 文件夹没有嵌套在 FBE 或某些文件夹中。我会说您将文件夹设置为 FBE 并且它也在寻找那里的二进制文件。 这也看起来像 supposed 的布局。

【讨论】:

  • 实际上在您发布的指南中,这与我读到的相同,顺便说一句,他们有一节讨论如何将 FB 文件放在其他地方。我做了那里提到的所有事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
相关资源
最近更新 更多