Fórum Problemas ao importar TXT #286830

04/07/2005

0

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;


Demetrius

Demetrius

Responder

Posts

04/07/2005

Rjun

Sugestão:

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;



Responder

Gostei + 0

04/07/2005

Demetrius

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


Responder

Gostei + 0

04/07/2005

Rjun

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.


Responder

Gostei + 0

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

Aceitar