RT
像这样的代码:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add( ‘select * from table’ );
ADOQuery1.Open;程序运行后ADOQuery1不是会一直处于连接状态嘛?那不是很占SQL的资源啊?连接数太多会影响SQL效率的啊!应该怎么解决这个问题呢?!
像这样的代码:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add( ‘select * from table’ );
ADOQuery1.Open;程序运行后ADOQuery1不是会一直处于连接状态嘛?那不是很占SQL的资源啊?连接数太多会影响SQL效率的啊!应该怎么解决这个问题呢?!
解决方案 »
- 关于TListView显示的一个奇怪问题
- 如何实现同样的记录只添加一次?
- 如何让窗体运行后马上自动不可见
- 关于横向平铺,纵向平铺,最小化,最大化等问题
- TClientDataSet得问题,,在线等,给分。。。。。
- 向高手们请教: 从TDBGrid的透明背景到API句柄类型. (发言就有分!)
- 如何控制tdbchart的legend中文本内容的显示顺序
- world cup2002里面怎么播放自己存的入球集锦啊
- XE7下,IdHTTPServer的CommandGet取POST中文乱码问题,但是同样D7不会,怎么解决?
- 在bcb论坛问来问去都没有人最终解决,所以来delphi碰碰运气,希望各位帮忙
- ClientDateSet Filter异常的问题
- 添加数据到Treeview,如何放到线程中?因为现在数据量太大会卡死。。
尽量重复使用adoquery,这一点以后会注意了。
避免创建过多的实例,没用的就关掉,就是这一点不好弄啊,我close以后,连接还是存在呢 为什么啊
哦 知道了 那怎么close database连接线程呢?
那我还有其他的ADOquery连接这个adoconnection呢怎么办?close database后 其他ADOQuery也不能用了呀 还有其他办法吗
那我还有其他的ADOquery连接这个adoconnection呢怎么办?close database后 其他ADOQuery也不能用了呀 还有其他办法吗是你不了解adoconnection组件的用法,N个ADOquery中的一个Close后,只要你不对adoconnection进行强制的Close,对其它的ADOquery使用并没有影响,做试验验证,不要想当然
我想当然了? 我都是自己做了试验的,adoquery close并没有用,确实对其他没有影响,但是连接线程仍然存在,我目的要结束线程
只要没有锁死的就没有影响,实在要去掉你只有手动去Kill,如果你用到了存储过程,里面用到了游标之类的东西记得用完释放就成
另外需要指出的是,
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add( ‘select * from table’ );
改为
ADOQuery1.SQL.Text := 'Select * From Table';
看起来会更顺眼点。
不释放线程不会对服务器造成太大压力?这我知道,但我们写程序总要考虑全面呀,万一公司使用sql服务器的程序太多了呢?一两个线程不释放是没有大压力,但是,庞大的数量以后呢?我要解决这问题并不是已经发生了问题了,而是想防患于未然。你说彻底销毁用Free,但我之前就试过了啊,adoquery1.Free以后,sql里使用exec sp_who还是有这个adoquery1的连接线程。目前我试过只有两种才能出去这连接线程:一、关闭程序。二、adoquery.destroy!...
继续请教。。
......To Be Continue.............
每个程序对应一个 ADOConnetion, 每个窗体对应一个 ADOQuery, 如果在窗体释放后, 同时 Destroy, 会不会好一点呢?窗口开启再创建就是了.
将Query和SQL语句传过去, ReOpen负责重新开启Query.
发觉真正占到 Exec sp_who 的线程数是 ADOConnection, 而并非 ADOQuery.我的实验方法很简单, 在窗体中建立1个ADOConnetion, 2个AdoQuery, sp_who后, 发觉仅多出一个线程(SQL查询分析器的连接不要算在其中).而我每多开启一遍该程序, 线程数会多增加一次。(所以我敢断定这个线程数就是连接数).你也好好试下,至于限制ADOConnetion,就没太大必要了,一个程序基本固定是一个Connetion,除非你连接多个数据库。
"而我每多开启一遍该程序, 线程数会多增加一次。(所以我敢断定这个线程数就是连接数)."?
那我一个程序就用到一个adoconnection,exec sp_who得到1000多线程数。这么说我们公司开了1000个应用程序了→_→我去试试你说的
首先检查查询结果的dbname,看是否是其它数据库的进程,看看Exce sp_who 'active'
关掉了那我其他界面的AdoQuery用什么