Delphi7+Win2003+SQL2000开发的3层结构,
server端全部使用dbexpress的SQLStoredproc调用存储过程,ISocketDataModule中设置了10个带参数方法(都是调用存储过程的),
client端用appserver.方法(server端中的10个方法)调用。
在Delphi7+Win2003+SQL2000开发环境中运行正常,
但我在Delphi7+Win2000+SQL2000开发环境下运行时,如果先执行 appserver.方法1 调用了需要update数据库的存储过程后,
那么再执行 appserver.方法2 也调用了需要update数据库的存储过程,则出错!(SQL Server Error: SQL State: HY000, SQL Error Code: 0.)反过来:
如果先执行 appserver.方法2 调用了需要update数据库的存储过程后,
那么再执行 appserver.方法1 也调用了需要update数据库的存储过程,则出错!(SQL Server Error: SQL State: HY000, SQL Error Code: 0.)如果执行的appserver.方法3 调用了select或delete数据库的方法,则不会出错!
也就是说只要不update数据库,appserver.方法 就能执行,
而要uddate数据库的 appserver.方法 只能执行1个(可以执行n次),另一个不能执行!
但在Delphi7+Win2003+SQL2000下不会出以上错误!(我在WinXP和Win2000下测试都出现上面的错误!)
请高手指点,先谢谢!

解决方案 »

  1.   

    重新装了操作系统后,Delphi7+Win2003+SQL2000下也出问题了!  真是怪了!
      

  2.   

    // 个人觉得可能和你安装的数据库版本有关系win2003可以安装企业版,而winxp和win2000则不能安装SQL2000的企业版。
    大家知道企业版功能更强大,而个人版或开发版则功能受到限制,
    限制包括连接数、并发个数、事务等。
    如果不是,则考虑其他情况。// 建议:如果不是数据库版本的问题,可以考虑一下是不是update的存储过程里面
             启动了事务的情况下没有提交,或是出现异常,没有回滚,造成锁表的情况,
             因为对于select,delete和update语句,锁表造成的结果是不一样的,
             select 不会受到影响,而update则不行。如果有什么问题,欢迎继续讨论
      

  3.   

    sql2000的开发版和企业版基本没区别,
    建议检查存储过程,可以将存储过程的代码只写一行update,或者干脆什么都不写,直接返回,看还有问题吗?
    然后再逐渐吧代码加上去另外,可以写一个测试程序,在本地用直接调用存储过程,开有这样的问题吗?
      

  4.   

    发现了点问题,是dbexpmss.dll的问题.
    但是为什么我家里的dbexpmss.dll不会出错!
    原因还是不明!
      

  5.   

    这个是dbexpress的驱动吧,换个试试,可能是版本的问题
      

  6.   

    D7的dbexpmss.dll已经用了新的,家里和公司用的一样,还是公司的出问题,家里的正常.
    反正dbexpmss.dll问题很多,我不打算用这个驱动了.Borland明知有bug也不更正,多少年了还是提供这么个问题驱动!
    也不知道在打什么算盘?有人说是和microsoft的竞争关系的原因.
      

  7.   

    dbexpress是有bug,没怎么用过,还是用ado吧,比较稳定
      

  8.   

    可我需要dbexpress的性能,速度快.既然这个问题没没人提供好点的答案.  谁能告诉我怎么解决SocketConnection连接server时界面假死的问题(即要等待SocketConnection的连接返回后才响应界面操作).
    IdAntiFreeze在这里用了也没用,或是我不会用.分数少我可以加的,上面的回答的朋友虽没解决我的问题,但也有辛苦分的.本人不会拖着不结帖的!