delphi如何在多线程中操作数据库(100分)

  • 主题发起人 主题发起人 pl5th2001
  • 开始时间 开始时间
P

pl5th2001

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ADO连接数据库的,本来没什么问题,但在线程中使用ADO就有问题了,出现了错误,原因是数据库被频繁操作时资源被占用了,我查了一些资料,说是ADO在线程中是不安全的,每个线程都必须有自己的ADO连接,于是新的问题出现了:
我有100个线程,如果对数据库有80个连接的话,SQL SERVER也许还可以,但ACCESS肯定会死掉了,线程数可能还会更多,所以我想在程序里只用一个连接,当不同的线程使用该连接操作数据库时,其他的线程先等待一下,这样服务器的负担就轻很多。线程的效率可以下降一些,这样的代码怎么写?有没有谁给我个DEMO啊?是用Synchronize?sendmessage?还是postmessage?这3个有什么区别?
 
如果只是想用一个连接的话,最简单的不要把ADOConnection放在线程内部,把它放到外面去。比如DataModule.或者什么可以放全局变量的地方,然后再在线程中引用这个连接就可以了。。
 
Synchronize
-------------------------------------------------------------------------
精品源码热拍中,一元起拍!
http://shop33456237.taobao.com/
 
to 田伯光:我本来就是这么的,线程多的时候有资源冲突
to 西山居士:能给我个demo吗?
 
帮顶!
╭=========================================╮
80G海量源代码,控件,书籍全免费狂下不停!
http://www.source520.com

╰=========================================╯
 
一定要同步了。
不过建议你不要将ADO操作放到线程里。
如果是select的话,建议你使用ADOQuery,Sql里面把多个select语句用分号分割开。
一次Open以后然后使用NextRecordSet可以把多个表一次打开。
Insert和Delete、Update语句可以直接一行一句,速度比线程还快。如果在SQL Server中作的话可以通过关闭交易日志的方式使更新速度提高几十倍。
 
多人接受答案了。
 
后退
顶部