with adoq_ServerMain do
          begin
           close;
           sql.Clear;
           sql.Add('Select EXID,STNA,STID,CLAS,STAT,RETI,LEVE,COMP,COIP,PANO');
           sql.Add('From StudInfo');
           sql.Add('Order By EXID');
           open;
             end;
            DBGrid1.Columns[0].FieldName:='EXID';
            DBGrid1.Columns[1].FieldName:='STNA';
            DBGrid1.Columns[2].FieldName:='STID';
            DBGrid1.Columns[3].FieldName:='CLAS';
            DBGrid1.Columns[4].FieldName:='STAT';
            DBGrid1.Columns[5].FieldName:='RETI';
            DBGrid1.Columns[6].FieldName:='LEVE';
            DBGrid1.Columns[7].FieldName:='COMP';
            DBGrid1.Columns[8].FieldName:='COIP'上面是在主界面显示学生信息的语句,我想在StatuBar上显示一些统计的信息,但是加入这些语句后界面就不断的闪动,好像是在不断的刷新,是什么原因呀?加入的语句如下:stbServerMain.Panels.Items[0].Text:='所有考生人数:'+IntToStr(adoq_ServerMain.RecordCount)+' 人';
        adoq_ServerMain.First;
        iTestEnd:=0;
        while not adoq_ServerMain.Eof  do
        begin
                if Trim(adoq_ServerMain.FieldByName('COMP').AsString)='null' then
                   iTestEnd:=iTestEnd+1;
                   adoq_ServerMain.Next;
        end;
        iTestingCount:=adoq_ServerMain.RecordCount-iTestEnd;
        stbServerMain.Panels.Items[1].Text:='参考人数: '+IntToStr(iTestingCount)+' 人';
        stbServerMain.Panels.Items[2].Text:='未参考人数: '+IntTostr(iTestEnd)+' 人'

解决方案 »

  1.   

    后面加的这些语句你在 adoq_ServerMain 的AfterOpen事件中写就可以了.
      

  2.   

    procedure TfrmServerMain.display_StudentInfo;begin
        with adoq_ServerMain do
              begin
               close;
               sql.Clear;
               sql.Add('Select EXID,STNA,STID,CLAS,STAT,RETI,LEVE,COMP,COIP,PANO');
               sql.Add('From StudInfo');
               sql.Add('Order By EXID');
               open;
               end;
                DBGrid1.Columns[0].FieldName:='EXID';
                DBGrid1.Columns[1].FieldName:='STNA';
                DBGrid1.Columns[2].FieldName:='STID';
                DBGrid1.Columns[3].FieldName:='CLAS';
                DBGrid1.Columns[4].FieldName:='STAT';
                DBGrid1.Columns[5].FieldName:='RETI';
                DBGrid1.Columns[6].FieldName:='LEVE';
                DBGrid1.Columns[7].FieldName:='COMP';
                DBGrid1.Columns[8].FieldName:='COIP';
      stbServerMain.Panels.Items[0].Text:='所有考生人数:'+IntToStr(adoq_ServerMain.RecordCount)+' 人';
            adoq_ServerMain.First;
            iTestEnd:=0;
            while not adoq_ServerMain.Eof  do
            begin
                    if Trim(adoq_ServerMain.FieldByName('COMP').AsString)='null' then
                       iTestEnd:=iTestEnd+1;
                       adoq_ServerMain.Next;
            end;
            iTestingCount:=adoq_ServerMain.RecordCount-iTestEnd;
            stbServerMain.Panels.Items[1].Text:='参考人数: '+IntToStr(iTestingCount)+' 人';
            stbServerMain.Panels.Items[2].Text:='未参考人数: '+IntTostr(iTestEnd)+' 人'end;
    我这样写,还是有问题呀?
      

  3.   

    改为如下:
    adoq_ServerMain.DisableControls;//新加
    stbServerMain.Panels.Items[0].Text:='所有考生人数:'+IntToStr(adoq_ServerMain.RecordCount)+' 人';
            adoq_ServerMain.First;
            iTestEnd:=0;
            while not adoq_ServerMain.Eof  do
            begin
                    if Trim(adoq_ServerMain.FieldByName('COMP').AsString)='null' then
                       iTestEnd:=iTestEnd+1;
                       adoq_ServerMain.Next;
            end;
            iTestingCount:=adoq_ServerMain.RecordCount-iTestEnd;
            stbServerMain.Panels.Items[1].Text:='参考人数: '+IntToStr(iTestingCount)+' 人';
            stbServerMain.Panels.Items[2].Text:='未参考人数: '+IntTostr(iTestEnd)+' 人'
    adoq_ServerMain.EnableControls;//新加