我现在又一个程序:
program Project1;uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas';{$R *.res}begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB;type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation
uses unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var mythread:Tmythread;
var Str:String;
begin
        Edit1.Text:=TimetoStr(Time);
        Button1.Enabled:=false;
        try
            mythread:=Tmythread.create(False);
        except
            ShowMessage('线程创建失败!');
        end;
end;end.unit Unit2;interfaceuses
  Classes,Unit1,
  Windows, SysUtils, Variants, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB,ActiveX;type
  Tmythread = class(TThread)
  private
    ADOConnection1:TADOConnection;
    Adoquery1:TadoQuery;
    destructor Destroy;  protected
    procedure Execute; override;
    procedure run;
  end;implementation{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,      Synchronize(UpdateCaption);  and UpdateCaption could look like,    procedure mythread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }{ mythread }
procedure Tmythread.Execute;
begin
    self.run;
end;
procedure Tmythread.run;
var str:String;
begin
 CoInitialize( nil );//使用com对象必须要初始化
 inherited create(false);
 FreeOnTerminate:=true;
 ADOConnection1:=TADOConnection.Create(nil);
 Adoquery1:=TADOQuery.Create(nil);
 ADOConnection1.LoginPrompt:=false;
 ADOConnection1.KeepConnection:=true;
 ADOConnection1.CommandTimeout:=10000;
 ADOquery1.CommandTimeout:=10000;
 ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test;Data Source=LENOVO-64ACFF60';
 try
  ADOConnection1.Open;
  Adoquery1.Connection:=ADOConnection1;
      Form1.Label1.Caption:='创建新线程在运行!';
       ADOConnection1.Connected:=true;
     Adoquery1.Close;
     Adoquery1.SQL.Clear;
     str:='insert into aaa'
           +'(收费编码,项目名称,项目单价,收费数量,收费金额,计费单位,计费规格,收费日期,收费对象,住院号,收费科室)'
           +' SELECT 收费编码,项目名称,项目单价,收费数量,收费金额,计费单位,计费规格,收费日期,收费对象,住院号,收费科室 FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',''Data Source="F:\access_test.mdb";User ID=Admin;Password='')...住院服务明细';
     Adoquery1.Parameters.Clear;
     Adoquery1.ParamCheck := false;
     Adoquery1.SQL.Text := str;
     Adoquery1.Execsql;     Form1.Edit2.Text:=TimetoStr(Time);
     Form1.Label1.Caption:='';
     Form1.Button1.Enabled:=true;  Application.MessageBox('执行成功!','提示');
 except
   Self.Terminate;
 end;
end;
destructor Tmythread.Destroy;
begin
  if ADOConnection1.Connected then ADOConnection1.Close;
  if Adoquery1.Active then Adoquery1.Close;
  FreeAndNil(Adoquery1);
  FreeAndNil(ADOConnection1);
  CoUnInitialize;//必须使用
  inherited destroy;
end;
end.//上面实现的功能是从ACCESS中导入数据到SQL SERVER中,我现在又在窗口上加上一个进度条或者能够提示执行过程的现实,比如现在已经导入了多少条记录,还有多少条记录没有导入
我应当怎么实现