system error code 1400 - Executando Thread [URGENTE]
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:
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
Curtidas 0
Respostas
Marcos Saffran
12/12/2014
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.
como você está abrindo o formulário?
Verifique se a thread é encerrada e retirada da memória quando sair do formulário.
GOSTEI 0
Alex Rosalin
12/12/2014
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;
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;
GOSTEI 0
Marcos Saffran
12/12/2014
Estou pesquisando aqui, tente comentar a seguinte linha de comando:
frmimportatempo2.pgbstatus.Visible:=False;
frmimportatempo2.pgbstatus.Visible:=False;
GOSTEI 0