当前位置:网站首页>VFP在64位win10环境下访问oracle出现的问题及解决方案
VFP在64位win10环境下访问oracle出现的问题及解决方案
2022-06-09 20:25:00 【加菲猫的VFP】
作者:绿茶@狐友会
前期曾经使用VFP在64位WIN7环境下连接和访问oracle,无论是账套设置、还是使用代码远程访问数据,都没有出现过任何问题,近期换了台机器,安装了64位WIN10系统,仍按以前的套路,在测试连接和访问数据库时,却总是出现问题,折腾了好几天,最后终于将问题解决。
现在坑已填平,为避免大家再受到类似问题的困扰,现在将整个过程及解决方案记录如下,供大家参考。
VFP远程访问oracle,我以前一般是通过安装oracle 9i精简版客户端,来作为访问的驱动程序,因为该精简版客户端大小仅十几兆,安装也非常方便。
仍按以前的套路,安装和配置好9i的客户端后,接着使用账套设置工具,进行测试连接,如下图,可以看到,测试成功。

然后,仍按以前的做法,开始编写代码进行测试:
ocon = NEWOBJECT(“qiyu_connection”,“qiyu超类”,“”,“test”)
ncon = ocon.createcon()
?‘ncon=’,ncon
但是,神奇的情况出现了,ncon竟然返回-1,也就是说,连接失败了。这些代码是以前多次写过的,不会有任何问题的,况且,在账套设置中,明明显示测试成功啊。
我有点糊涂了,到Con_set表中查看,可以看到无论是servername,Uid,还是Pwd,以及port等,都没有任何问题。
然后想到,VFP是通过ODBC来连接和访问oracle的,于是来到控制面板,注意,64位的系统有两个odbc,要使用32位的,如下图:
输入各项参数,测试连接,可以看到连接成功,这说明oracle的驱动程序是没有问题的,通过Oracle ODBC可以正常连接和访问oracle。


驱动程序没有问题,使用账套设置工具也能测试成功,到了使用代码测试就出现问题了,这不见鬼了?
此时,想到以前在猫老师公众号中的文章:免客户端安装配置VFP连接Oracle数据库,其实就是使用oracle的轻量级客户端instant client的方法,来连接和访问oracle,也就是说,用instant client来代替前面的oracle 9i精简版的客户端。
卸载oracle 9i,安装和配置instant cliet,注意,也需要32位版本,各项环境变量配置完成后,先到控制面板的ODBC中测试,和上面一样,ODBC返回Connection successful,说明instant client配置没有问题。
重新执行上面的代码:
ocon = NEWOBJECT(“qiyu_connection”,“qiyu超类”,“”,“test”)
ncon = ocon.createcon()
?‘ncon=’,ncon
结果,仍返回-1,这次是真的蒙了。
最后,到猫框中修改连接字符串,将原来的Driver={Microsoft ODBC for Oracle};server=改为Driver={Oracle in instantclient_12_2};dbq=,再次执行上述代码,总算是连接成功,ncon可以返回正数。
或者,按照猫老师的建议,不修改框架,先使用连接字符串自己创建句柄:
m.lcConn = “Driver={Oracle in instantclient_12_2};Dbq=;Uid=;Pwd=***;”
m.handle = SQLSTRINGCONNECT(m.lcConn)
然后将该句柄传入:
oDbHelper=NEWOBJECT(“MSSQLHelper”,“MSSQLHelper.prg”,“”,m.handle)
这种方式也可以使用(我没有测试)。
但是,这样做总感觉不爽,因为一是需要修改框架,而且,driver的字符串,会随安装的instant client版本的不同而发生变化,所以,还是感觉仍使用oracle 9i的精简客户端,这样通用性更强。
删除instant client的环境变量,回到oracle 9i,并再次狂翻各种帖子,终于找到了问题所在。
网上的说法是:运行连接Oracle的程序的目录名不能包含括号。而我这次安装VFP时,安装的目录是D:\Program Files (x86)\VFP9,问题真的是出在这里吗?
立马卸载掉VFP,重新安装到D:\Program Files\VFP9,所有代码全部没有变,继续测试,ncon的值变为正数,连接成功了!
此时真的有点阴沟里翻船的感觉,就是因为目录中包含括号的小问题,害的我忙活了好几天。
最后总结如下:VFP远程访问oracle,可以使用oracle 9i的精简客户端,也可以使用instant client,两者其实都是起到了访问驱动的作用。
但我个人仍喜欢使用9i客户端,因为安装后,可以自动配置(当然,tnsnames.ora需要自己配置好),不用象instant client,需要手动配置三个环境变量。
边栏推荐
- 看看人家那文本识别系统,那叫一个优雅!
- HMI 软件内存异常,导致奔溃退出的bug
- Leetcode stack and queue
- [opencvsharpdnn] implementation example of yolov3 and Caffe in opencvsharp
- 【RK2206】4. MQTT示例
- Jvm- how the bytecode is executed by the JVM + a little thought about the thread primer
- 学习使用php实现无限极评论和无限极转二级评论解决方案
- 数据处理基本流程
- C# For循环的一些小细节
- Jerry's use of network diagram to replace LwIP library and WiFi library [chapter]
猜你喜欢

HMI 串口屏 SD卡/TF卡升级的 bug

95后大厂程序员删库被判刑9个月

【mysql】主从复制原理、搭建

Download the latest global epidemic history data to the two days before the current day

Personal blog system (with source code)

Unity-UI-Scrollbar组件

目标分割之--Unet对多类别数据集的语义分割

ConvNets Principles

Drink at night, 50 classic SQL questions, really fragrant~

Unity将Project升级至URP
随机推荐
安路科技发布SF1系列FPSoC新品:高集成低功耗,助力实现多种应用场景
C#中关于Partial的作用
台湾再度严查陆企挖角:出动百余人次,10家企业被查,约谈近70人次!
Jerry's map modification app_ config. Video of H_ Rec buffer mode and output frame rate [chapter]
C#中的泛型T的应用
Taiwan once again strictly investigated the poaching of mainland enterprises: more than 100 people were dispatched, 10 enterprises were investigated, and nearly 70 people were interviewed!
Odoo passed ir model. access. CSV modify other module permissions
Unity UI scrollbar component
NoSQL redis configuration and optimization (I blew the night breeze of Qinhuai River for you when you were not in Nanjing)
LeetCode 526. 优美的排列***
2022年GDCPC广东省大学生程序设计竞赛题解
Jerry's application of camera [chapter]
HMI 软件内存异常,导致奔溃退出的bug
Export CSV file from neo4j diagram database
STM32 memory knowledge
Tips for writing code
Leetcode 1984. 學生分數的最小差值(可以,已解决)
将excel中的合并单元格拆分并填充数据
C#中的里氏替换原则
申请软件代码签名证书