Delphi 2009,带有 Oracle 的 DbExpress:无法加载 oci.dll

Posted

技术标签:

【中文标题】Delphi 2009,带有 Oracle 的 DbExpress:无法加载 oci.dll【英文标题】:Delphi 2009, DbExpress with Oracle : Unable to load oci.dll 【发布时间】:2009-01-09 08:08:16 【问题描述】:

我已经设置了一个演示来测试 datasnap 2009,但我遇到了 dbexpress 的问题。

dbexpress 错误消息,(在设计时或运行时相同): “无法加载 oci.dll 库(错误代码 127)。系统路径中可能缺少 OCI.dll 库。”

我使用的是 Oracle 8.0.5。 oci.dll (c:\orant\BIN) 的路径位于我的系统路径中,位于该行的前面。我也安装了 Delphi 2005,完全相同的配置也可以正常工作。我已经移动了 dbexpress delphi 2005 相关文件,我已经重启了很多次,试图复制 c:\windows\system 或 c:\windows\system32\ 中的 oci.dll,每次都出现同样的错误。

我的解决方案已经用完了。也许这与我也安装了 D2005 的事实有关...?

有人可以帮帮我吗?

谢谢

编辑: 这是事件日志,在构建过程中的 IDE 中,我们可以看到它 FOUND 和 LOAD OCI.dll,所以错误(Cannot load oci.dll)可能不是一个好错误:

Début du Thread : ID du thread : 5588. Processus Server.exe (5548)

Début du processus : C:\Documents and Settings\frplante\Mes documents\Développement\Projets\Démo DataSnap2009\Server\Server.exe. Adresse de base : $00400000. Processus Server.exe (5548)

Chargement du module : Server.exe. Contient des infos de débogage. Adresse de base : $00400000. Processus Server.exe (5548)

Chargement du module : ntdll.dll. Pas d'informations de débogage. Adresse de base : $7C910000. Processus Server.exe (5548)

Chargement du module : KERNEL32.dll. Pas d'informations de débogage. Adresse de base : $7C800000. Processus Server.exe (5548)

Chargement du module : OLEAUT32.dll. Pas d'informations de débogage. Adresse de base : $770E0000. Processus Server.exe (5548)

Chargement du module : ADVAPI32.dll. Pas d'informations de débogage. Adresse de base : $77DA0000. Processus Server.exe (5548)

Chargement du module : RPCRT4.dll. Pas d'informations de débogage. Adresse de base : $77E50000. Processus Server.exe (5548)

Chargement du module : Secur32.dll. Pas d'informations de débogage. Adresse de base : $77FC0000. Processus Server.exe (5548)

Chargement du module : GDI32.dll. Pas d'informations de débogage. Adresse de base : $77EF0000. Processus Server.exe (5548)

Chargement du module : USER32.dll. Pas d'informations de débogage. Adresse de base : $7E390000. Processus Server.exe (5548)

Chargement du module : msvcrt.dll. Pas d'informations de débogage. Adresse de base : $77BE0000. Processus Server.exe (5548)

Chargement du module : ole32.dll. Pas d'informations de débogage. Adresse de base : $774A0000. Processus Server.exe (5548)

Chargement du module : MSIMG32.dll. Pas d'informations de débogage. Adresse de base : $76310000. Processus Server.exe (5548)

Chargement du module : VERSION.dll. Pas d'informations de débogage. Adresse de base : $77BD0000. Processus Server.exe (5548)

Chargement du module : COMCTL32.dll. Pas d'informations de débogage. Adresse de base : $77390000. Processus Server.exe (5548)

Chargement du module : SHLWAPI.dll. Pas d'informations de débogage. Adresse de base : $77F40000. Processus Server.exe (5548)

Chargement du module : wxvault.dll. Pas d'informations de débogage. Adresse de base : $10000000. Processus Server.exe (5548)

Chargement du module : PSAPI.DLL. Pas d'informations de débogage. Adresse de base : $76BA0000. Processus Server.exe (5548)

Chargement du module : MPR.dll. Pas d'informations de débogage. Adresse de base : $71A60000. Processus Server.exe (5548)

