环境:笔记本上安装的64位Windows7,64位Oracle 11.2, C++Builder11 32位。
目标:使用FireDAC 连接Oracle。
过程:
1.检查oracle客户端连接。
使用sqlplus 连接,没有任何问题。
使用PLSQL Developer64位连接,没有任何问题。
2.创建32位VCL Windows Form.
放置一个FDCConnection 。
设置Params 如下:
DriverID=ora
Database=ORCL
User_Name=wjw
Password=wjw
CharacterSet=UTF8
AuthorMode=Normal
3.点击Connected 提示
Ora-1309错误。
4.到oracle官网下载 instant Client 11.0.4 32位客户端。解压在d:\oradll32文件夹。
5.到桌面上右键点击 计算机 选择属性----高级----高级系统设置---环境变量----系统变量---path,将d:\oradll32 加到path中。
6.回到C++Builder开发界面,点击Conected=true 错误依旧。 在网上查找了很多文章,基本上都是无效。
7.回到C++Builder,选择 Tools--Options----Environment Variables---User System overrides---path
发现该系统变量并没有自动同步变更为修改过的path,使用的oci库还是oracle默认安装目录的bin,这里面是64位的动态库,与创建的32位应用不匹配。
8.修改这里面的path,在其中添加上d:\oradll32;然后点击【save】。
9.再次点击FACconnection的Connected,成功完成连接。
总结:
1.32位的应用对应32位的客户端动态库。我也下载了64位的客户端,在path添加相应的文件夹,仍然提示错误。
2.必须把客户端动态库所在的文件夹放在C++builder开发环境中的path中,仅仅修改windows系统的path无法立即生效。
这个问题困扰了我很久,也问了kimi,豆包等一系列的AI助手,但基本都是一些无用的答案。