procedure TTraversalThread.Execute;//这是线程执行函数
begin
  { Place thread code here }
     Synchronize(Traversal);
end;
procedure TTraversalThread.Traversal;
begin
    BankUpForm.SaveTraversal(nil);//调用界面的方法
end;
procedure TBankUpForm.SaveTraversal(Sender: TObject);//这是界面中写入据库的方法
var
   Sign,I,L :Integer;
   StrTemp:string;
begin
   ShowMessage('1');
   Str := TStringList.Create;
   StrTemp := Trim(EditSchemeName.Text);
   sldb.BeginTransaction;  
   Sign := 1;
   for I := 1 to ListViewBackUp.Items.Count  do    
   begin
      ShowMessage(IntToStr(I));
      Str := GetFileList(Trim(ListViewBackUp.Items.Item[0].Caption),'.*');
      for L := 0 to Str.Count-1 do
      begin
          sSQL := 'INSERT INTO BackUpTable(BackUpName,Sign,Folder)VALUES("'+StrTemp+'",'
             +IntToStr(Sign)+',"'+Trim(Str[I])+'");';
          sldb.ExecSQL(utf8encode(sSQL));
      end;
      Str.Clear;
   ShowMessage('2');
   end;
   Sign := 0;
   for I := 1 to ListViewRemove.Items.Count do //保存不备份list的选项
   begin
     Str := GetFileList(Trim(ListViewRemove.Items.Item[0].Caption),'.*');
     for L := 0 to Str.Count-1 do
      begin
          sSQL := 'INSERT INTO BackUpTable(BackUpName,Sign,Folder)VALUES("'+StrTemp+'",'
             +IntToStr(Sign)+',"'+Trim(Str[I])+'");';
          sldb.ExecSQL(utf8encode(sSQL));
      end;
      Str.Clear;
        ShowMessage('3');
   end;
   sldb.Commit; //关闭事务
   ListViewScheme.Items.Add.Caption := StrTemp;
   ShowMessage('4');
end;
为什么只输出1 和 4 而2和3不输出呢?求解!新手!请高人指点下!谢谢了! 

解决方案 »

  1.   

    补充!TBankUpForm是主界面调用的一个子界面,主界面中有一个按钮可以打开这个界面!是不是和这个有关系呢?
      

  2.   

    原来可以进去的!可是GetFileList(Trim(ListViewBackUp.Items.Item[0].Caption),'.*');这个函数是为了遍历指定目录下所有的文件!效率太低!我想用多线程!可是用了多线程后就进不去了!这是为什么啊?是不是线程和VCL之间有什么问题呢?
      

  3.   

    不要用ShowMessage弹出对话框了
    如果你的循环比较大的话你就惨了
    改成写文件吧,例如procedure WriteError(Err: string);
    const
      ErrorLog = '\Error.log';
    var
      strPath: string;
      FileT: TextFile;
    begin
      strPath := ExtractFileDir(Application.ExeName) + ErrorLog;
      AssignFile(FileT, strPath);
      try
        if FileExists(strPath) then
        begin
          Append(FileT);
          Writeln(FileT, DateTimeToStr(Now) + #9 + Err);
          Flush(FileT);
        end
        else
        begin
          Rewrite(FileT);
          Writeln(FileT, DateTimeToStr(Now) + #9 + Err);
          Flush(FileT);
        end;
      finally
        CloseFile(FileT);
      end
    end;没有弹出2和3 可能是因为你的循环没有进去。