Chargement du module : detoured.dll. Pas d'informations de débogage. Adresse de base : $00370000. Processus Server.exe (5548)

Chargement du module : SHELL32.dll. Pas d'informations de débogage. Adresse de base : $7C9D0000. Processus Server.exe (5548)

Chargement du module : IMM32.dll. Pas d'informations de débogage. Adresse de base : $76320000. Processus Server.exe (5548)

Chargement du module : UxTheme.dll. Pas d'informations de débogage. Adresse de base : $5B090000. Processus Server.exe (5548)

Chargement du module : **dbxora.dll**. Pas d'informations de débogage. Adresse de base : $00FC0000. Processus Server.exe (5548)

Chargement du module : **OCI.dll**. Pas d'informations de débogage. Adresse de base : $003F0000. Processus Server.exe (5548)

Chargement du module : ORA805.dll. Pas d'informations de débogage. Adresse de base : $01430000. Processus Server.exe (5548)

Chargement du module : CORE40.dll. Pas d'informations de débogage. Adresse de base : $015C0000. Processus Server.exe (5548)

Chargement du module : NLSRTL33.dll. Pas d'informations de débogage. Adresse de base : $01620000. Processus Server.exe (5548)

Chargement du module : WINMM.dll. Pas d'informations de débogage. Adresse de base : $76AE0000. Processus Server.exe (5548)

Chargement du module : NL80.dll. Pas d'informations de débogage. Adresse de base : $01660000. Processus Server.exe (5548)

Chargement du module : WSOCK32.dll. Pas d'informations de débogage. Adresse de base : $71A10000. Processus Server.exe (5548)

Chargement du module : WS2_32.dll. Pas d'informations de débogage. Adresse de base : $719F0000. Processus Server.exe (5548)

Chargement du module : WS2HELP.dll. Pas d'informations de débogage. Adresse de base : $719E0000. Processus Server.exe (5548)

Chargement du module : OTRACE80.dll. Pas d'informations de débogage. Adresse de base : $01680000. Processus Server.exe (5548)

Chargement du module : NS80.dll. Pas d'informations de débogage. Adresse de base : $016B0000. Processus Server.exe (5548)

Chargement du module : nasns80.dll. Pas d'informations de débogage. Adresse de base : $016F0000. Processus Server.exe (5548)

Chargement du module : nz80.dll. Pas d'informations de débogage. Adresse de base : $01720000. Processus Server.exe (5548)

Chargement du module : NNFG80.dll. Pas d'informations de débogage. Adresse de base : $01770000. Processus Server.exe (5548)

Chargement du module : NNCI80.dll. Pas d'informations de débogage. Adresse de base : $01780000. Processus Server.exe (5548)

Chargement du module : NNG80.dll. Pas d'informations de débogage. Adresse de base : $01790000. Processus Server.exe (5548)

Chargement du module : NMP80.dll. Pas d'informations de débogage. Adresse de base : $017B0000. Processus Server.exe (5548)

Chargement du module : NPL80.dll. Pas d'informations de débogage. Adresse de base : $017C0000. Processus Server.exe (5548)

Chargement du module : NR80.dll. Pas d'informations de débogage. Adresse de base : $017D0000. Processus Server.exe (5548)

Chargement du module : NT80.dll. Pas d'informations de débogage. Adresse de base : $017F0000. Processus Server.exe (5548)

Chargement du module : NCR80.dll. Pas d'informations de débogage. Adresse de base : $01800000. Processus Server.exe (5548)

Chargement du module : NMS80.dll. Pas d'informations de débogage. Adresse de base : $01840000. Processus Server.exe (5548)

Chargement du module : NNFD80.dll. Pas d'informations de débogage. Adresse de base : $01850000. Processus Server.exe (5548)

Chargement du module : NNFN80.dll. Pas d'informations de débogage. Adresse de base : $01860000. Processus Server.exe (5548)

Chargement du module : NI80.dll. Pas d'informations de débogage. Adresse de base : $01870000. Processus Server.exe (5548)

