Problemas ao importar TXT
Galera estou com um problemão.
Estou importando um txt com +/- 15.000 registros e acontece o seguinte:
- A importação fica lenta;
- Não consigo cancelar a importação, nem fechar o formulário;
- Quando uso outro aplicativo e volto para o meu programa a tela dele fica toda branca;
- O programa para de responder.
Estou usando a codificação abaixo para realizar a importação:
procedure TFImportaABCFarma.ImportaTXT;
var F1: textfile;
S1: String;
begin
AssignFile(F1,EPathArquivo.Text);
filemode := 0;
reset(f1);
while not eof(F1) do
begin
readln(f1,s1);
DM2.CDSImportaABCFarma.FieldByName(´CODIGO_MEDICAMENTO´).AsString := copy(S1,01,09);
DM2.CDSImportaABCFarma.FieldByName(´CODIGO_CONTROLE´).AsString := copy(S1,10,10);
DM2.CDSImportaABCFarma.FieldByName(´CODIGO_LABORATORIO´).AsString := copy(S1,11,16);
DM2.CDSImportaABCFarma.FieldByName(´NOME_LABORATORIO´).AsString := copy(S1,17,46);
DM2.CDSImportaABCFarma.FieldByName(´DESCRICAO_MEDICAMENTO´).AsString := copy(S1,47,91);
DM2.CDSImportaABCFarma.FieldByName(´APRESENTACAO_MEDICAMENTO´).AsString := copy(S1,92,136);
DM2.CDSImportaABCFarma.FieldByName(´PRECO_LABORATORIO´).AsString := copy(S1,137,147);
DM2.CDSImportaABCFarma.FieldByName(´PRECO_MAXIMO_VENDA´).AsString := copy(S1,148,158);
DM2.CDSImportaABCFarma.FieldByName(´PRECO_FRACAO´).AsString := copy(S1,159,169);
DM2.CDSImportaABCFarma.FieldByName(´UNIDADE_VENDA´).AsString := copy(S1,170,172);
DM2.CDSImportaABCFarma.FieldByName(´PORCENTAGEM_IPI´).AsString := copy(S1,173,177);
DM2.CDSImportaABCFarma.FieldByName(´DATA_VIGENCIA´).AsString := copy(S1,178,185);
DM2.CDSImportaABCFarma.FieldByName(´PRODUTO_NOVO_VELHO´).AsString := copy(S1,186,186);
DM2.CDSImportaABCFarma.FieldByName(´CODIGO_BARRAS´).AsString := copy(S1,187,199);
DM2.CDSImportaABCFarma.FieldByName(´MEDICAMENTO_GENERICO´).AsString := copy(S1,200,202);
DM2.CDSImportaABCFarma.FieldByName(´MEDICAMENTO_NEGATIVO_POSITIVO´).AsString := copy(S1,203,205);
DM2.CDSImportaABCFarma.FieldByName(´MEDICAMENTO_NEUTRO´).AsString := copy(S1,206,208);
DM2.CDSImportaABCFarma.FieldByName(´PRINCIPIO_ATIVO´).AsString := copy(S1,209,338);
end;
closefile(f1);
end;
Estou importando um txt com +/- 15.000 registros e acontece o seguinte:
- A importação fica lenta;
- Não consigo cancelar a importação, nem fechar o formulário;
- Quando uso outro aplicativo e volto para o meu programa a tela dele fica toda branca;
- O programa para de responder.
Estou usando a codificação abaixo para realizar a importação:
procedure TFImportaABCFarma.ImportaTXT;
var F1: textfile;
S1: String;
begin
AssignFile(F1,EPathArquivo.Text);
filemode := 0;
reset(f1);
while not eof(F1) do
begin
readln(f1,s1);
DM2.CDSImportaABCFarma.FieldByName(´CODIGO_MEDICAMENTO´).AsString := copy(S1,01,09);
DM2.CDSImportaABCFarma.FieldByName(´CODIGO_CONTROLE´).AsString := copy(S1,10,10);
DM2.CDSImportaABCFarma.FieldByName(´CODIGO_LABORATORIO´).AsString := copy(S1,11,16);
DM2.CDSImportaABCFarma.FieldByName(´NOME_LABORATORIO´).AsString := copy(S1,17,46);
DM2.CDSImportaABCFarma.FieldByName(´DESCRICAO_MEDICAMENTO´).AsString := copy(S1,47,91);
DM2.CDSImportaABCFarma.FieldByName(´APRESENTACAO_MEDICAMENTO´).AsString := copy(S1,92,136);
DM2.CDSImportaABCFarma.FieldByName(´PRECO_LABORATORIO´).AsString := copy(S1,137,147);
DM2.CDSImportaABCFarma.FieldByName(´PRECO_MAXIMO_VENDA´).AsString := copy(S1,148,158);
DM2.CDSImportaABCFarma.FieldByName(´PRECO_FRACAO´).AsString := copy(S1,159,169);
DM2.CDSImportaABCFarma.FieldByName(´UNIDADE_VENDA´).AsString := copy(S1,170,172);
DM2.CDSImportaABCFarma.FieldByName(´PORCENTAGEM_IPI´).AsString := copy(S1,173,177);
DM2.CDSImportaABCFarma.FieldByName(´DATA_VIGENCIA´).AsString := copy(S1,178,185);
DM2.CDSImportaABCFarma.FieldByName(´PRODUTO_NOVO_VELHO´).AsString := copy(S1,186,186);
DM2.CDSImportaABCFarma.FieldByName(´CODIGO_BARRAS´).AsString := copy(S1,187,199);
DM2.CDSImportaABCFarma.FieldByName(´MEDICAMENTO_GENERICO´).AsString := copy(S1,200,202);
DM2.CDSImportaABCFarma.FieldByName(´MEDICAMENTO_NEGATIVO_POSITIVO´).AsString := copy(S1,203,205);
DM2.CDSImportaABCFarma.FieldByName(´MEDICAMENTO_NEUTRO´).AsString := copy(S1,206,208);
DM2.CDSImportaABCFarma.FieldByName(´PRINCIPIO_ATIVO´).AsString := copy(S1,209,338);
end;
closefile(f1);
end;
Demetrius
Curtidas 0
Respostas
Rjun
04/07/2005
Sugestão:
Coloque um botão para cancelar a operação, que receba como modalresult um idCancel.
Coloque um botão para cancelar a operação, que receba como modalresult um idCancel.
procedure TFImportaABCFarma.ImportaTXT; var Arquivo: TStringList; begin Arquivo := TStringList.Create; try Arquivo.LoadFromFile(EPathArquivo.Text); for i := 0 to (Arquivo.Count - 1) do begin // Coloquei só uma linha para exemplo...depois coloque o resto DM2.CDSImportaABCFarma.FieldByName(´CODIGO_MEDICAMENTO´).AsString := copy(Arquivo.Strings[I], 01, 09); Application.ProcessMessages; // Verifica se o botão cancel foi pressionado if ModalResult = idCancel then Exit; end; finally FreeAndNil(Arquivo); end; end;
GOSTEI 0
Demetrius
04/07/2005
Obrigado Rogério,
poderia explicar melhor essa parte, é que eu sou meio ogro
[color=red:547d04afc2]Coloque um botão para cancelar a operação, que receba como modalresult um idCancel.[/color:547d04afc2]
[b:547d04afc2]Editado[/b:547d04afc2]
Resposta editada pois, estava com a fonte muito pequena.
Sandra/Moderação
poderia explicar melhor essa parte, é que eu sou meio ogro
[color=red:547d04afc2]Coloque um botão para cancelar a operação, que receba como modalresult um idCancel.[/color:547d04afc2]
[b:547d04afc2]Editado[/b:547d04afc2]
Resposta editada pois, estava com a fonte muito pequena.
Sandra/Moderação
GOSTEI 0
Rjun
04/07/2005
Eu não sei como você fez, mas eu criaria um form com uma barra de progresso e nesse form teria minha função de importar o arquivo. Nesse form eu teria um botão para cancelar a operação (um bitbtn). Nele, voce altera a propriedade ModalResult para mrCancel.
GOSTEI 0