下面是一段我用线程添加数据到数据库的程序。在添加数据的时候需要设置进度条。但是在第一次执行这个线程的时候没有问题,如果,不重新新启动程序,第二次执行时,只能执行几次循环。(正常情况是2000多次循环)unit AddDataThread;interfaceuses
  Classes;type
  TAddDataThread = class(TThread)
  private
    _cnt:integer;
    _LastDate:TDateTime;
    _errorcount:integer;
    _okcount:integer;
  protected
    procedure UpdateProressBar;
    procedure UpdateMainForm;
    procedure Execute; override;
    //procedure Create;override;
  public
    property ProcedureRecordCount:integer read _cnt write _cnt;
    property LastDate:TDateTime read _LastDate write _LastDate;
  end;implementation
uses SysUtils,UMain, Dialogs;//procedure TAddDataThread.Create;override;
//begin
//end;
procedure TAddDataThread.UpdateProressBar;
begin
    if (GSLinkForm.ProgressBar.Position = GSLinkForm.ProgressBar.Max - 1) then
    begin
        GSLinkForm.Label1.Caption := '本次采集数据:' + IntToStr(_okcount) + '/' + IntToStr(GSLinkForm.ProgressBar.Max) + ' 条。';
        GSLinkForm.Label1.Update;
        GSLinkForm.Panel1.Visible := false;
        GSLinkForm.RZQuery.AppendRecord([now,_okcount]);
    end else
    begin
      GSLinkForm.ProgressBar.StepIt;
      GSLinkForm.Label1.Caption := '正在采集数据......(' + IntToStr(_okcount) + '/' + IntToStr(GSLinkForm.ProgressBar.Max) + ')';
    end;
end;
procedure TAddDataThread.Execute;
var
    i:integer;
begin
  self._errorcount := 0;
  self._okcount := 0;
  for i := 0 to _cnt - 1 do
  begin
    try
      if (self.Terminated) then break;
      Synchronize(UpdateMainForm);
      Synchronize(UpdateProressBar);
    except
         //if not(ExceptObject is EAbort) then
//          Synchronize(HandleThreadException);
   end;
  end;
  
end;procedure TAddDataThread.UpdateMainForm;
var
  i:integer;
begin
  try
    try
      GSLinkForm.DataQuery.Append;
      for i := 0 to GSLinkForm.XMLDataTable.Fields.Count - 1 do
      begin
        GSLinkForm.DataQuery.FieldList.Fields[i].Value := GSLinkForm.XMLDataTable.FieldList.Fields[i].Value;
      end;
      GSLinkForm.DataQuery.Post;      _okcount := _okcount + 1;
    except on e:Exception do
      begin
          self._errorcount := _errorcount + 1;
          GSLinkForm.DataQuery.Delete;
      end;
    end;
  finally
      GSLinkForm.XMLDataTable.Next;
  end;
end;end.