说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi多线程问题,谁能回答?

编辑:说三道四文库 发布时间:2017-04-27 05:20
HTML文档下载 WORD文档下载 PDF文档下载
为什么出错呢?

代码:
procedure TForm1.Button1Click(Sender: TObject);
begin

  ThTest:=ttest.Create(AdoQuery1);
end;

constructor ttest.Create(ADOQ: TADOQuery);
begin
ADOQuery:=ADOQ;
inherited create(false);
end;

procedure ttest.Execute;
begin

adoquery.SQL.Text:='select sum([Interval]) from Recordtab ';
adoquery.Open;//在此出错
if not (adoquery.Eof and adoquery.Bof) then
begin
  adoquery.Recordset.MoveFirst;
  GetVal:=adoQuery.Recordset.Fields[0].value;
end;

end;
主要是执行一个SQL汇总,用ADO调用MDB数据库 
补充一下,此程序在单线程下运行没问题。
另外谁能告诉我为什么ADO的所有控件打开操作完毕后关闭必须要有纪录才给关闭,而Delphi自代TTable,TQuery却没有这个问题
没人回答,俺加分,100
没人回答,俺加分,100
建议:
    做以下操作之前,先做
    adoQuery.Close;
    adoquery.SQL.Text:='select sum([Interval]) from Recordtab ';
    adoquery.Open;//在此出错
同样出错!
有没有人能回答啊?
好可怜哦,呜呜。
该我哭,你哭什么
使用Synchronize调用你的程序
Synchronize(你的程序名);
ok

Synchronize是将所执行线程的过程递交给主线程完成,此程序在主线程中运行没有问题,使用Synchronize也没有问题,但是一旦使用Synchronize,就没有办法再主线程中终止程序了,我现在做的是一个大库的查询(40万条)左右,希望能用多线程作退出查询
但你这种情况只能用Synchronize否则肯定有问题,我已经验证过了。
先通过了,然后再想别的方法。
我在三天前就通过了,程序也作的差不多,但就是心里窝火,他怎么就这么戈呢?其实用Synchronize还不如再主线程里直接做,多加个线程没有任何意义,但用TQuery没有问题,偏偏要访问mdb数据库,用Tquery还要建别名,有什么办法可以用Tquery访问MDB而不用BDE的吗?
看来Delphi的ado还是有问题。
那只能用外部组件了,否则你只能用ADO,ADO有什么问题?
我还不知道他程序的出错的提示信息是什么?
现象如下:如果在多线程中使用Tquery,可以正常打开查询,返回结果,如果相同的代码换成TADOQuery则在打开数据库时报错,错误是:
Project Project1.exe raised exception class EOleException with message '尚未调用
coinitialize.'。process stopped.use step or Run to continue.
另外如果用ADO如果数据库打开,删光所有纪录,数据库就管不上了,而用Data Access页的组件没有这个问题,这也是今天发现的 
不好意思,我在不走就没车了。
我明天再来,可以联系truest@163.com
瞎猜一下:Ado是基于com的,下面msdn上的一段关于CoInitialize的说明或许会有用。
Initializes the COM library on the current apartment and identifies the concurrency model as single-thread apartment (STA). Applications must initialize the COM library before they can call COM library functions other than CoGetMalloc and memory allocation functions. 

在关闭TADOQuery之前加一句
TADOQuery1.RecordSet.Close();
再试一试。
ADOqUERY.OPEN 就出错了
还没有解决吗?
不是灌水
那你就调用一下CoInitialize吧,在任何一个单元的initialization段中,然后在finalization中调用CoUninitialize(好象是这个名字)。
agui(阿贵) 说的对
也可以这样
在线程中调用其他单元的函数或过程来执行
注意vcl控件的执行期间调用问题
看看这样能否绕过同步问题。
constructor ttest.Create(ADOQ: TADOQuery);
begin
ADOQuery := TADOQuery.Create(nil);
ADOQuery.Asign(ADOQ);
inherited create(false);
end;

一个query关闭再执行另外一个啊,否则服务器会被你拖死的。
哇,PB的斑竹(liulee(流方) )跑到这里来了?
是多线程耶!怎么关闭在执行另一个?
关闭了在执行另一个,我还写多线程干吗?找麻烦?
richardsong(白玉老虎):DELPHI的帖子怎么跑到这里来了?再不走,我要赶了。。。。。。。。
我认为是ADO的问题。你就建个别名,用BDE吧,或者不用建别名,用DataBase连接,用文件名连接(我向来都是这样连接)。
哪个帖子跑到哪里了,说清楚!拜托
to am2000:
再者说,我又不是斑竹,我说了也不算,他自己跑过去的,我有什么办法?
是我的帖子吗?
呵呵,好像多线程我没用过似的。
你的帖子是什么啊???告诉我标题。
或者你去灌水乐园看看。。。
是不是那个“还学PB呢”那个帖子??????如果是,是我移的,呵呵。

