有一定难度的数据库问题,完美解决者,150分送上!!

CKEN 2000-03-02 08:21:00
我正在用delphi编一个oracle7.3的客户端程序,用Tdatabase保持与数据库的
永久连接,保证程序能24 X 7的连续运行,我发现当在数据库服务器上关闭数据库
后,Tdatabase无法产生OnDisconnect的事件,此时,Tdatabase的active依然为
TRUE,但进行数据库操作则会产生异常(TDBEnegineError),问题是如何知道数据
库失效,能在程序中隔一段时间自动重连,不需要人为干预?
150分只是基本分,如果有人回答很棒,我不会吝啬分的!
...全文
397 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
CKEN 2000-03-09
  • 打赏
  • 举报
回复
真的没有更好的方法了吗?不可思议,再没人回答的话,我就只好给分了.
CKEN 2000-03-06
  • 打赏
  • 举报
回复
还有没有人知道更好的方法?最好能有源程序(一点点示范). 
Tommy Chang 2000-03-04
  • 打赏
  • 举报
回复
BDE同ODBC,JDBC一样,只是一个面向程序员的接口,而大家的出发点不同,导致用法差别较大,但是据我所知首先当你关闭ORACLE服务器后或客户端长时间没操作CONNECTION被断掉或DBA故意断掉,客户端的SQLPLUS并不会出任何提示,其二,DELPHI在TDATABASE,TSESSION,TDATASET,TTABLE...都没有封装ONSERVERDOWN类的错误,我不认为在BDE或ORACLE方面会有很直接,较完美的事情.
想得到的办法就是在ONXXXERROR(ONPOSTERROR...)中调用统一的处理,但这样意味着事务处理的一致性得不到保证,这才是C/S真正难于处理的事情.

三层或N-TIER结构才是解决这种问题的理想办法.

(对不起,我部机打小写字母不方便)
CKEN 2000-03-04
  • 打赏
  • 举报
回复
huiwsey:这个方法我曾经想过,我甚至想过用两个Tdatabase,其中的一个用一个单独的
线程来控制,如果这个线程发现它的Tdatabase不能连接数据库(通过简单的数据库操作),则主程序也不能正常连接,他就会去重新连接主程序中的Tdatabase,但是好像解决的不是
让人很满意.
neil:BDE不会直接去连接ORACLE数据库的,它时通过ORACLE的数据库连接去连ORACLE,我的程序必须先装ORACLE的客户端,当ORACLE数据库关闭时,ORACLE的数据库连接模块时可以
收到消息的,但BDE却不把它返回给我,:->.
neil 2000-03-04
  • 打赏
  • 举报
回复
用ooracle自带的数据库连接驱动。 去oraqcle站点看看,函数齐全。
huiwsey 2000-03-04
  • 打赏
  • 举报
回复
OnDisconnect is used when you disconnect the server, not when the server is unuseable, I think you'd better check the connection when you want to operate the database. A stupid way, check the server status in a Timer, how long as you need, this way can not slove you problem good, but if you have no other choice, try it is not a bad way.
If the server is unuseable, you will get a Exception when you operate the server, check the exception to find the reason, but perhaps it is too late for you, and if you not operate the database,you will not know the server is unuseable, then use a timer is the only way. thank you.
CKEN 2000-03-03
  • 打赏
  • 举报
回复
我相信delphi一定有完美的解决方法,难道竟然没有一个人编过类似的程序吗?
CKEN 2000-03-03
  • 打赏
  • 举报
回复
vBin:这方法不行,我的程序如果用数据库操作,必须在给定的时间里给客户回应,否则即使
服务端成功了,客户也会认为失败.有数据库操作时在重连,晚了!
sess:如何判断bde状态,好像即使oracle关闭,bde也是正常的,只有进行具体操作时,才返回错.
sundaynews:请说具体点.
sundaynews 2000-03-03
  • 打赏
  • 举报
回复
必须在TSESSION中作判断
sess 2000-03-03
  • 打赏
  • 举报
回复
BDE 有许多毛病,最好先判断一下状态
光明山人 2000-03-03
  • 打赏
  • 举报
回复
我也想知道解答。
vBin 2000-03-03
  • 打赏
  • 举报
回复
当检测数据库操作产生异常时,进行重连不就可以了。
难道不是这样吗? 再说清楚些吧。
radish 2000-03-02
  • 打赏
  • 举报
回复
笨办法:操作前先用特定的语句检查一次

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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