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

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

编辑:说三道四文库 发布时间:2017-03-24 02:22
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用API复制移动文件 VB用OleDragdrop事件接受拖放文件 用VB进行文本文件的再处理 用VB开发应用程序如何使用INI文件 用VB实现文件查找功能 VB用Winsock控件实现文件的下载 VB用两分法搜索列表框或组合框中的数据 在 ListBox 之中, 如何检测鼠标所在位置的选项? -VB资料 在 Textbox 中,录入 N 个字符后移到下栏-VB资料 在 VB 中控制 Word 在GotFocus时快速选择文本 -VB资料 在VB中使用文件对象 在VB中使用艺术字 在VB中引用.dbf及索引文件 在Windows操作系统中改变文件打开方式-VB资料 在程序运行时,怎样把多个文本框的内容保存起来-VB资料 在打印字符串时自动换行 -VB资料 在文本框中快速增加一串字符-VB资料 在文本框中实现由加减号输入数据-VB资料 在引用项目找不到Excel、Word等Office软体Lib的解决法-VB资料 VB怎样从文件列表框中取得文件的完整路径和名称 VB制作一个有参数的执行文件(方法之简单难以想像) 资源档(.RES)的应用-VB资料 自定义Text的pop-up菜单-VB资料 自动出现动画、进度和确认的文件操作 -VB资料 自动选择 Text 的内容-VB资料 VB 调用 IMAGE 控件实现图像缩放的一种方法 VB5 实 现 窗 口 图 像 缩 放、 滚 动 技 巧 VB编程之提速攻略(一) VB开发通讯软件 如何对内存变量中的xml字符串进行分析操作? VB调用Excel,如何设置单元格中的数字为文本格式 请问成人自考电大与正规大学在招聘时区别大吗? Delphi高手,快来帮忙 我爱西瓜小姐 想看有关VB源码 超级难题啊,痛苦! 局域网下在WIN2000/XP里如何用VB程序自动改变IP? 请招人时自考成人电大与正规大学的差多少呢?急! MDI子窗体显示时有一个明显的由小到大的变化过程,看起来很不舒服,请教该如何解决? 怎样用语句创建NMSMTP控件 局域网下在WIN2000/XP里如何用VB程序自动改变IP? 在Delphi 如何像C++里用extern关键字来引用另外一个单元的全局变量? 对联 谁能帮我出一套关于JSP高级程序员的面试题,并附答案!高分相送,不止这100分 MFC中对文本文件能否以行为单位进行读写 大侠给几篇C程序原代码 到底要怎样才能用好progressbar进度条? 参与者有分! 怎样调用 其它窗体的内的对象的属性?? JSP的应用经验 工具条的问题,求解 我喜欢西瓜小姐 我公司现有固定电话收发电子邮件系统,可收附件,将WORD,HTML文档转换为TXT文本 关于内码问题 远程控制 关于JDBC2.0的问题(50分!!!!) 哪位有高招? 升级BIOS和升级主板? 急!急!急!急!窗口不能关闭. 哥哥姐姐们请帮忙???(急需linux环境下用php+mysql如何实现搜索引擎) 大家赞不赞成开一个Palm技术区?赞成的跟贴,满50个就开。 定义 Dim reader As System.Data.SqlClient.SqlDataReader lvlvlvlylyly请看,你的贴子我加不上了,还查一段程序加在这里了 如何传送monthview1中用户选择的日期到其他窗体里 你该怎么做呢 国内什么样的网站托管好?还是选择国外的? 女网友一定要小心 mschart控件问题 赶快来尝试一下吧! 如何在 View 类中编写press any key to continue功能模块 Vc++下应用Matlab数学函数库出错 如何用VB实现自动登录? 赶快来尝试一下吧! ado的问题! 如何传递带“%”的参数? 有全套的ERP源代码为你提供,助你在开发过程中更上一层楼 字符串str=" aaa ",如何变为"aaa" 怎么没有人理俺泥?? 关于dw的问题 如何读入数据库中的HTML格式的正文呢? 一个在阅读<<深入浅出MFC>>中遇到的问题 !!!!急 新手,说找不到mfc42d.dll文件 绿叶蔬菜隔夜会产生亚硝酸盐,是说的生的还是熟的呢?生的也不能隔夜的话 那冬天的白菜都是存起来的慢慢吃的,就算现吃现买 买的也不见得是现摘的呀 是不是很多亚硝酸盐. 举例说明物质与氧气反应的两种常见方式 乙酰丙酮光度法测量甲醛,乙酰丙酮溶液应该是什么颜色. 像平菇 西红柿 非绿叶蔬菜隔夜会产生亚硝酸盐吗? 氧气的化学性质_____________,能与许多物质起反应.氧气具有_________,是常用的________.氧气能支持燃烧,带火星的木条在氧气中能___________.写出下列反映的文字表达式,指出基本反映类型(化合反应 如何鉴别稀硫酸,氯化钙,氯化钠 绿叶蔬菜有哪些 细胞膜内外两侧结合的蛋白质种类有差异.这句话对不?细胞外也能产生蛋白质? 降解人体酒精浓度的药急自制 细胞膜上的蛋白质有几种?结构是什么?作用是什么? 物质与氧气反应的两种最常见方式是()和(),钢铁生锈属于(),森林大火属于() 我吃的食物含亚硝酸钠,我该怎么办? 现在的独生子女,从小就饭来张口,我也一样,到今天这个年龄,还不知道究竟哪些蔬菜是真正的绿叶蔬菜?是不是有绿色叶子的就是绿叶蔬菜?那大白菜,菠菜,卷心菜是不是绿叶蔬菜呢?实在太想知 不同物种的细胞中细胞膜上蛋白质和磷脂的种类均存在差异. 84的成分是次氯化钠 和次氯化钙有什么联系和区别 漂白粉漂白精的成分是次氯化钙 漂白精和84不同吗那为什么84的成分不能是次氯化钙呢 它们德漂白原理相同 为什么成分不同 生物书上说:镶嵌在细胞膜上的蛋白质大部分是可以运动(流动)的.而其他的为什么不能? 碳酸钠如何变成氢氧化钠 五步蛇泡酒需要的药材?活五步蛇泡酒后酒里有毒吗? 细胞膜上的蛋白质分类.要详细的 钠在空气中的最终产物是碳酸钠还是氢氧化钠空气中的co2毕竟少啊 食物中是不是完全禁止添加亚硝酸钠? 有什么简单的生物实验?要初一以下的,材料较简单.初一以下的 越简单越好 要课本没有或课后做的 材料简单 氢氧化钠怎么反应变成碳酸钠?要化学方程式 什么食物可以把亚硝酸钠排出来 不要麻烦,没有显微镜的,不要在书里头,在明天下午之前,有好方案加50分啊 氢氧化钠怎样变成碳酸钠的 亚硝酸钠是什么 没有道具 酒精和氧气催化反应方程式,急用! 乙酰丙酮铝有毒吗? 功能越复杂的细胞,膜蛋白的种类和数量越多可不可以这样说呢,不是应该为细胞膜吗 为什么乙醇在水中的溶解度比丁醇在水中的溶解度大 乙酰丙酮有毒吗做实验时喷溅到嘴里半滴,然后含着一分钟给吐了(当时抽不开身),我觉得因该有毒, 不同功能的细胞,其细胞膜上蛋白质的 种类和数量相同.这句话对吗 酒精和氧气反应的方程式拜托各位了 3Q 氧气,氧化铝,氯化亚铁,硫粉,氯化钙,硫化钠,氧化铁,水银,硫化钾的化学式是多少 细胞膜的功能越丰富,膜蛋白的种类和数量就越多 这句话对吗 求生物实验的几个实验数据观察根尖分生组织细胞的有丝分裂,因为后面要求要绘图, 钾.钠.镁.钙.铁.碘元素分别在人体内的主要生物功能 功能越复杂的细胞膜,其蛋白质种类和数量越多,下列除哪项为,均属于正常机体细胞膜上的蛋白质A具有信息转换的受体蛋白 B具有催化作用的蛋白质 C均有识别功能的糖蛋白 D具有运输功能的载 Na2O和Na2CO3怎样转变? 20岁的女人尿液含有蛋白质,是什么病? 功能越复杂的细胞膜其蛋白质 种类,数量越多(解释)下列除了哪项外,均属于正常机体上的的蛋白质A具有信息转换功能的受体蛋白B具有运输功能的载体蛋白C具有识别功能的糖蛋白D具有免疫 Na2O能一步转化为Na2co3吗 我尿液里总是有蛋白,会发展成什么病啊? Na2CO3如何转化为NaOH Na到Na2O到Na2CO3,各个过程的化学方程式,Thank you, 尿液中含有较多的蛋白质得了什么病 就是酒精加磷酸二氢钾水溶液会生成什么物质酒精和磷酸二氢钾水溶液混到一起变成白色半固态物质,不知是什么 跪求一个新颖的植物生物学创新试验课题!我是大二生物学专业的,我们要求设计一个植物生物学创新实验,但是我实在想不起来该选什么课题,求一个新颖的植物生物学创新实验课题. 在Ca(HCO3)2稀溶液中加入Na2O2 固体生成的沉淀是什么是Ca(OH)2还是CaCO3? 求比较NH3 PH3 AsH3的沸点高低 生物医学和生物医学工程有什么区别?生物医学的就业方向和前景如何 Ca(OH)2 + 2CO2 = Ca(HCO3)2↓,这个Ca(HCO3)2难道是沉淀吗 酒精属于什么物质 谁能帮我想一下关于为生物或者化学的创新实验课题?校级的,没必要太高深. 酒精与氧化铜反应究竟生成什么物质 绿叶蔬菜中的硝酸盐什么情况下,会转变成亚硝酸盐? 举例说明生物医学工程学对医学发展的贡献(不少于三个实例) 为什么冷却的氧化铜不能和酒精反应
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