做调查原因: 近来写服务的时候使用到TClientDataSet 查询数据库,然后使用他的XMLData生成XML字符串,这样一来就很方便传输到客户端。客户端的TClientDataSet也使用XMlData赋值就可以了。其实我就是使用TClientDataSet的一个方法和一个属性,方法是:open来查询数据库的数据;属性是:XMLdata是用来生成XML字符串 ;可是在使用过程中偶尔出现访问内存地址访出错的提示,错误提示来源就是Midas.dll。有时也出现什么灾难性故障。首先声明我把TClientDataSet换为TAdoQuery后一切正常,就是写多一些代码,还有TAdoQuery生成的XML也比TClientDataSet大了好多。我真的怀疑TClientDataSet存在以下的问题,最好是不间断的运行TClientDataSet进行查询数据库和使用XMLdata取出数据来观察他。调查现象如下:1.偶尔出现灾难性故障;2.使用XMLData的时候出现内存访问违规错误,提示来源Midas.dll3.使用TClientDataSet存在内存泄露
希望大家积极参与对大家以后是否使用这个控件心里有个底!别走那么多弯路。由于本人水平有限,上面几个问题是我在反复使用过程中遇到的问题。希望有高人来点评指正。谢谢。

解决方案 »

  1.   

    tclientdata被人诟病好久了
    这里就有个帖子
    http://hi.baidu.com/tinajames/blog/item/2dea0e0c6cef7c980b7b8282.html
      

  2.   

    ClientDataSet 我用过和 SocketConnection1控件链接数据库查询显示数据情况和数量
      

  3.   

    有没有可能是因为你在客户端与服务端没有注册Midas.dll这个dll文件造成的呢?
    试下把Midas.dll这个文件复制到客户端和服务器端的C:\WINDOWS\system32下面,然后写个注册的bat文件,或者在开始-->运行里面输入以下两行命令:
    c:\windows\system32\regsvr32 midas.dll
    c:\windows\system32\regsvr32 midas.dll /u
      

  4.   

    TO : liw125008 如果是这个问题就好解决了! 谢谢你的参与!
     
      

  5.   

    to: funxu 大侠
    midas.dll/midaslib.dcu补丁 这两个补丁是官方的还是一些高人所改写的,由于那个链接已经无法打开。
      

  6.   

    实际上那个帖子只是说了中文查询的bug,对你的问题可能不一定适用
    http://www.2ccc.com/article.asp?articleid=4385
    试下这个看看,不过千万记得使用前备份
      

  7.   

    另外补充下,这东东都是牛人们改写的,而且版本很多,另外注意你的delphi版本,是否已经打了官方的补丁
      

  8.   

    我以前也跟楼主一样使用,也偶尔有类似问题,但是我脱离掉 midas.dll 后,就再也没有出现过了。
      

  9.   

    弃用 midas.dll  现在很流行DataSnap可尝试一下
      

  10.   

    注意你传输的XML是不是不完整,我用cdsN年了,没发现你说的问题
      

  11.   

    to: Jonix 谢谢参与,我现在就是收集TClientDataSet的使用情况。to:csn168弃用 midas.dll 现在很流行DataSnap可尝试一下。 我可以不用他,如果是稳定的话使用起来方便点。我的中间层就是自己写的,我也有别的方案,就是多写点代码。 谢谢参与。
      

  12.   

    to: wzwcn注意你传输的XML是不是不完整,我用cdsN年了,没发现你说的问题;通过调试加异常保护我得出出错的是在:调用TClientDataSet 的XMLData取得的XML串时发生的。 
      

  13.   

    XE 版的 DataSnap 默认也是需要 Midas.dll 的,
    XE2 没试过不知道,估计也是需要的。
      

  14.   

    调查现象如下:1.偶尔出现灾难性故障;2.使用XMLData的时候出现内存访问违规错误,提示来源Midas.dll3.使用TClientDataSet存在内存泄露
    经过不断的测试和查询大量的资料终于找到问题所在, 希望以后对各位遇到这样的问题的朋友少找弯路。我最初是使用Oracle 10G 来测试程序的,后来经过查阅一些资料后,改换数据库为SQLSERVER 2000后问题得到解决;据一些资料说说是数据据驱动问题造成的; oracle可以是使用BDE来替代ADO,但实际上是不是数据库连接驱动问题还有待证实;问题就集中在数据库和数据库驱动上了。 同时谢谢大家的支持和参与。