TADOConnectiong连接oracle问题,解决可再加分100

zzn007 2009-08-13 02:31:36
我现在有一数据库连接池,用的是TADOConnection连接,原来连接的是sql。现在使用oracle10数据库,我就下来最新的oracle10最新的客户端,使用的oracle的驱动,设置好ConnectionString,但是程序测试下来,有内存泄露!使用软件检测还测不出来哪里有泄漏,但是更换sql的ConnectionString,就没问题。
折腾了好长时间,没测出来。后来我偶然使用了微软的oracle驱动,当然还要装oracle的客户端,但是必须设置个配置文件。测试后居然内存不涨了!!!
这我就奇怪了,什么都没改,微软的驱动不也是调用配置文件里面的链接,还是使用oracle的链接,没啥就没泄露了???这是怎么一会事情???

我使用单独的测试程序exe链接oracle,直接模拟select结果,使用oracle的驱动,不使用微软的oracle驱动,但也不涨。我就更加郁闷了

向项目经理说明了情况,结果项目经理要求必须使用oracle的驱动,这个用户不必配置那个配置文件(我估计客户不会配置的,会引起很多不要的麻烦)!

我的头已经N个大了,大哥大姐门给个解决方法了,不行的话,我真要跳楼了:(
...全文
178 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzn007 2009-08-21
  • 打赏
  • 举报
回复
也许是我的问题把大家的目光引导偏向了
zzn007 2009-08-20
  • 打赏
  • 举报
回复
ODAC有些命令用ADOQuery执行不了,比如多条语句同时执行!兼容性稍差一点点,方便当然还是它了。另外我经过几天的调试终于找到问题了,但是具体为什么还不清楚!把我找到的问题和大家分享一下吧:
我的ADOQuery获取字段信息的时候,都是使用

ID= VarToStr(ADOQuery.FieldsValue['字段名']);
结果我改成:
ID:=trim(ADOQuery.FieldByName('字段名').AsString);
就可以了!

但是上面的情况,我用微软的那个oracle的驱动也没问题的,有清楚为什么的兄弟姐妹们,回复下。大家共同提高
blackiron_sh 2009-08-20
  • 打赏
  • 举报
回复
看了楼主最后贴后,我觉得这个问题真是没有办法讨论
WUMAOZHIFU 2009-08-15
  • 打赏
  • 举报
回复
告诉你,用ODAC控件,连客户端都不用安装
CCC的 2009-08-14
  • 打赏
  • 举报
回复
下载个ODAC1020221.exe试试,我用这个没有发现内存泄露,不过没有使用连接池。驱动就是Oracle Provider for OLE DB。如果不明白怎么安装,我可以给你说明文档。要的话,留下你的EMAIL
yct0605 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zxf_feng 的回复:]
我一直用odac联接oracle数据库,很方便的,为什么不改这用这个呢
[/Quote]
这个还是比较方便的,不用安装客户端。
zzn007 2009-08-14
  • 打赏
  • 举报
回复
当时没用这个,好像是有一些建表和初始化数据的什么的语句不支持吧?就是没有现在的这个支持的全面。
sparklerl 2009-08-13
  • 打赏
  • 举报
回复
关注 很诧异的问题

只能说ADO对Oracle的驱动支持不够好,和MS自己的驱动配合好点
zzn007 2009-08-13
  • 打赏
  • 举报
回复
楼上的,正好说反了。我这个程序里面,恰恰是如果使用微软的oracle就没泄露,使用oracle提供的就泄露
wxsan 2009-08-13
  • 打赏
  • 举报
回复
oracle的驱动应该没有问题吧,微软的可能支持不够好。
zzn007 2009-08-13
  • 打赏
  • 举报
回复
我这个数据库连接池是通用的,sql,oracle。。。,现在就是不想设置这个配置。
使用oracle的驱动,请问就一定有内存泄露?我就是想知道泄露在什么地方,是否可以解决,不能用别的方式
hongqi162 2009-08-13
  • 打赏
  • 举报
回复
就是配置tnsnames.ora呗,这个有什么复杂的,你写一段配置的代码不就行了么
阿三 2009-08-13
  • 打赏
  • 举报
回复
我一直用odac联接oracle数据库,很方便的,为什么不改这用这个呢
zzn007 2009-08-13
  • 打赏
  • 举报
回复
呵呵,客户端肯定是要安装的,但是要使用oracle的串。如,我现在用的是:
connectionString:='Provider=OraOLEDB.Oracle.1;User ID=ECM;Password=ecm;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.17.31)(PORT=1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)));Persist Security Info=False';
这时就内存泄露

如果,我改用这个连接串,就不泄露。这个事微软的oracle,但是需要在客户端程序配置个配置文件,配置文件的内容,就是上面连接的内容,
connectionString:=Provider=MSDAORA.1;Password=test;User ID=test;Data Source=orcl;Persist Security Info=True

我的问题是,要用第一种连接方式,但是要解决内存泄露的问题。这两种连接不同的就是连接字符串不同,别的代码我都没动
hongqi162 2009-08-13
  • 打赏
  • 举报
回复
那你的问题是什么?不想安装oracle客户端?还是建议你安装
zzn007 2009-08-13
  • 打赏
  • 举报
回复
我这个就是服务器端,客户请求过来,我通过oracle查询数据,然后返回。现在就是这个服务器内存在不停地涨啊!
但是要是链接串修改成微软那个oracle的,就不涨,sql的也不长。
ok1411 2009-08-13
  • 打赏
  • 举报
回复
装个客户端,配个数据源就可以了
Harryfin 2009-08-13
  • 打赏
  • 举报
回复
不然客户端要逐个装客户端比较麻烦。 -> 不然要逐个用户装ORACLE客户端比较麻烦。
Harryfin 2009-08-13
  • 打赏
  • 举报
回复
ORACLE做成三层可能好点,客户端在中间层装,不然客户端要逐个装客户端比较麻烦。
阿三 2009-08-13
  • 打赏
  • 举报
回复
用ODAC组件来连接oracle数据库,试试
加载更多回复(1)

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