如何在多线程中访问用访问同一个TDatabase?(100分)

  • 主题发起人 主题发起人 dssn
  • 开始时间 开始时间
D

dssn

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在多线程中访问用访问同一个TDatabase?
注意,必须动态创建query,访问一个已经打开的database
 
使用Tsession控件,和编写一般的数据库应用程序没有太大的区别.
只是在调用Delphi的数据敏感组件时,必须使用Synchronize方法.
李维的<Delphi3.0从入门到精通>中有一个例子.
 
使用TSession一定注意查询后再和DataSource相连。
 
Fencer:能不能说明一下为什么?
 
看李维的例子,讲得很清楚。
另外,我写过一个多线程插入的例子,虽然用sql direct构件,但是和用delphi
标准构件完全一样,线程中数据库操作包括BLOB字段,感觉多线程确实比较爽,
如果你有用,我可以给你。
 
动态创建n个thread,每个thread配一个session和database,将database的
session name属性设为新创建的session。通过windows的消息机制完成线程
之间的互斥。
 
这个问题的答案我找到了
首先,原来的错误原因是TSession,TDatabase不是ThreadSafe的
其次,为了达到比较好的性能,需要使用专门的数据库服务线程开多个
session连数据库,充分发挥Oracle数据库服务器的潜力。
具体需要查询时查询所在线程通过windows消息与适当的数据库的线程
同步(可不是主所在线程窗口,否则数据库操作期间,主界面就动不了
了)。在由单独的线程控制数据库联接的数目,以保证系统资源有效利
用。
这几天一直在实现这个东东,今天才基本搞定。谢谢大家。
 
多人接受答案了。
 
后退
顶部