当然是你移的,PB现在就你一个斑竹,不是你一的,难道还是我移的?还是他自己Move过去的。


还有:我没说你没用过多线程,我从来不挖苦别人,嘲笑别人或者贬低别人,这个良好作风Delphi里的弟兄可以作证,我们斑竹也可以作证的。老兄不要随便冤枉好人。
试着将
ADOQuery:=ADOQ;
inherited create(false);
这两句调过来试试看吧,我一向写新类都是先写第二句的,因为要有新类的实体,必定要先建立吗!?
如果还不行,那应该是戴妃与M$不和了.

to: 
richardsong(白玉老虎) 
我的帖子也被移过,还有别人的也被移过,CSDN的管理员他们也可以移。
你的帖子是我移的,你向Delphi搬救兵,所以我移到Delphi来了。
呵呵,就此打住吧。不争了,不争了。


    我试了一下,在主线程中先随便操作一下AdoQuery1(比如AdoQuery1.SQL.Text:='...')就能解决你的问题,不过我相信以后还会有其它问题。以下文字你应该见过:Methods and properties of objects in VCL can only be used in a method called using Synchronize.
    其实ADO组件本身支持异步操作的,在ExecuteOptions属性中设置,我没研究过。
    有纪录才能关闭的问题,安装ADO组件补丁(VCL,不是ADO本身)应该就能解决。
2 liulee:
   Ok,就此打住。
加一句
ADOQuery.clear;
ADO是COM组件。在线程中使用时需要先调用CoInitialize,对应的需要调用CoUninitialize。
 CoInitialize  怎么调用,use什么,
我经过反复验证,必须使用Synchronize,其作用是使线程与VCL同步。
VCL的相当一部分代码是线程不安全的,具体的说,大多数由TComponent所派生的类与线程不兼容,会导致一些错误。而Synchronize能解决这个问题,当然效率会低一些。但却是必须的。

