当前位置:主页>销售管理软件> 列表

连接占线导致另一个命令!! 找财务软件教程视频

财务软件版1楼: 我建立了多个线程,没有一个线程都会访问数据库,同时我为每一个线程创建自己的ADOQuery,但是总的ADO连接只有一个,(必须保证只有一个连接),于是运行时就出现‘连接占线导致另一个命令’。
各位:该怎么处理?如果采用数据库互斥,速度肯定慢了啊。如果采用多连接,不允许啊!!求求各位给个意见和说法!谢谢,等待。。。。。

2楼: 如果你不用线程同步,肯定是这个结果。我以前也是这样,不过你用了同步不会感觉速度有什么不同,因为即使多个客户端同时连接到数据库,数据库为了进行数据操作,也要进行将并行操作进行串行化。不过数据库的算法更复杂罢了。用线程同步对象吧,不然你的问题永远也解决不了。 如管家婆软件使用教程

3楼: 啊啊!!!给一个线程同步的例子算了!

4楼: 临界区

cs: TRTLCriticalSection;
begin
InitializeCriticalSection(cs);//这个操作最好在全局里建立,可以放在Initialzie
try
EnterCriticalSection(cs);
//数据操作代码 DataSet.Open;
finally
LeaveCriticalSection(cs);
end;
DeleteCriticalSection(cs); //全局里销毁 finallize


end;

5楼: 我使用了信号量:
if WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 then
while not Terminated and not G_Thread_Exit do
begin
inc(icount);
DoWork();
ReleaseMutex(hMutex);
end;
可是还是出现这个问题了。

6楼: 哦,不好意思,我弄错了,应该是:

while not Terminated and not G_Thread_Exit do
begin
if WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 then
inc(icount);
DoWork();
ReleaseMutex(hMutex);
end;
OK!

财务软件版7楼: 我也遇到过,见
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3268989
解决的办法是 数据库控件在多线程在建立即可。你漏
了TADOConnection 。补上没有问题的。

8楼: 呵呵,我只想建立一个连接,所以 网中戏 你的做法不可取!

9楼: 每个线程,建单独的连接即可。

10楼: 你还是多个连接嘛!

11楼: 同时信号量的方式实现了,同步,但是这样的话,速度上不去,怎么办??

12楼: 多人接受答案了。 如财务软件教程视频