用户已经在用的三层结构的系统在运行中服务器上出现严重问题,某个关键函数中的TADOQuery.Open失败,在系统日志中查到错误信息是 “无效的授权说明”。网上已经许多用户问过一样的问题,但答案都不符合我的情况。我的情况是:
1
scktsrvr.exe已经启动2
数据库密码不是空,中间也没有空格3
TADOConnection 的ConnectionString值类似:
Provider=SQLOLEDB.1;Password=%s; User ID=%s ;Initial Catalog=%s ;Data Source=%s;4
并不是服务器启动后就出现该问题,而是一直使用非常频繁的函数(用途:创建不重复ID,并把最新ID值记录在数据库)在使用一段时间后出现问题。5
已经做了容错处理,
Try
  AdoQuery.open;
except
  try
    AdoQuery.Close;
    AdoQuery.open;
  except
    on e:Exception do
      WriteToLog(e.Message);
  end;
end;非常着急,我们的技术总监都解决不了。

解决方案 »

  1.   

    试猜了一下:
    1、用户过多或有效连接过多导致服务器的连接限制已满
    2、ADOquery最好用手动创建的,并且它指向一个共享连接
    3、买个正版的吧
      

  2.   

    赞成XXSingle(水连天【五行忌水,所以没有女人】) 
    最大的可能是数据库服务器连接用户过多,共享连接是很好的解决方法。
      

  3.   

    1、用户过多或有效连接过多导致服务器的连接限制已满
    基本同意2、ADOquery最好用手动创建的,并且它指向一个共享连接
    这样没有用
    要么建一个连接同步访问
    要么做一个连接池来同步访问(推荐)
    否则将导致‘占线’错误~~
      

  4.   

    回复: XXSingle(水连天【五行忌水,所以没有女人】)\WGYKING(修罗是谁?!):
    1
    务器的连接限制是 ADOConection的连接限制吗?ADOConection没有连接限制吧?
    是MS SQL SERVER的连接限制吗,我查过了@@MAX_CONNECTIONS(同时用户连接的数目)值为32767。而
    我的情况是客户端机器数据大约是50,不会达到这个数目。
    2
    AdoQuery连接用ADOConnection是RemoteDatamodule中的ADOConnection,不是共享的(每个客户端连接都会创建一个线程)。
      

  5.   

    重新设置一下sql连接的用户数,如果不行就试试多用几台中间服务器;我说的共享,是在同一个RemoteDatamodule中尽量共用一个adoconnection,这样可以减少服务器的负担罗罗厉害,佩服不过‘战线’的错误,一般在单用户的多线程中出现比较多