救命啊!SQL SERVER 连不上了!(100分)

  • 主题发起人 主题发起人 bigroom
  • 开始时间 开始时间
B

bigroom

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用DELPHI连接SQL SERVER 7.0的时候,时不时的出现这样的提示
“connection is in use by another statement”
请问这是怎么回事啊。

我这个程序使用了TQuery组件去执行SQL语句。
在我编程的计算机上可以正确运行。
我使用了将SQL SERVER 和 BDE 的DLL文件和注册表内容拆出来的方法来
配置其他计算机的运行环境。
 
1、你的不会是多线程的吧
2、你的会不会是桌面版
 
该数据库有二个TDataBase.connect:=True
 
建议你在程序中动态创建session,用完之后释放掉,这样应该不会有这种提示了。
 
没有使用多线程。
我使用的是Desktop版的 MS SQL Server 7.0。(是不是这个东西有问题?)
我搜索了整个程序的代码,只有一个TDATABASE.OPEN语句。
动态创建session是怎么回事啊?我不会用。。。

继续请教,谢谢。
 
我已经给错误定位了,
是程序中的一个非常普通的操作那里出错的:
先CLOSE掉一个QUERY,
给他的SQL属性放个字符串,就是我自己的SQL语句,
然后OPEN这个QUERY,
然后。。。出错。。。

但是我在同一个程序中的别的地方同样的用法就没有问题。
天那!
 
只有select命令才能open
其他update、delete、insert之类不返回数据的,只能用ExecSql
 
是啊,我的SQL语句就是SELECT,
现在我发现,是在这个特定的地方,OPEN的时候,出错的。
但是我不明白,为什么别的地方使用都没有问题。
而且,为什么会有这样的错误提示呢?
 
to pipi:
所有的语句都可以open和execsql,区别是open返回数据,execsql不返回数据,因此执行
select时必须用open,执行update,insert,delete时建议用execsql!
你的query是不是设置成独占模式了,而此时你的程序中还有别的数据控件正处于打开状态!
 
hhzh426说得有理,你的程序中是否用到了DbGrid控件,如果你在执行一次Query后,再
close掉TQuery控件,然后再来一次Query,但如果你的DbGrid的DataSource在执行Query
之前未曾置成nil,呵呵,你惨了。
建议先将DbGrid的DataSource置成nil.
 
如果你用 query.sql.add 放新的命令,那要先 query.sql.clear
如果你用 query.sql.text:=xxxxx ,那可以不clear
 
谢谢Pipi,不过你的回答好象完全不对路啊。那种错误提示跟这个不一样的。
感谢foolaliu,不过我的程序中只是用QUERY得到结果集,界面由自己来控制,
没有使用DBGRID。
请问hhzh426,独占模式是怎么回事啊?我的程序中使用了1个DATABASE,3个
QUERY。没有其他的数据库控件了,独占模式是怎样起作用的?
 
tdatabase.exclusive:=false;
还有sql语句中是不是有锁定记录这样的内容?
 
删掉这个单元文件,重做。应该不会有问题。
 
tdatabase.exclusive:=false;
还有就是TDATABASE。HANDLESHARED=TRUE
 
感谢hhzh426。
我没有在程序中没有操作tdatabase.exclusive这个属性。
sql语句也没有锁定记录这样的内容。

谢谢plowboy,不过我这个单元是整个程序的主单元,
要是删掉这个单元文件,重做的话,恐怕我会吐血而死的:(。

非常感谢mataijin,
请问要是使用TDATABASE.HANDLESHARED:=TRUE;
会有什么效果?是不是如果没有设为TRUE,多个QUERY对象就不可以同时使用DATABASE?
 
首先,你在OPEN 前请写上SQL.CLEAR;
其次,检查你的database 的TransIsolation属性,确保是tiDirtyRead;
我是不是要得分了?
 
问题已经解决了。
可能是因为我新搭建的数据库SERVER速度太慢(P100+16M)
我在程序中增加了一个DATABASE组件。所有出现问题的地方都分开使用不同的DATABASE
就解决了。
 
多人接受答案了。
 

Similar threads

后退
顶部