各位大哥,我在用多线程+ADO方式连接SQL Server2000数据库对其操作会导致出错:
"在异步运行时,操作不能被执行"
"对象打开时,不允许操作"
"对象已关闭" 之类提示,找了很多地方,没有答案,望高手解答~!谢谢 我的ClientSocket 接到数据包时,把消息内容插入到数据库表中,另外一个线程从数据库中提取消息对
其进行操作,完成后,删除这条记录.如果数据量很少时,不会有问题,数据量大时就会出现上述错误! 我的 ADOConnection 和多个 ADOQuery 组件是动态创建的.ADOQuery共用 ADOConnection 多个线程就利用ADOQuery访问数据库,我也用到了TCriticalSection();访问时锁定,也不行,也试过在每个线程内
创建ADOQuery也不行,(在创建时用到了 CoInitialize(NULL) 和CoUninitialize;在头尾)
其中ADOConnection1的Mode属性设为了cmReadWrite;,还有ADOQuery的CacheSize属性设为1000;
有高手提议把 ADO 用异步方式去做,可我不会...
请问有没有解决方法,谢谢各位了!....
"在异步运行时,操作不能被执行"
"对象打开时,不允许操作"
"对象已关闭" 之类提示,找了很多地方,没有答案,望高手解答~!谢谢 我的ClientSocket 接到数据包时,把消息内容插入到数据库表中,另外一个线程从数据库中提取消息对
其进行操作,完成后,删除这条记录.如果数据量很少时,不会有问题,数据量大时就会出现上述错误! 我的 ADOConnection 和多个 ADOQuery 组件是动态创建的.ADOQuery共用 ADOConnection 多个线程就利用ADOQuery访问数据库,我也用到了TCriticalSection();访问时锁定,也不行,也试过在每个线程内
创建ADOQuery也不行,(在创建时用到了 CoInitialize(NULL) 和CoUninitialize;在头尾)
其中ADOConnection1的Mode属性设为了cmReadWrite;,还有ADOQuery的CacheSize属性设为1000;
有高手提议把 ADO 用异步方式去做,可我不会...
请问有没有解决方法,谢谢各位了!....
解决方案 »
- 用两个ToolButton连同一个PopupMenu
- 以我的全部分相赠,目的是想学一下RAVE的报表设计,望大家能帮帮忙
- TWindowsMediaPlayer必须要安装media player 9.0吗???
- COM+问题!如何把要保存的数据记录传递给COM+????请前辈们帮助一下!谢谢
- TO:ly_liuyang(Liu Yang) 快来拿分!第二份100分!
- 串口问题
- 简单问题:用TQuery执行Delete语句出错。在线
- 各位大侠们请迅速救救我, 5个问题,高分送!!!!十万火急!!!
- 自己的ip?
- 运行DELPHI5.0汉化版缺少文件
- 嵌套sql问题(sql新手)
- delphi5通过odbc连接db28.2数据库访问blob字段出错
这样也好的!
并且你对数据要进行什么样的操作呢?
同一个线程内确实一个连接就可以了,但是在多个线程中时必须得将连接分机。因为在一个连接中毕竟不同的Query访问数据库时是存在顺序的,但是不多个线程同时使用时,便会出现“争抢连接”的现象,导致出现操作数据库时时间变长,或者出现一个线程工作正常其它线程报错的现象。
不知道你是怎么做,应该在线程结束时是可以释放的。你将一个连接定义为线程内私有变理,在线程结束的时候将连接FreeAndNil掉就可以了。这样不会出现你说有不能将连接无法释放的现象。
一个线程一个Connection就OK了!
线程结实的时候Freeandnil(ADOConnection)
楼主可以揭贴了,这个问题不少人都吃过苦的,
包括偶在内,:)
多捕获异常,把异常存到日志文件中,比如txt中.以免出错后程序中指
--------------------------------------- 欢迎访问 http://www.coderpub.com 技术论坛
delphi,asp.net,C#,j2me,软件工程,企业管理