我在Form上放了一个StringGrid1控件,并且在FormCreate的时候,在StringGrid1里面显示了文本。现在在Form上有个按钮,我点击这个按钮的时候,执行了SQL语句。我想做到点击这个按钮的时候,首先清空StringGrid1,然后出现提示性文字,然后再执行SQL语句。procedure TFormMain.ToolButton9Click(Sender: TObject);
var
  i:integer;
  j:integer;
begin
//清空StringGrid1
  for i := 0 to StringGrid1.RowCount - 1 do
    for j := 0 to StringGrid1.ColCount - 1 do
    begin
      StringGrid1.Cells[j,i] := '';
    end;
//StringGrid1
  StringGrid1.Cells[0,1]:='程序运行状态:';
  StringGrid1.Cells[1,1]:='正在删除表table1';//清空table1表原有数据
  with ADOQuery1 do
  begin
    close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('delete from table1);
    ADOQuery1.ExecSQL;
    StringGrid1.Cells[1,1]:='表table1删除成功';
  end;
end;我现在比较奇怪的是为什么按下按钮的时候,StringGrid1没有立即显示
//StringGrid1
  StringGrid1.Cells[0,1]:='程序运行状态:';
  StringGrid1.Cells[1,1]:='正在删除表table1';
而是等到SQL执行完毕的时候才会出现
StringGrid1.Cells[1,1]:='表table1删除成功';
请教各位大虾。不胜感谢。

解决方案 »

  1.   

    加一个
      Application.ProcessMessages;试一试  StringGrid1.Cells[0,1]:='程序运行状态:';
      StringGrid1.Cells[1,1]:='正在删除表table1';
      

  2.   

    procedure TFormMain.ToolButton9Click(Sender: TObject);
    var
      i:integer;
      j:integer;
    begin
    //清空StringGrid1
      for i := 0 to StringGrid1.RowCount - 1 do
        for j := 0 to StringGrid1.ColCount - 1 do
        begin
          StringGrid1.Cells[j,i] := '';
        end;
    //StringGrid1
      StringGrid1.Cells[0,1]:='程序运行状态:';
      StringGrid1.Cells[1,1]:='正在删除表table1';  Sleep(2000); //加一句试试!//清空table1表原有数据
      with ADOQuery1 do
      begin
        close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('delete from table1);
        ADOQuery1.ExecSQL;
        StringGrid1.Cells[1,1]:='表table1删除成功';
      end;
    end;
      

  3.   

    其实是有显示的,但由于中间停顿的时间可能是几毫秒,你的眼睛根本反应不到。在
    //清空table1表原有数据
    前作一个停顿就行了。
      

  4.   

    同意NanHaiBoFriend(杨)的说法,数据量少,而删除是瞬间完成的,所以看不到。
      

  5.   

    NanHaiBoFriend(杨)的说法 不对,
    zzllabc(抱朴子--清心释累,绝率忘情)的方法是正确的。