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

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

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

何谓机器学习 机器学习能做些什么? 艰难的决定:EA裁员10%,殃及PopCap 或提前落地!Amazon和Facebook急聘SDN工程师(Python优先) 轻松完成网站提速:来自Google、淘宝等的Nginx PageSpeed模块 Touch-Pay发布 移动联通在手机游戏领域联合推融合计费SDK 如何组织大型JavaScript应用中的代码? Robert Scoble:戴Google Glass两周后 再也不想摘下它 赶时髦?Facebook CEO 2013年将领取1美元年薪 蓝港在线CEO王峰:我在网络游戏行业十年从业记 CMDN Club 27期:从儿童音乐教育到移动碎片化管理 聚焦全球移动市场——你所不知道的俄罗斯 MemSQL:号称世界上最快的内存-关系型数据库 兼容MySQL但快30倍 PC衰落 Intel转投Google挖掘移动市场潜力 移动周报:500元体感、精确到0.01毫米的Leap Motion TUP第29期:王淮、龚世海谈如何打造优秀的技术团队 一网打尽13款开源Java大数据工具,从理论到实践的剖析 从用户体验的善与恶说起,做用户爱“玩”的教育应用 三大主流开源硬件对比:Arduino vs BeagleBone vs Raspberry Pi “BlackBerry 10移动应用开发大赛”应用推荐 Java程序优化的一些最佳实践 Heka:Go编写,来自Mozilla,高效、灵活的插件式数据挖掘工具 Anchora鲁为民:PaaS是我的兴趣 次世代IDE Light Table 0.4发布 带来众多更新和改进 别再设计易碎的Web API! LinkedIn:55人支持2700位员工,2亿用户的大数据分析 Brian Krzanich是谁?这位新CEO预示英特尔未来怎样? HTML5开发者心声:浏览器兼容性成最大问题 传微软6月下旬将发布第二代Surface 7到9英寸全有 Turbulenz:HTML5 2D和3D游戏引擎开源 携程开放平台总经理夏天:内容+高转化率成就开发者 直接拿来用!最火的Android开源项目(一) 如何一本书扫描并保存为PDF格式?利用PDF文件格式可否到数字签名的操作?Acrobat Reader 5.1新增了该功能,但我用不好。谢谢 导航条 大家来看一下啊,,, 关于IE和注册表的两个问题 CComboBox疑问? 如何在字符界面下更改linux的X图形界面? 请问pc机的Com是不是就是一个UART,还是别的什么结构,请告知 如何发布基于tomcat4的加密ssl协议http://的网站 ADO对象问题,在线等待. 查看那些访问数据库(sqlserver)引发死锁的线程的方法(菜鸟请教高手),在线等待...... 思路 如何将表格中的已有数据删为空?总是提示数据类型不正确,怎么办呢? 当FORM1窗体最小化时 如何注册c++build6.0?注册机用不了? 而当FORM1窗体最小化时 --在线等待,高手入内:-IE打印中4.23的问题--- 请问如何在另外一个服务器的文件里写入数据?帮帮忙,急!! 我的困惑 weblogic7.0部署JavaBean和Servlet问题 CComboBox的GetCurSel()问题? 象《金山快译》那样的导航条效果该怎么做了? sql查询的问题,急于解决,请指教! 请问笔记本的开机密码忘了怎么办? 我的困惑 如下小程序,怎么也有问题???请教!? 请问.asf用什么播放 有什么办法能把文本文件中的一个空行给删除 求解(非常急)——在VC中开发电子相册需要哪些技术??? 谁听到过bios这样的报警声 谁知道哪里可以下载vtk4.0软件吗? 斑竹:为什么我提问的帖子没了,难道被删了吗?http://expert.csdn.net/Expert/topic/1323/1323618.xml?temp=.942135 请教?题目:用名为min的函数模板计算两个参数的最小值,用一对整形、字符和浮点数测试所编程序! C++builder6 下载 在线等待有关TurboC4.3的安装问题(还有D版VC的安装) 如何通过EJB删除数据库中的一行记录? 请帮忙 远程桌面共享的密码在注册表中的位置???急!!! 推荐软件:WinReplace批量文件内容替换工具 请推荐一个Java Decompiler 怎样用VB 检测EXCEL是否运行出 (菜鸟级100分) 高分求购 数据库中的OLE字段的读取问题。 研考快了,有几到题莫名其妙,求帮助! 求助大虾??????? 帮忙!! 如何获得当前程序的完整路径和文件名? 高分请教:resin2.1.6+sql2000下,jsp提取的字段显示均为乱码 Ftpcommand ? 如何获取最小化按钮消息?PreTranslateMessage(MSG* pMsg)如何处理? 请教高手——图片如何转换成视频? 河北的高程什么时间报名?什么时间考呀? 等待在线 JS文件打开乱码,如何看到其真实内容? 7月杭州二手房成交寡淡 同比下降25不胜任现职 金华金东区9个干部被免职市委书记黄坤明昨日专题研究部署作风建原温州广电集团副总裁受贿147万余元生意宝首块互联网金融牌照“担保许可证日用电缺口增至300万千瓦 浙江再现浙江严厉打击网络谣言 已刑拘2人治安浙江省环保厅长:希望有更多可下水游泳浙江环保厅长:希望有更多可下水游泳的杭州地铁首个地下商业空间 凤起商业街杭州将政务和公共服务延伸到“最后一公金华公选副处级干部 先到基层锻炼三个“雨神”萧敬腾官网被黑求雨:杭州人民房价连跌22个月 温州放松最严限购令浙江14个浙商回归项目集体开工 总投浙江:干部实名曝光常态化 违反八项规借体检之名游山玩水 浙江严查公费“旅浙江省纪委省监察厅发出通知要求狠刹节钱云会案肇事司机出狱:想对钱家人当面杭州:因高温导致农作物直接经济损失611部浙产剧获“飞天奖” 获奖作品数华春莹与记者激辩到底有多少国家支持中南京牛首山佛顶骨舍利6月22日起公开广西年内将有100名贫困听力残疾人获上海市汽车售后满意度调查 北京现代综南宁发起火龙果产业标准化建设 推动火从阿尔卑斯来到渤海之滨的“中国达沃斯别让团体迷思打压你的原创性证大文化登陆新三板:如今是投资文化艺中国投资助力 花旗发布澳公司未来15无人机飞行展演拉开第七届中国无人机大呼和浩特警方打掉一贩毒团伙 缴获毒品天气炎热致铁轨严重变形 台铁一列车出成都出台楼市新政策“去库存” 不再新广东湛江街头LED大屏滚动曝光老赖北京本周五7万余学生中考 送考车需遵卖淫女声称被强奸 敲诈银行员工21万16岁少年为“找刺激”抢劫4次 被判广东92个市县发高温预警 网友:好想公投逼近 卡梅伦大声疾呼:是英国人就宁夏一男子疑女同事说坏话将其捅死 已河北乐亭赴澳门推介中拉产业园
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