Chargement du module : PLS805.dll. Pas d'informations de débogage. Adresse de base : $01880000. Processus Server.exe (5548)

Chargement du module : NDWSI80.DLL. Pas d'informations de débogage. Adresse de base : $01A80000. Processus Server.exe (5548)

Exception déclenchée à $7C812AEB. Classe d'exception TDBXError avec message '**Cannot load oci.dll library** (error code 127).  The oci.dll library may be missing from the system path'. Processus Server.exe (5548)

【问题讨论】:

【参考方案1】:

如果您切换 Oracle Homes,通常会出现此类问题,但您没有提及多次安装。

您可以使用 SqlPlus 连接到 Oracle 吗? This page 还建议在路径中检查 oci.dll 的多个副本(尤其是 windows\system32)

【讨论】:

我过去安装了 Oracle 10g Express Edition,但现在已卸载。如何检查我的 Oracle Home 是否有问题?我要检查注册表以确保卸载程序没有留下不好的东西 顺便说一句,我用 SQL+ 连接没有问题【参考方案2】:

Windows 错误代码 127 是一个未找到的过程,这可能意味着存在旧版本的 DLL,或者缺少函数之类的,

【讨论】:

嗨,是的,我想知道它是否是我的 oci.dll 的旧版本,但它适用于 D2005【参考方案3】:

我在使用 Oracle 10g XE 客户端时遇到问题。我的错是,我安装了多个客户端。在我卸载它们并安装正确的之后问题就消失了。

【讨论】:

嗨,谢谢,我要尝试重新安装我原来的 oracle 安装 我已经从旧的 oracle 引用中清除了注册表,从头开始重新安装了 Oracle 8.0.5,但问题仍然存在...... 可能是dbx oracle驱动有问题。例如,delphi 2009 有可能使用 D2005 中的 dbexpora.dll 吗?可以检查吗?并尝试检查是否可以使用其他组件集(例如 ADO)从 Delphi 2009 连接 Oracle。 感谢您的建议,我检查了,我卸载了D2005,我只有一个版本的dbxora.dll 我通过 ADO 连接没有问题【参考方案4】:

尝试将dll复制到程序的根文件夹中

【讨论】:

抱歉,我想不出其他可能的解决方案,也没有 datasnap 2009 可供测试。【参考方案5】:

我的 DBXpress 驱动程序也有类似的问题,我无法 100% 记得我做了什么来修复它,我的问题是将它从一台 Windows PC 移动到另一台(用于安装)。

这是我记得的尝试

将数据库 dll 与 dbexpress 中的 3 或 4 个 dll 放在与应用程序相同的目录中(因为我遇到的问题是 dbexpress dll(不是我的应用程序)找不到数据库 dll)

确保我安装了正确的 c++ 运行时库,因为我相信 DBX 驱动程序需要它。

将 windows 更新为 sp3(我猜你可以跳过这一步,因为你没有更换电脑)

【讨论】:

【参考方案6】:

如果您在 Windows Vista 上运行此程序,您是否检查过您的程序是否有权访问 oci.dll?

如果没有一个答案有效,那么您应该联系 CodeGear 以确认是否仍支持 Oracle 8.0.5。即使是驱动程序中的 Oracle 也不支持访问 8.0.5 好几年了。 Metalink上有一篇文章描述了特定客户端版本可以访问哪个版本的服务器。

【讨论】:

感谢您的建议,我正在运行 windows xp。我在使用 Oracle 10g XE 时遇到了同样的问题

以上是关于Delphi 2009,带有 Oracle 的 DbExpress:无法加载 oci.dll的主要内容,如果未能解决你的问题,请参考以下文章

Delphi - 在连接到 Oracle 并调用 Web 服务方法后关闭时 ntdll.dll 中的异常

Delphi 2009 - 未重新创建 res 文件

delphi中插入Oracle数据的问题

如何在 Delphi 2010 ( UniSynEdit Package ) 中安装 Delphi 2009 组件包?

Delphi 2009 - 在自定义 Delphi 组件中设置默认属性值

在 Delphi 2009 的 Rave Reports 中显示 unicode 文本