是否已把TSession的AutoSessonName设为True。By the Way,有可能的话用ADO吧。

解决方案 »

  1.   

    BDE的设置不对,在BDE-Administrator中,Configuration\System\INIT 的MAXBUFSIZE,MENSIZE,SHARED MEM SIZE 更改。
      

  2.   

    每个线程都要产生DataModule1的实例,每个线程只操作自已的实例 
       MyDataModule:=TDataModule1.Create;
      

  3.   

    AutoSessonName我设了!
    MyDataModule:=TDataModule1.Create; 我也做了,
    Configuration\System\INIT MAXBUFSIZE,MENSIZE,SHARED MEM SIZE 
    这个我没试,但奇怪的是,我重启机后就可以了,重装服务也没用
    不知为何?
      

  4.   

    问题就在于你用了AutoSessionName的缘故,所以你必须增大MENSIZE,SHARED MEM SIZE的值。
    你没试的东西,恰恰是解决问题的关键所在。
      

  5.   

    重启后,重新开始了,你的SHARED MEM SIZE还没怎么用,等用完了,一样报错。
      

  6.   

    不是,是SHARED MEM SIZE不够用,所以报Insufficient memory for this operation。
    或者你把TDatabase的HandleShared改为True,那么即可以不用AutoSessionName,也可以不调整。
    BTW:你为什么不试一下呢?百说不如一试。
      

  7.   

    插一句,如果HandleShared的话,就只有一个连接了,不同的线程之间互相有影响,
    那样的话为什么不直接用一个DataModule的实例,也不用
    MyDataModule:=TDataModule1.Create; 
    这一句了,不是一样吗?
      

  8.   

    我也有过类似的经历,我认为是由于调试时每次在中途cut掉,所以bde所占用的内存空间不能得到及时释放而造成的,因为我调试成功之后每次运行都不再出现这情况。解决方法就是:重启Delphi,不用重启机器,重启Delphi就行的。
      

  9.   

    问题是我重启机器后一直没出现Insufficient memory for this operation
    那我怎么去比较呢?
    另外,SHARED MEM SIZE有2M,我想足够大了吧!
      

  10.   

    经过实验,我来总结一下吧: Session的autoname绝对不能设置true,而是应该自己随机生成他的SessionName。一般在默认的BDE设置下,同时开8个以上的线程查询就会出现Insufficient memory for this operation,把SHARED MEM SIZE增大一倍后相应的线程就可以增加一倍(我的机器是AMD K7-600,256RAM),但是在我把SHARED MEM SIZE设置到很大如40M的时候,同时把查询线程开到70个,就会出现too many session的错误,这时把SHARED MEM SIZE设为多大都没用,因为BDE的Session已经到了极限了。所以我得出结论,在BDE下是无法同时开启70个以上的查询线程的,如果你需要处理更多的线程,必须自己对线程的队列进行管理,控制每刻同时运行的线程数量。如果需要我测试的原程序,可以给我来信索取:[email protected]