将我自已的命令加入窗体的控制菜单栏-VB资料 VB利用 UnloadMode 来控制窗体的卸载? VB利用Form_QueryUnload询问使用者是否关闭窗口 利用VB的图片框实现屏幕的滚动 利用VB动态改变Windows显示模式的两种方法 利用VB控制窗口显示风格 利用VB实现浮动按钮 VB利用子类处理技术限制窗体的大小 奇形怪状的窗体 -VB资料 强制ComboBox弹出下拉框 -VB资料 强制和防止窗口重画 -VB资料 巧用“关于”对话框-VB资料 请问在VB中如何关闭别的应用程序窗口 确定屏幕分辨率-VB资料 让VB5支持动画光标 让窗口拒绝接受键盘和鼠标事件 -VB资料 让窗体处于最前面 -VB资料 让窗体居中 -VB资料 让所有的控件都动起来 -VB资料 让最大化和最小化按钮消失-VB资料 任意多边形的窗口-VB资料 如 何将「拒 绝 被 盖 住 的 窗 口 」还 原-VB资料 VB如何创建椭圆形的窗体? VB如何创建无Icon的窗体? VB如何防止Edit框中的Password不被非法获取 VB如何将鼠标显示成动画鼠标? VB如何利用程序拉下 ComboBox? VB如何让窗体右上角的X失效? VB如何使Form的背景图随Form大小改变 VB如何使Text文本框的属性只读? VB如何使窗体右上角的"X"无效? 如何判断一个已打开的socket的状态? 坏习惯不知道该不该改,给个建议。来者有分! vc sdk下作'帮助'功能,怎么写代码.需要什么资源? 看看这个错误。有关ADO 连接sybase 数据库的问题。 各位大哥,救救小第吧。分数随你开口(我有1357分)。拜托拜托!!!! C++ primer中文版中的几个错误! 如何将MSHFlexGrid1控件中的数据写到EXCEL文件中,最好能给出详细说明!在线等待 有天津的朋友吗?我请教个问题,谢谢。 数据库连接的问题 怎样在代码中改变CComboBox中下拉框的高度? *** Application 中文件的读与写 *** 关于jsp里的浮点数位数的问题(急!!!) c++ primer中的几个翻译错误! 高分求解,不够再加,我有900分,在线等?关于重载DataGridColumnStyle 如何做bbs系统? 如何查找文本文件里面有某个特定字符串?并删掉它? 如何在php 里一个动作update 2个MYSQL表 谁知道在VC里除数为零的异常怎么捕获吗? 数据过滤 如何在程序中动态建立数据库? 谢谢各位大虾 请告诉我几个从C++转到C#的电子版书籍(马上给分) 在ACCESS里面怎样实现该功能 怎么改变这个界面,帮帮 我用的vs.net好像有个bug。 高分求解,不够再加,我有900分,在线等?关于重载DataGridColumnStyle加了一个用户控件 菜鸟提问:如何用VC制作类似“记事本”的编辑器? 请问那位大虾知道如何把占用一个特定SOCKET通讯端口的进程关掉. 有誰喜欢用TActionList控件,进来谈谈 谁知道在VC里除数为零的异常怎么捕获吗? 请教高手:中文问题 为什么不能比较i>application("tsum")的大小呢? 排版很难看,有人可以指点一二吗?http://www.gz111.net/product0.asp?id=1147 问一下,通过电话上网的,如果把本地的http服务启动,能从internet网也能访问吗? 请问那里有给光盘上复印封面的地方,限北京 请问Recordset的find方法和filter有什么区别? 动态链接库导入对话框资源的问题。在线求解 word中嵌入的金山词霸是怎样实现的? 过了试用期准备签合同。怎么办? Connect Sql server failed using 'sa' user, Why? 我在将一个大于127的long型整数做向左移24位的操作,说overflow,那该怎么办? 逆波兰式(后缀式)求值程序 请问那里有给光盘上复印封面的地方,限北京 悬赏:怎样象在DOS中方便的设置热键,如ESC、F1等? 乱码怎么办? 新手提問:當按下"Enter"的時候,如何用代碼來触發"Tab"事件,使光標移到下一個控鍵上? 请问javascript可以连续多页打印吗?(打印数据库记录) 无奈的法国队,无奈的齐达内! 上半场法国0:1落后于丹麦 初学ASP,怎么能在本机上运行ASP文件? 数据库的图像显示?? 如何改变默认的保存路径? 动态生成web controls的定位问题,急阿!!! 开罗的雅号是什么 已知,在RT△ABC中,BC=AC,P为△ABC内的一点,且PA=3,PB=1,PC=2,求∠BPC的度数. 10ml C=0.1的氯化铵,和5ml C=0.2的氢氧化钠混合,钠离子 ,氯离子 氢氧根 氢离子的浓度比较?如何判断混后溶液的酸碱性? 求关于三农问题论文2000字需提纲!、 开罗有什么雅号?只要一个 利用如图所示的实物,要求两灯并联,电流表测L2的电流,电压表测L1的电压,画出电路图并画出实物图 在炎热的赤道附近,有一座终年覆盖着冰雪的山峰是什么? 热带沙漠气候分布面积最广的大洲 如图所示电路,电流表测通过灯泡的电流,电压表测灯泡两端的电压,若灯丝烧断,则()A电压表可能被烧毁 B电亚表示数等于电源电压C电流表可能被烧坏D电流表示数为0 在炎热的赤道附近,有一座终年覆盖着冰雪的山峰,它是( ) A、安弟斯山脉 B、乞力马扎罗山 C、阿尔卑斯山 粒子为什么会无规律运动 利用如图所示的实物,要求两灯并联,电流表测L2的电流,电压表测L1的电压,画出电路图并将实物链起来 为什么赤道附近的山顶终年被冰雪覆盖? 粒子的运动是有规律的吗?我是说本身的规律,比如粒子运动是有规律的但我们无法发现这个规律也算有规律.那么,如果有规律,那我们是不是可以预见未来了?或者即使我们不能预见未来,未来也 物体做椭圆运动时加速度的方向椭圆有两个焦点,加速度的方向指向焦点吗, 赤道旁的终年积雪的山峰是 华歆和王朗 的品质谁优谁劣 大哥大姐们 赶紧的 回 在一个椭圆中,怎么证明椭圆上距焦点最近的点在长轴上? 雾霾形成原因 微观粒子无规则运动的能量来自哪里?单纯的考虑一个粒子,就比如是中子吧.由于不确定性的存在,它也是要无规则运动的.不记得怎么推导德布罗意波长了.但它一定在空间的不确定性必然存在. 等体积浓度的盐酸和NH4CL混合,为何氯离子浓度大于氢离子浓度,大于铵根离子浓度,大于氢氧根离子浓度 粒子的基本性质是什么 王朗和华歆的为人有什么不同 地球 沿半径为R的园轨道绕太阳运行,彗星绕太阳沿抛物线轨道运行.彗星绕太阳沿抛物线轨道运动.已知此抛线与地球圆轨道一直径的两端相交,不计地球与彗星之间的引力,试求彗星在地球轨道 微粒的性质微粒的4个性质,快. 太阳高度角夏天大还是冬天大 它是指哪个角 绕太阳运行的彗星有多少个 粒子有那些基本物理属性? 人造地球卫星的运动轨迹是以地球的中心为一个焦点的椭圆,近地点离地面距离为P,远地点离地面的距离为q,地球的半径为R,求卫星运行轨道的短轴长 这个也讲一下,公式,算式全部,急 怎么样从化合价分析粒子的性质?如Fe3+,Fe2+,Al3+,H+,S,Cl-,有氧化性的,有还原性的,兼有氧化性和还原性的是哪些?具体是方法,对于其他的粒子呢?还有什么叫分复分应? 春季夏季秋季冬季的太阳高度昼夜长短气温高低分别是什么 在Rt△ABC中,∠BAC=90°,AB=AC,P为△ABC内一点,PA=2,PB=1,PC=3,求∠APB的度数 华歆和王朗的简介 急! 在一年中,白昼最长、太阳高度最高的季节就是夏季,白昼最短、太阳高度最低的季节就是冬季为什么在一年中,白昼最长、太阳高度最高的季节就是夏季而白昼最短、太阳高度最低的季节就是 天平实验先调平衡螺母还是先调游码? 显示电中性质的粒子是什么 经典力学如何描述粒子的运动规律 利用声波进行人工降雨说明了声波的什么特性? 有没有华歆与王朗的故事?我要做作业. 关于高中化学必修一物质的量这题怎么做在800ml 1mol/L的Na2CO3中取出20ml,问钠离子物质的量浓度是多少?   这题该怎么算 用哪条公式?是用n=cv吗? 高碳铁丝与低碳铁丝有说明不同就是低碳有说明好处、高碳有说明好处麻烦您说一下.谢谢了! 华歆王朗的优劣 如图,⊙O是Rt△ABC的外接圆,∠ABC=90°,点P是圆外一点,PA切⊙O于点A,且PA=PB.(1)求证:PB是⊙O的切线;(2)已知PA= 3 ,BC=1,求⊙O的半径.第一问知道了,第二问貌似要用相似,但是相似我不会……有没有不 彗星运行的轨道在什么星与什么星之间 《华歆与王朗》 寓意 天体运动中,中心天体相同,不同轨迹的同一点,为什么 是谁第一个计算出彗星运行轨道的? 非洲分布最广的气候是热带沙漠气候吗? 探究天体运动椭圆轨道特征包括椭圆的轨道方程,焦点,半长轴和半短轴等相关知识 最早算出彗星运行轨道的科学家是谁? 热带沙漠气候在非洲分布广泛,在南美州却在西海岸南北狭长广布,原因是 关于南极洲大的叙述,正确的是 A南极洲陆地全部被冰层所覆盖 B南极洲气温极低,降雪丰富,冰雪很厚 C南极洲是世界上纬度最高,平均海拔最高的一州D南极洲冰层平均厚度4000米以上,有“冰雪大 速求一篇与“全球变暖”(以气温升高、海平面上升、淹没陆地之间的关系为调查主题)有关的调查报告.从以下五个方面回答1、我所调查的主题:______________________________________2、我所查找 一个镁原子质量是一个碳原子质量的几倍 化学必修一物质的量详解! 急求关于温室效应的调查报告 谢谢啦~\(≧▽≦)/~写法要有目的、任务、对象,调查范围,调查时间,调查地点,调查方法 正文要有事情产生,发展过程,有什么设想,准备如何做,具体怎么做,结论 我买了一个实验号为891EB463932的合成立方氧化锆戒指2.50g的值多少钱? 在Rt△ABC中,AC=BC,P是△ABC内的一点,且PB=1,PC=2,PA=3.求∠BPC的度数 算式,结果,公式1.甲圆半径是乙圆半径的2/3,那么甲圆面积是乙圆面积是()2.圆心角为72°的扇形面积为628平方厘米,则此扇形所在圆的面积是()3.在边长为10cm的正方形内剪一个最大的圆,这个
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