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

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

编辑:说三道四文库 发布时间:2017-02-20 03:13
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能解决这个问题,当然效率会低一些。但却是必须的。

移动开发工具访谈《近匠》第02期:梆梆安全——APP安全之道 罗永浩:ROM创业,锤子科技A轮融资7000万 独立开发者的自白:Objective-C最糟糕的13件事 回顾Google这一年——Android篇 百度手机卫士正式发布 “防吸费”功能全球首创 2013年平板电脑市场竞争回顾 Apple太阳能数据中心进展顺利,但却在税负减免上备受争议 一名开发者的年度回顾 智能手表Pebble明年初推应用商店 开发者今日起可提交应用 够快科技推出企业级云存储服务“够快云库” 项目开发中,质量和速度哪个更重要? 亚马逊AWS落地中国,云计算产业圈集体发力 Node.js 2013年大事记 【开源推荐】ThinkPHP:大道至简,让Web开发更简单 IE11中的WebGL探秘:渲染速度超Chrome 数据驱动智能:百度在计算广告学领域的技术突破 UX设计师和软件开发者,谁将是2014年的老大? 爸爸去哪儿:开发知名题材手游压力山大 多平台同步 谈IE11全新功能 高通副总裁沈劲:移动是产生变革的强大原动力 高性能、高流量Java Web站点打造的22条建议 云巅:第三代虚拟技术+搜索引擎+乐高理念打造分布式桌面云 Intel:从“芯”构建下一代数据中心 WhatsApp:50名员工,月4亿活跃用户,日160亿条消息和5亿张图片 三星Galaxy Gear智能手表失利 需改进的8个方面 IE11全新的F12开发人员工具详解 研发周报:为什么开发者担心将代码公布 Hadoop YARN的发展史与详细解析 一周消息树:Firefox OS会不会成为下一个Android PhoneGap 3.3.0发布,支持Android 4.4 KitKat 移动周报:两岸三地在线编程学习网站大搜罗 请教各位怎样使用netbeui协议实现Chat功能 小弟是初学ASP,在想自学的愿头下,不知道从何下手,装了PWS软件解释不了ASP代码。赐教! 短信二次开发包 for 诺基亚,感兴趣者请进。。。。 通过MCSD的考试是多看教材呢,还是多做习题库?我还听说多看MSDN也很有帮助. 给几封VC学习的好文章!自己写的最好! 在数据库中追加字段,网络版和单机版有何不同 override与overload的区别? 网络构架 如何在窗体中使用GIF画? main(String[] args)args传的是什么参,请举例说明 用jb5做oracle的CMP程序调试需要首先在WEBLOGIC CONSOLE设置连接池吗? 网站构架 哪位知道哪儿有类似OICQ的分组控件(也就是OutLook风格的) 如何用Delphi编程来获取outlook的邮件列表 如何在一个方法中返回一个数组,怎样用asp访问这数组呢?? ado—odbc uguess(uguess) 找我,我不知道是你错,还是我错,这样说不清,上QQ说8163852 请教宇凡,请教宇凡---关于提取html文件原代码 宽字符转换 关于TeamSource的详细使用 KindDiary日记软件发布了 关于论坛分数的问题,不知道大家有没有这种情况 RTTI执行时期型别辨识、动态生成的用处在哪些方面,它们的好处到底在哪里?举个例子来说吧!! 困扰达20多天的两个问题…… VB怎样调用简单的(没有输入输出参数据也没有包)Oracle存贮过程?急急!! 给几篇VC的经典文章,最好是自己写的! zxyufan(宇凡)请告诉我你的mail,我的是ipman@sohu.com (ipman) delphi中获得当前系统日期是什么函数? vb中有沒有像VC中的多行注解格式/*......*/ 大家帮我一个朋友看看:这种公司还能呆吗? 随机函数是? 软件发布:KindDiary日记软件发布 delphi6.0连接SQL SERVER2000时的问题 杭州博讯软件有限公司招聘PHP+MYSQL 程序员 CSDN怎么加不成分了?我都试了3、4遍了,迷茫中........ 关于*.ini 关于任务栏隐藏的新问题 令狐冲你在么,有点事向你请教 怎样改exe图标。 用winsock1.1编写TCP方式通讯。执行recv函数出现提示框“Unhandled exception in XX.exe(MSVCRTD.DLL): 0xC0000005:Access Violation.” 请教高手!在用NetMessageBufferSend()函数时为什么编写时出现提示信息但编译时却说undeclared identifier const SQ = $82040030 中给SQ常量付的值是什么值?能解释一下吗? 请大家帮帮我(CListCtrl的问题)! 怎样使用script语言使当前所有的超级连接失去焦点?--包括网页当中的框架! 简单的同步问题…… 如果解决命名冲突? IP指定端口的sniffer Delphi6 下 安装 ZipTV 4.14 问题 奇怪的编译错误。。。 谁知道有什么软件可以锁定目录? 请教为什么我的javah命令总是显示error: Class ***.class could not be found. 急英语作文,十分钟内要!为“should students in grade nine do after-class activities” 题的作文!八十个单词以上!只要写的出来 当2(k-3) 以“快乐的我”为题写一200字左右作文,生活中处处有快乐,只要你改变心态,只要你用心去欣赏,你就发现快乐就在你身边.请以“快乐的我”为题些一篇作文,表达你的快乐心情和对生活的热爱 关于家庭照片的英语作文急、要5个人、爷爷奶奶、爸爸妈妈、我、 当k等于多少时,(78-2k)÷5的结果是10?还有一道题:当k等于多少时,(78-2k÷5)的结果是1?要求详细计算才得分.越快越好. 一项工程,甲独做10天完成乙15天完成.现在由甲独做-------天后再乙独做-------天,11天完成 英语作文 照片一张照片(最好是风景照)然后写一些关于这些问题的东西1、what it shows2、where it was taken3、details about the people and things4、why you like it一定别太多,60字足以 某实验室要用盐水,要求盐水的密度是1.1*10^3kg/m^3,现配置了0.5dm^3的盐水,称得盐水的质量是0.6kg,这种盐水是否符合要求?若不符合要求,应该加水还是加盐?加多少? 一项工程,甲独做10天完成,乙独做15天完成.现在先由甲独做了几天,再由乙接着独做,共用11天完成任务.两人各做了几天?不要方程. 500ml盐水.质量600克密度1.2克每立方厘米加多少水变成密度1.1克每立方厘米 five to 是差5分钟6点的意思吗 在双轨铁路线上,有两列货车都是250米长,以每秒125米的同样速度相对开来.从两车的车头相遇,到车尾相离,一共要用多少秒? 关于读书的作文(要不想作弊)500字 我最爱画画 作文(300字) 在双轨铁道上,一列长200米的客车与一列从对面开来的长300米的货车,由车头相遇到车尾离开一共用了10秒钟.已知客车每秒行27米,货车每秒行了多少米? in the past five of six years和 in the past five or six years的区别 一项工程,甲队单独做需18天,乙对单独做需24天,如果两队合作8天后,余下的再由甲队单独做多少天完成? 一列客车长200米,客车与货车速度之比为3:2一列客车长200米,一列货车长280m,在平行的轨道上相向而行,从两车头相遇到两车尾相离经过16秒,客车与货车的速度之比为3:2,问两车每秒各行驶多少米? 英语6:05怎么说( 答 six five five past six)不给分 我的特长作文300字——画画急需,苏教版语文四年级上册习作二 一项工程,甲单独做10天完成,乙单独做15天完成,丙单独做要12天完成任务,现在3 What" the time -I guess it"s A.six past fifty B.fifty past six c.six o fifteen D.six o five我总感觉后面的两个选项有毛病,可书上就是这样写的. 铁路上,长300米的货车以每秒20米的速度匀速行驶,迎面有一 我的理想作文500字(画画)要难见的 5:35为什么不说是twenty-five to six 而是thirty-five past five? 小明家需要配制密度为1100kg/m3的盐水,现配制了0.005m3的盐水6kg,这种盐水是否符合要求?若不符合要求,应如何处理 .一列长280米的货车,通过一家铁锹用了66s;另一辆长160m的客车,速度是火车的2倍,通过此桥用了27s.求货车速度和桥长 玩跑得快:多方牌 一个3,一对4/5/6/7/9 三个Q和K 一个2,少方牌 一对A与10 多方先出规则如下:多方先出,三个可以带一对,不许带单张,可以不带,可以出不少于5张的单个顺子,不许出连对.2最大,3最 一项工程,甲独做10天完成,乙独做15天完成.现在先由甲独做了几天,再由乙接着独做,共用11天完成任务.两人各作了几天? 铁路旁有一条小路.一列车长为110米的火车以每小时30千米的速度向南驶去,8时追上向南走的一名军人,15秒离开他而去,8时6分迎面遇到一个向北行走的农民,12秒离开这农民,问军人与农民在什么 一项工程,由一个队单独做,甲队要18天,乙队要15天,乙队先做5天,剩下的由甲队做,还 一项工程,甲独做10天完成,乙独做15天完成,现在先由甲独做了几天,再由乙接着独做,公用了11天完成任务,两人各做了几天? 一列长120米的货物列车遇到迎面开来的一列长160米的客车,从车头相遇到车尾离开共用了8秒,货车每秒行驶17米,客车每秒行驶多少米?要用方程, 一项工程,甲队单独做需要15天,乙单独做需要18天.如果甲队先做4天,剩下的由乙单独做,需多少天完成 一项工程,甲堆10天完成,乙队15天完成,现在由甲队独做几天,乙队接着做,共用11天完成任务.两队各做了几天? 4 3/4" inches 具体是表示多少厘米 作文 我的兴趣要写的具体 不要跑题 what word of five cetters has left six often you take two awayaiya 用盐水选种时,需要密度为1.1*10的3次方千克/立方米的盐水.某同学配制了400Ml的盐水,称得它的质量为0.6千克,问这样的盐水是否符合要求?如果不符合要求,需要加盐还是加水?加多少? 求0=k+b,5=-2k+b的解 what five letter word has six left when you take away two letters? 画画让我着迷 作文 600字 急 It′s five fifty-five.That is to say,It′s--------- A.five to six B.six to five C.five past fiveDfive past six 作文一篇 你是怎样过元旦的 450字 What five-letter word has six left when you take two away? 一项工程.甲独做18天完成,乙独做15天完成.甲乙两人合做,但甲中途请假4天,那么现在完成甲实际做了多少天? 请写一篇有关新年的作文!(400-450字) This word has five letters.It six left if you take two letters away.what is it?不过...所以请哥哥姐姐回答下 一项工程,甲,乙合干需15天完成,如果甲单独完成要18天.甲乙合干了5天,剩下的由乙继续干,还要几天完成另一道 甲乙两车同时从A地出发到B地,甲到B地后立即按原路返回,在距B地25千米处与乙相 一项工程,甲独做要18天,乙独做要15天,二人合做6天后,其余的由乙独做,还要几天做完?我看我哥哥的书上有这1题,想问问 what five-letter word has six left when you take two letters away?哪五个字母的单词在拿走两个字母后还有六个left? 全题一项工程,甲单独做18天完成,乙单独做15天完成.现甲、乙两人合做,但甲中途休息请假4天,那么完成任务后甲实际做了多少天?要算式,最好不用特殊符号) 一项工程甲独做18天完成乙独做15天完成现决定由甲乙两人完成但途中甲有事请假4天那么完成任务时甲实际做了少天 某列货车通过长82米的铁路桥用22秒,如果速度加快一倍,通过706米的铁路桥只要用50秒,火车原来的速度是?用什么办法都行,过程最好清晰点,好让我看得懂些. 一项工程,甲队独做15天完成,乙队独做18天完成.甲乙两队合做6天后,剩下的任务 生活中的乐趣作文500字 写画画 一列车身长180米的货车以每秒24米的速度由南向北行驶.一列车身长324米的客车由北向南行驶.他们在一条长108米的隧道南口碰上,在隧道的北口错开.客车的速度是 . 1张照片的介绍 英语作文帮忙写下.随便什么照片,最好是写风景的啊~~初三水品.要有定语从句 《我的乐趣》作文500字不写乐器,最好写体育~ 一个人以每分钟60米的速度沿铁路步行,一列车长144米的客车对面开来,从他身边通过用了8秒,列车的速度是
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn