用delphi和oracle开发一个小系统,因为一个表中的数据较多(几万条),想在查询的时候自动生成一个窗口提示正在准备数据,但是用下面的代码生成一个窗口后,label中的文字却要等到adoquery执行完select后才显示出来,在执行select过程中生成的窗口里面什么也没有,都是空的。请问怎么办?谢谢?
procedure TForm1.Button1Click(Sender: TObject);
var
formtemp:TForm;
Msg:TLabel;
begin
formtemp:=Tform.Create(nil);
formtemp.Width:=340;
formtemp.Height:=70;
formtemp.Position:=poMainFormCenter; Msg:=TLabel.Create(formtemp);
Msg.Parent:=formtemp;
Msg.Caption:='正在准备数据...';
formtemp.Show; with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from sys.T_JOB_UNIT');
Prepared;
Open;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
formtemp:TForm;
Msg:TLabel;
begin
formtemp:=Tform.Create(nil);
formtemp.Width:=340;
formtemp.Height:=70;
formtemp.Position:=poMainFormCenter; Msg:=TLabel.Create(formtemp);
Msg.Parent:=formtemp;
Msg.Caption:='正在准备数据...';
formtemp.Show; with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from sys.T_JOB_UNIT');
Prepared;
Open;
end;
end;
Application.ProcessMessage最好也不要用,因为它会在操作过程中不恰当地给用户操作的机会;procedure TForm1.Button1Click(Sender: TObject);
var
formtemp:TForm;
Msg:TLabel;
ProgressBar: TProgressBar;
begin
formtemp:=Tform.Create(nil);
formtemp.Width:=340;
formtemp.Height:=70;
formtemp.Position:=poMainFormCenter;
formtemp.FormStyle := fsStayOnTop; ProgressBar := TProgressBar.Create(FormTemp);
ProgressBar.Parent := FormTemp;
.... Msg:=TLabel.Create(formtemp);
Msg.Parent:=formtemp;
Msg.Caption:='正在准备数据...'; formtemp.Show; with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from sys.T_JOB_UNIT');
Prepared;
Open; ProgressBar.Min := 1;
ProgressBar.Max := RecordCount; while not Eof do
begin
....
ProgressBar.StepIt;
ProgressBar.Refresh;
Next;
end;
end; formtemp.Free;
end;