关于Dcom和Access,急!(200分)

  • 主题发起人 saccharin
  • 开始时间
S

saccharin

Unregistered / Unconfirmed
GUEST, unregistred user!
我用dcom连接了一个access数据库,启动server后,客户端连接一次正常退出,连接第二次时程序无响应,强行关闭server后,又自动运行server要求连接,再关闭后客户端显示“远程过程调用失败!”。
在Delphi中单步调试:运行到database控件的open事件时出现内存写冲突,导致上述情况。
同样的代码连接Paradox库没问题,怀疑Access库本身的问题。求解!
200分。
 
用ADO连Access比较安全。
 
不是很清楚,我在用Interbase时出现过该问题。我认为问题出在BDE或驱动程序上。
 
和我的问题有可能本质是一样的,
改用ado吧.
 
忘了说明,我的问题只在MTS环境下出错(启动BDE的 MTS Pooler=True 时)。
 
你的客户端和服务器端是在不同机器上测试的吗?
DCOM配置是否正确?
 
Dcom的配置应该没有问题,我在本地和不同的机器上都试过,结果是一样的。
 
如果用ADO,还怎么实现三层结构呢?
 
langer:
在用VB写相同的调用中也会产生这样的问题,我的解决方法是
1。控制MTS的对象,必须先卸载,再加载;或将RUNNING MODEL 改为SINGER;
2。在MTS服务器上关闭一些无用的SERVICE,并延长本地DB连接的TIMEOUT的值;
3。使用代码处理“程序挂起”现象。ACCESS 必须为SHAER。
这些处理会有改善,但仍不能达到100%。(注:WIN2000 SERVER,这种情况未发现)
请保持联系。
 
rax:
我的问题是:使用 BDE + Interbase + MTS + Windows 2000 当BDE Pooling=True
时,MTS对象的即时激活失败,当BDE Pooling=False时事务不能回滚。
>1。控制MTS的对象,必须先卸载,再加载;或将RUNNING MODEL 改为SINGER
VB我不是很了解,先卸载再加载是什么意思,能脱离MTS本身的控制?
RUNNING MODEL是否等价于实例模式?如果是的话对DLL类型的模式设置将被忽略。
 
LANGER
我在我的WIN2000上试了一下,MTS服务很正常。另外,你的WIN2000上ACTIVE DIRECTORY的服务是否起了?
所谓卸载,就是告诉MTS终止服务,并回收资源。
 
rax:
Delphi5打过补丁吗?如果是的话MTS即时激活会失败或事务不能回滚!
你要的例子已经发送,请查收。

>所谓卸载,就是告诉MTS终止服务,并回收资源。
终止服务? SetComplete? SetAbort? 不明白。
 
langer:
我的环境是DELPHI5+SP1+WIN2000 ACTIVE DIRECTORY。
SETCOMPLETE和SETABORT只是事物的提交和回滚。
我说的是组件的卸载,“_Release".按MICROSOFT INSIDE COM的讲法MS的COM管理
器在启动时自动的"_addref"为N+1,在最后一个CLIENT退出后,必须手工_Release
为0,并且UNLOCKSERVER。
 
ras:
〉在最后一个CLIENT退出后,必须手工_Release为0,
引用计数在Delphi中由编译器自动生成维护代码,无需手工维护!
而在MTS环境下,实际上由MTS决定何时释放对象,客户端引用的仅仅是由MTS生成
的一个包装。
 
>如果用ADO,还怎么实现三层结构呢?
怎么不能用,我的问题就是这样解决的.
不过不知道对你的适不适用.
我的程序本来是用table连access的,
但是包含有远程数据库模块的程序在关闭时会出现非法操作,
这个错误一直定位不了,后来发现用其他表就不会出错,如用dbdemo等,
随便换个都不会出错.
我把ttable换成tadotable就再也没出错了.
tadotable使用起来与ttable几乎一样的,
我的代码一点都没改就行了.
 
我也遇到过类似的问题,
使用ADO觉好!
 
用ADO吧
没错
 
接受答案了.
 
顶部 底部