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

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

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

Rovio转向发行业务 将发布新作Tiny Thief 上山下海 “硬汉”服务器无所不能 访金山云CTO杨刚:开源改进PK自主研发,技术驱动前行 苹果涉及色情问题,且进一步恶化 开源产品系列:面向组件的Web框架tapestry 360指责百度窃取用户信息 公布美杜莎插件技术分析 苹果正式发布iOS 6.1 最快本周日即可越狱 苹果高管:运行iOS 6的设备达3亿 Chrome OS 黑客大赛总奖金为314.159万美元 微软雷德蒙研究院副总裁:从计算研究到惊人发明 还驾驭不了4核? 别人已模拟出百万核心上的并行 RIM将网络直播BlackBerry 10发布会 解读TDD的五大误区 Amazon 2012财年Q4财报:电子书业务增长70% 从暴风影音CTO到创业者:画中画相机话中话 为什么Android应用开发总要比iOS晚? 传奇VC马克.安德雷森:未来的企业什么样? 呼吁国会通过“创业签证”:奥巴马助力美国招揽海外人才 Surface Pro最低1019美元,价值究竟如何? 搜狗号码通产品经理谈微创新 数据和运营更关键 在线推荐系统是如何进行工作的? 欧朋浏览器上架App Store,iOS生态真要变天? 苹果iOS 6.1地图搜索API将替代谷歌Places Oracle向开发者承诺 称尽快修复Java安全问题 日本:开发者与投资人都不容忽视的移动市场 Unity 3D引擎:十大最火的插件推荐 重塑品牌 RIM更名黑莓 发布BlackBerry 10移动操作系统及新手机 NoSQL依赖的不只是大数据 还有应用程序架构的改变 新一代Apple TV增强内在组件 外观不变 加速Web开发的7款知名HTML5框架 Firefox OS开发者日来袭 5小时15款Web应用出炉! 为什么oracle网站上供下载的8i 8.1.6和8.1.7有什么区别,为什么大小相差这么多,一个500多兆,一个只有80多兆? 本人爱几最近出现这种问题,各位英雄如有办法,万望帮忙 在一个php中如何直接打开另一个php,详细一点 就这样被妳征服................ CSDN的一个哥们找到了女朋友,CSDN一下子少了两个单身的人,为什么? 一个关于生成报表的问题 以前陪我看月亮的时候叫我亲亲疯哥哥,现在新人胜旧人了,叫人家死疯子!你以为我这么辛苦来这里真的是为了灌水吗?还不都是为了你这个没有良心的! RDO和DAO的区别 地铁站里看书的女孩 今天高兴!推荐 今天高兴!推荐一个MM叫 a_li ,大家多捧场! 救救我吧?? 唉~ 我都21了 刚中专毕业 我可咋整啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 如何用VC做不规则形状窗体 是蜜月?要我一个月搞定软件下载,怎么办哪? 在VC中,分割窗口CSplitterWnd是否可以将卷滚条去掉 请问,如何动态向select(下拉列表框)中添加项目,另外,如何取得当前的选项 用INSERT ROW在表格中插入记录 关于CTreeCtrl的SortChildrenCB函数调用的问题 求教将文本格式化输出的代码 急需英文WIN2K+多国语言版, 各位专家们,可知道Acer的笔记本用的可是台式CPU? leeyansheng(风妖精) 在不在???刚看见你。怎么还没睡? 请教:我安装完flashget后,可是我要下载文件时,点击时默认的不是flashget,还是一般下载的那种,不知道该如何解决?急 请问为什么不能在dns中创建新区域 怎样控制键盘灯 OK,过足疯瘾了,开始 CODE 那位好心人介绍几本关于 java 的书? 急!!!各位高手,能否帮忙做个流程图,谢谢各位! 如何做一个真正的屏保? 中文Win2000与中文win98在使用CDC::Arc上有什么不同吗? 如何完全控制鼠标 35分任你拿 skyyoung 、 kookoo 、 BrentIvan 、 mshy 四位大虾,请留下email,小弟有要事好事通知! C#适用于开发大型的应用系统吗? 哪位有二手笔记本卖 孤独大哥还在吗?有人找! 请教一个高级问题!!! 怎样把帮助文件(.hlp)转换为和执行文件(.exe)。 关于ACCESS用SQL SUM的问题 怎样在csdn发布自己的软件 谢谢大家的回复.我已经知道可以建立个autorun.ini的文件.内容为(但是还有一个问题...) 菜鸟问题:如何删除一个里面有文件的目录? 我的大梦 API初学者的问题!!帮帮忙!!谢了!!! 那里有《ATL开发指南》第二版 电子工业出版社 下载(高分) 本人编制了一份“使用BCB5进行多国语言开发”的文档,希望对大家有用 ==================月薪8百,招聘VC通讯编程高手72名,要求待遇进来看.============== 展示程序,有原码,只邮前50个。 不对啊!是不是电脑报出错了?? win2000菜鸟问题. 那种包月可比较合算? 一个长方形的周长是30厘米,长是12厘米,求宽,列方程 一座桥长2400米.一列火车以每分钟900米的速度行驶,从车头开上大桥到车尾离开大桥用了3分钟.车体多长? 鸡兔共28只,兔脚比鸡脚多16只.鸡兔各多少只?方程算式! 乐家超市有奶粉 豆奶粉共132袋 豆奶粉的袋数是是奶粉的1.2倍 奶粉和豆奶粉各多少快 一列火车以每分钟1千米的速度通过一座长400米的桥,用了半分钟,则火车长多少米? 鸡兔同笼,共有头71个,鸡的脚比兔的脚少98只,问鸡、兔各几只?(列方程) 果园里,桃树的棵数是梨树的4/5,梨树的棵树是苹果树的5/7.苹果树有126棵,桃树有多少颗? 一列火车以每分钟1千米的速度通过一座长400米的桥,用了半分钟,则火车本身的长度为多少米? 鸡兔同笼,共有头12个,脚36只.问鸡和兔各几只?(列方程) 果园里,桃树的颗数是梨树的五分之四,梨树的棵树是苹果树的七分之五.如果苹果有126棵,桃树有多少棵?如果桃树有72棵,苹果树有多少棵? 一列车以每分钟1千米的速度通过一座长400米的桥,用了半分钟,则火车的本身长度为多少米? 鸡兔共有头48个,共有足132只,鸡、兔各有多少只?(用方程解) 一个果园里有梨树126棵,桃树棵树是梨树的9分之8,苹果树棵数是桃树的4分之3.这个果园有苹果树多少 一列长200米的火车以每小时60千米的速度完全通过一座长400米的大桥需几分钟? 鸡兔同笼,共有45个头,146只脚,笼中鸡、兔各有几只?列方程 果园里桃树的棵数是梨树的5分之4,梨树的棵数是苹果树的7分之5,如果苹果树有126棵,桃树有多少棵?用方程解 一列火车以每分钟1千米的速度通过一座长400米的桥,用了半分钟,则火车本身的长度为 (用方程) 鸡兔同笼,共有45个头,148只脚,笼中鸡和兔各有多少只? 果园里有梨树380棵,比苹果树的2倍少40棵,果园里有苹果树多少棵?(列方程解) 在某月的日历上,一个数列相邻的3个数字和为69,3个数字分别是多少?3楼的你神了啊,没错,我是嘉兴市一中实验学校的学生,问题还是上面那个。 鸡兔同笼,上有20个头下有45只脚,有多少只鸡多少只兔 果园里苹果树棵数比梨树多五分之一,梨树比苹果树少14棵,苹果树有多少棵?注意~第一个条件的单位一是梨树,第二个条件的单位一是苹果树.注意~第一个条件的单位一是梨树,第二个条件的单位 在某张日历中,一个数列相邻的四个数的和是50,求出这四个数 鸡兔共有80只鸡脚比兔脚多40只问鸡兔各有多少只?不能用方程! 一列长210的火车通过一座长1690米的大桥,从车头上桥到车尾离开用了2分钟,求这里火车的速度……要有原因…… 在某日历的一个数列上圈出四个数,这四个数的和是74,则这四个数分别是 鸡兔同笼,鸡比兔多15只,鸡兔共有脚132只,问鸡兔各多少只 一列火车以每分钟600米的速度通过一座长2200米的大桥如果火车全长200米,从车头到车尾离开桥,共需多少多少分钟 某个月日历的一个数列上的数只和为46,则这个数列上的第一个数是多少 鸡兔同笼,鸡比兔多15只,鸡兔共有脚132只,问鸡兔各有多少只?用假设法解 一列长290米的火车以每分钟900米的速度通过一座大桥.从车头到车尾完全离桥共用了3.5分钟,这座大桥长多少米? 如果用一个正方形在某个月的日历上全出3乘3个数的和为126,这九天分别是几号? 鸡兔同笼,一共有228只脚,并且兔子比鸡多15只,鸡兔各有多少只?(解方程) 一列火车的车身长800米,以每秒8米的速度行驶,经过一座长为一千六百米的大桥,请问从车头上桥到车尾离桥共需多少时间 某张日历上,设3x3方阵的中心数是x,方阵中9个数只之和是126则可列方程怎么列解得x=多少,方阵中最小的数是多少,最大的数是多少? 鸡兔同笼,兔比鸡多15只,脚数共228只问鸡,兔各几只. 一列800米长的火车,通过一座大桥,速度是24米/秒.从车头上桥到尾离桥共用了100秒的时间.大桥的长度是多少米? 初一数学日历问题习题我需要初一!记住是初一的数学日历问题的习题,越多越好!记时5分钟哦! 鸡兔同笼,共有30个头,88只脚.求笼中鸡兔各有多少只?2.鸡兔同笼,共有头48个,脚132只,求鸡和兔各有 问:一座桥长2100米,火车每分钟800米的速度通过,从车头上桥到车尾离共一座大桥长2100米,一列火车以每分钟800米的速度通过这座大桥,从车头上桥到车尾离开共用3.1分钟,这列火车长多少米 如果用一个正方形在某个月的日历上圈出3x3个数的和为126,则这9天分别是?请用方程解. 鸡兔同笼,鸡比兔多15只,鸡兔共有132只脚,问鸡兔各有多少只? 一个长方形的周长是88厘米,长比宽的2倍多8厘米,求长方形的面积怎么列方程 一座大桥长3400米.一列火车通过大桥时每分钟行800米,从车头开上桥到车尾离开桥头共需4.这列火车长多少米? 鸡兔同笼,共有45个头,146只脚.笼中鸡兔各有多少只?方法一:假设45只全都是鸡,共有()只脚,比146只脚少()只,要在()只上各添上2只脚,因此就有()只鸡,()只兔方法二:假设45只全都是 一个长方形的周长是150厘米,长是宽的2倍,这个长方形的面积是多少?(方程解答)要正确的方程 一列800米长的火车,通过一座大桥,速度是24米/秒.从车头上桥到车尾离桥共用了100秒的时间.大桥的长度是多少米? 鸡兔同笼,上有45个头,下有146只足,笼中鸡、兔各有多少只? 长方形的周长是192厘米,长方形的长与宽的比是5:3,这个长方形的面积是多少厘米(不要列方程) 一座大桥长2400米.一列火车以每分钟900米的速度通过大桥,从车头上桥倒车尾离桥共用3分钟.这列火车长多少米 鸡兔同笼,共有45个头,146只脚,笼中鸡、兔各有几只?不是方程 一个长方形的周长是240米,长是宽的2倍,求长方形的面积?用方程做 一座大桥长2400米.一列火车以每分900米的速度通过大桥,从车头上桥到车尾离桥共需3分钟.这列火车长多少米? 鸡兔同笼,共有45个头,146只脚,笼中鸡,兔各有几只?要列式. 一个长方形的周长是40分米,它的长与宽的比是3:2,这个长方形的面积是多少 一列火车长420米,这列火车在通过一座大桥时车速为980米/分,从车头开上桥到车尾离开桥共用4分钟,这座大桥长多少米? 鸡兔同笼,共有45个头,146只脚,问笼中鸡·兔各有多少只?(提示:可以让兔子站起来) 一个长方形,长比宽的3倍少一,长方形的周长为30厘米,求这个长方形的面积. 一列火车以每分钟八百米的速度通过了一座大桥,从车头开上桥到车尾离开桥共需要四分钟,已知火车长300米求 鸡,兔共40只,兔子的脚比鸡脚多16只,鸡兔各有多少只?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn