Fórum system error code 1400 - Executando Thread [URGENTE] #504176

12/12/2014

0

Bom Dia Pessoal,
Realizei um script de um Thread que realiza a importação de alguns dados para o meu BD, e enquanto importa alimenta a barra de progresso para o usuário acompanhar.

A Thread funcionar corretamente porém ao sair do Formulário o sistema me apresenta o seguinte erro: "system error. code 1400. o identificador da janela é inválido"

Não consigo identificar o que está ocasionando o erro, alguém teria uma ideia como faço para não apresentar mais este erro?

O código da Thread é o abaixo:
procedure TImportaThread.Execute; 
var 
  t1 : TImportaThread; 
  strConn :  widestring; 
begin 
  FreeOnTerminate := True; 
  strConn:='Provider=Microsoft.Jet.OLEDB.4.0;' + 
           'Data Source=' + frmimportatempo2.edtlocal.Text + ';' + 
           'Extended Properties=Excel 8.0;'; 


  frmimportatempo2.cnxexcel.Connected:=False; 
  frmimportatempo2.cnxexcel.ConnectionString:=strConn; 
  frmimportatempo2.cnxexcel.Open; 

  //frmimportatempo1.dtsexcel.Open; 

  frmimportatempo2.dtsexcel.Close; 
  frmimportatempo2.dtsexcel.CommandText:='select * from [Plan1$]'; 
  frmimportatempo2.dtsexcel.Open; 
  frmimportatempo2.dtsexcel.First; 

  frmimportatempo2.pgbstatus.Max:=frmimportatempo2.dtsexcel.RecordCount; 
  frmimportatempo2.pgbstatus.Position:=1; 
  frmimportatempo2.pgbstatus.Visible:=True; 

  While not frmimportatempo2.dtsexcel.Eof do 
    begin 
      //verifica a existência da referência, caso não exista não importa o tempo. 
      frmimportatempo2.qrreferencia.Close; 
      frmimportatempo2.qrreferencia.SQL.Clear; 
      frmimportatempo2.qrreferencia.SQL.Add('select * from cad_referencia where referencia = :pref'); 
      frmimportatempo2.qrreferencia.Parameters.ParamByName('pref').Value:=frmimportatempo2.dtsexcelModelo.Value; 
      frmimportatempo2.qrreferencia.Open; 

      if frmimportatempo2.qrreferencia.RecordCount = 0 then 
        begin 
          ShowMessage('A Referência '+frmimportatempo2.dtsexcelModelo.AsString+' não será importada por falta de Cadastro!'); 
        end 
      else 
        begin 
          //encontra os setores de apoio do setor principal 
          frmimportatempo2.qrsetorapoio.Close; 
          frmimportatempo2.qrsetorapoio.Parameters.ParamByName('pidsetor').Value:=frmimportatempo2.qrsetorid.Value; 
          frmimportatempo2.qrsetorapoio.Parameters.ParamByName('pidsecao').Value:=frmimportatempo2.dtsexcelSeção.Value; 
          frmimportatempo2.qrsetorapoio.Open; 

          if frmimportatempo2.qrsetorapoio.RecordCount = 0 then 
            begin 
              ShowMessage('O Tempo da Referência '+frmimportatempo2.dtsexcelModelo.AsString+' no setor '+ frmimportatempo2.qrsetordescricao.AsString+#13+' não será importado, pois não há setor de apoio com a seção '+FloatToStr(frmimportatempo2.dtsexcelSeção.AsFloat)+' relacionado com o setor principal!'); 
            end 
          else 
            begin 
              frmimportatempo2.qrsetorapoio.First; 

              while not frmimportatempo2.qrsetorapoio.Eof do 
                begin 
                  frmimportatempo2.qrtempo.Open; 
                  frmimportatempo2.qrtempo.Append; 
                  frmimportatempo2.qrtempodta_cadastro.AsDateTime:=Date; 
                  frmimportatempo2.qrtempodta_apartirde.AsDateTime:=frmimportatempo2.edtdatavalido.Date; 
                  frmimportatempo2.qrtempoid_referencia.AsInteger:=frmimportatempo2.qrreferenciaid.AsInteger; 
                  frmimportatempo2.qrtemporeferencia.AsString:=frmimportatempo2.qrreferenciareferencia.AsString; 
                  frmimportatempo2.qrtempoid_secao.AsInteger:=frmimportatempo2.dtsexcelSeção.AsInteger; 
                  frmimportatempo2.qrtempoid_banca.AsInteger:=frmimportatempo2.qrsetorapoioid_banca.AsInteger; 
                  frmimportatempo2.qrtempoid_esteira.AsInteger:=frmimportatempo2.qrsetorapoioid_esteira.AsInteger; 
                  frmimportatempo2.qrtemposecao_ext.AsString:=frmimportatempo2.qrsetorapoiosecao_ext.AsString; 
                  frmimportatempo2.qrtempoid_setor_apoio.AsInteger:=frmimportatempo2.qrsetorapoioid.AsInteger; 
                  frmimportatempo2.qrtempoid_setor.AsInteger:=frmimportatempo2.qrsetorid.AsInteger; 
                  frmimportatempo2.qrtempotempo.AsFloat:=frmimportatempo2.dtsexcelTempo.AsFloat; 
                  frmimportatempo2.qrtempoobs.AsString:=frmimportatempo2.dtsexcelObservação.AsString; 
                  frmimportatempo2.qrtempostatus.AsString:='A'; 
                  if frmimportatempo2.rdbsim.Checked = true then 
                    begin 
                      frmimportatempo2.qrtempoliberado.AsString:='S'; 
                    end 
                  else 
                    begin 
                      frmimportatempo2.qrtempoliberado.AsString:='N'; 
                    end; 
                  frmimportatempo2.qrtempo.Post; 

                  frmimportatempo2.qrsetorapoio.Next; 
                end;//fim do while dos setores de apoio 
            end; 
        end; 
      frmimportatempo2.dtsexcel.Next; 
      frmimportatempo2.pgbstatus.Position:=frmimportatempo2.pgbstatus.Position + 1; 
    end;//fim while dos tempos do excel 

    ShowMessage('Importação Concluída!'); 
    frmimportatempo2.pgbstatus.Position:=0; 
    frmimportatempo2.pgbstatus.Visible:=False; 
    frmimportatempo2.cnxexcel.Close; 
end;
Alex Rosalin

Alex Rosalin

Responder

Posts

12/12/2014

Marcos Saffran

Boa tarde Alex,

como você está abrindo o formulário?

Verifique se a thread é encerrada e retirada da memória quando sair do formulário.
Responder

Gostei + 0

12/12/2014

Alex Rosalin

Boa Tarde Marcos,

Eu crio o formulario normalmente a partir de um showmodal...

Já no formclose eu uso
Action:=caFree
frmimportatempo2:=nil,

Teria que incluir algum outro comando aqui, para finalizar a Thread?


Quando eu chamo a Thread eu já menciono FreeOnTerminate := True;
Responder

Gostei + 0

12/12/2014

Marcos Saffran

Estou pesquisando aqui, tente comentar a seguinte linha de comando:

frmimportatempo2.pgbstatus.Visible:=False;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar