首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

十分怪异的有关问题:dbgrid在线程中显示结果错乱

2012-02-02 
十分怪异的问题:dbgrid在线程中显示结果错乱?这个程序在我的电脑上和其它几台电脑上没有任何问题(全是XP系

十分怪异的问题:dbgrid在线程中显示结果错乱?
这个程序在我的电脑上和其它几台电脑上没有任何问题(全是XP系统),但在另外两台新电脑当中(电脑公司给安装的GHOST XP系统)就出现了问题。可是我在我这台电脑中编译到运行没发现任何问题,没办法,我在那两台新电脑中安装了CB6,并在CB6当中运行程序,终于抓到了问题:

 

点击“查询”按钮后调用线程,这个线程是用来查询数据库并在DBGRID控件中显示结果的,源代码没有任何问题。但只要把DBGRID控件连接到DataSource1就会出现错误提示,见下图:




点“确定”后继续运行,发现DBGRID窗口里面显示的长或宽度是错乱的,见下图:




在线程中,代码是这样的:

  Form1->Label5->Caption="正在进行查询,请稍候!";

  serverid="Provider=SQLOLEDB.1;Password=XXX;Persist Security Info=True;User ID=XXX;Initial Catalog=ABCD;Data Source=192.168.1.22";
  searchclass="ydnq_nx";

  Form1->DBGrid1->DataSource=Form1->DataSource1; //问题出在这里,如果不做指向就不会出现上面所说的错误,当然也不会显示出来查询结果了。我也试过直接修改DBGrid1的DataSource属性为DataSource1,问题依旧,总之就是不能正常显示。
 

  Form1->ado1->Close();
  Form1->ado1->ConnectionString=serverid;
  Form1->ado1->SQL->Clear();
  Form1->ado1->SQL->Add("select phone as 手机号,servicename as 项目,flag as 定购状态,startdate as 定制时间,qxdate as 取消时间 from ["+searchclass+"] where phone='"+phone+"' order by startdate");
  Form1->ado1->Open();

  Form1->Label5->Caption="查询完毕,请查看!";

=====================

这个问题的奇怪之处是同样的程序,在其它电脑中运行都没有问题,只有在这两新安装的电脑中才会有这样的错误,不知道是怎么回事。

个人分析可能是新系统优化做的过多,导致缺少DLL文件或运行库文件?不知道是不是这样。 到底怎样才能解决呢?

急待高手!!



[解决办法]
很明显是在线程里面操作Vcl控件造成得。VCL在多线程得时候操作要这样

C/C++ code
//      Synchronize(&UpdateCaption);////   where UpdateCaption could look like://      void __fastcall AddFileToEncryptFileth::UpdateCaption()//      {//        Form1->Caption = "Updated in a thread";//      } 

热点排行