| p; //连接第二个线程时这里出现问题
if (fieldbyname(''''Phone'''').asstring='''''''')or (fieldbyname(''''Name'''').asstring='''''''')or (fieldbyname(''''SkillLevel'''').asstring='''''''')then begin showmessage(''''nil''''); Fnmmsg.Disconnect; Fnmmsg.Host:= FIPaddressinfo; Fnmmsg.Port :=6711; Fnmmsg.FromName :=''''b''''; Fnmmsg.PostIt(defeat); //发送错误消息 close; end
else //如果找到了电话号码 begin
strlist.add(fieldbyname(''''Name'''').asstring); //写入姓名 SkillInfor:=fieldbyname(''''SkillGroup'''').asstring; strlist.add(fieldbyname(''''SkillGroup'''').asstring+''''业务处理=''''+fieldbyname(''''SkillLevel'''').asstring); //上海市业务处理=1 strlist.Add(fieldbyname(''''Phone'''').asstring); //写入电话号码 RetureInformation :=strlist.Strings[0]{工号}+''''#''''+strlist.Strings[1]{姓名}+''''#''''+strlist.Strings[2]+''''#''''{技能信息}+strlist.strings[3]{电话号码}; //edit; //烦会给客户端的信息 // fieldbyname(''''IsLogon'''').asstring:=''''1''''; //登录成功,写入成功标志 // Post;
FNMretureMSG.Disconnect; FNMretureMSG.Host :=FIPaddressinfo; FNMretureMSG.Port:=6722; //回传信息远程端口为6722; FNMretureMSG.PostIt(RetureInformation); //返回成功的信息
/······························· {进行查询工作组信息,然后传送信息} if active =true then close; sql.clear; SQL.Add(''''SELECT * FROM WORKER WHERE SkillGroup=''''+''''"''''+SkillInfor+''''"''''); open; WorkGroupUserInfor:=Tstringlist.create;
while not eof do begin WorkGroupUserInfor.Add(fieldByName(''''Name'''').asstring ); {index0 name} WorkGroupUserInfor.Add(fieldByName(''''WorkMark'''').asstring ); {index1 workmark} WorkGroupUserInfor.Add(fieldByName(''''Phone'''').asstring ); {index2 Phone} WorkGroupUserInfor.Add(fieldByName(''''SkillGroup'''').asstring +''''业务处理=''''+fieldbyname(''''SkillLevel'''').asstring);{index3 SkillGroup} IPlist.Add(fieldbyname(''''IPaddress'''').asstring); ://所有的ip地址保留到内存中 //showmessage(fieldbyname(''''IPaddress'''').asstring); iplist.SaveToFile (fieldByName(''''SkillGroup'''').asstring+''''IPlst.INI''''); next; end; WorkGroupUserInfor.SaveToFile(fieldByName(''''SkillGroup'''').asstring+''''.ini''''); close; end; end; end; end; except //防止查询失败 begin FAdoQuery.close; FAdoQUserInfor.close; end; end;
end;
end. 注意:使用这两个函数应该加上activex.pas单元,否则,无法运行。
我个人认为,如果开发基于ADO的多线程操作,最好在每个线程中放置一个连接,而数据集和数据连接都使用动态生成,当然你必须要注意必须要保证线程能过正常的释放,否则你的电脑很快就快死机了,呵呵,当然还有第二种方法,你可以生成一个数据模块,静态放置数据集和ADOCONNECTION组件,然后使该数据模块不在程序开始时生成,而可以在线程中动态的生成,这种方法也可以,有兴趣的朋友可以试一下二者之间的执行效率。
而对于ADO,我认为在开始情况下,如果不初始函数和后来的释放函数,却不能报错,应该是一个BUG吧。
谢谢关注:
QQ:53997882欢迎大家互相交流
上一页 [1] [2] |