多线程与数据库问题。
书上说:“每个线程必须在一个单独的BDE会话期中。为此,你需要把一个Tsession
元件加到form上,然后。。。。。。同样,如果TQuery元件通过TDatabase连接数据库的话,必须保证每个BDE会话期使用的TDatabase对象是唯一的。。。。。。”
这是不是就意味着,我不得不为每个数据库连接分别create一个Tsession、一个TQuery、一个TDatabase,即使每次都是连接相同的数据库?
还有其他的方法吗?
问题点数:20、回复次数:8Top
1 楼liao2001(知之为知之,不知为不知。。。)回复于 2001-09-25 20:22:31 得分 0
难道没人写过这样的多线程?不会吧!!!Top
2 楼BlueTrees(蜗牛)回复于 2001-09-25 20:37:03 得分 8
可以不用TSession,没有显式的创建的话,数据集元件会自动的创建,而且不必考虑线程安全的问题,其实一般情况下根本不用考虑,数据集元件都是线程安全的,绝大多数VCL元件也是线程安全的,Delphi不保证这些元件线程安全的原因在于,编程者很可能按照她自己想法使用这些元件,如果你用经典的方法使用的话,不必考虑Top
3 楼liao2001(知之为知之,不知为不知。。。)回复于 2001-09-26 21:32:17 得分 0
to BlueTrees(蜗牛):谢谢你的回答!可书上不是这么说的。还有,应该说大多数VCL元件是线程不安全的,因为可视化组件是与用户直接打交道的,一般它们运行在主线程。。。。。。
数据集元件就运行在主线程,线程中要用它的话,必须放到主线程中去。。。。。。
虽然书上也可能说的有错,但我还是希望有更好的回答,希望高手能指点!
Top
4 楼liao2001(知之为知之,不知为不知。。。)回复于 2001-09-27 12:47:05 得分 0
唉~~~~~~~~~Top
5 楼liao2001(知之为知之,不知为不知。。。)回复于 2001-09-27 12:55:37 得分 0
每人愿意回答吗?还是懂的人太少?Top
6 楼liang_z(千山一刀之忍者神龟)回复于 2001-09-27 13:11:30 得分 2
我也想知道,就如ISQLW中一样的,一个窗口中的数据还没有返回,
另一个窗口却还是能做查询。
我的MDI子窗口上用了一个StoredProc元件,但是在它没有返回以前
主窗口也象死机了一样,什么事也不能做,不知是否有人知道是为什
么?我该怎么做?
我可以另开贴子加分!Top
7 楼liang_z(千山一刀之忍者神龟)回复于 2001-09-27 13:35:04 得分 2
upTop
8 楼hellion(恶人)回复于 2001-09-27 13:57:49 得分 8
如果不为每个线程创建session的话,即使每个线程单独使用database,是不会并发执行的,所以你必须为每个线程单独创建session,database,query。Top




