Importar TXT com ponto e virgula

Delphi

18/10/2004

Gostaria de saber se entre os colegas, alguem ja importou um txt separado por ponto e virgulas, ou seja:
0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;
0002 ;Maria José Pereira ;05/11/1954 ;789456123-00 ;
.
.
.
Com os campos concatenados seria mais fácil, mas com o ponto e virgula está meio complicado, gostaria que alguem me ajudasse, pois preciso disso urgente.

Atenciosamente,

Andre Luis - Leitbom


Andre Silveira

Andre Silveira

Curtidas 0

Respostas

Osocram

Osocram

18/10/2004

vc pod usar a func ´pos´ ele retorna a posicao d uma substring em uma string. se trazer 0 ou -1 non lembro bem.. enton no achou...

no ex:
aux := 0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;

vc faria um proc ou function q pega a primeira SubString
por ex
if pos(aux,´;´)>0 then
resultado := copy(aux,1,pos(aux,´;´) //aqui vc copia sua string (non lembro a sintaxe.... pois estou sem o delphi agora p testar)
resto := copy(aux,pos(aux,´;´)+1,Lenght(aux) //aqui vc o q restou da string... dae eh so mandar dnovo na func ateh acabar ela.... pod fazer um func recursiva e talz...

acho q isso...


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

18/10/2004

[quote:01a41e4f9c=´Andre Silveira´]Gostaria de saber se entre os colegas, alguem ja importou um txt separado por ponto e virgulas, ou seja:
0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;
0002 ;Maria José Pereira ;05/11/1954 ;789456123-00 ;
.
.
.
Com os campos concatenados seria mais fácil, mas com o ponto e virgula está meio complicado, gostaria que alguem me ajudasse, pois preciso disso urgente.

Atenciosamente,

Andre Luis - Leitbom[/quote:01a41e4f9c]
Colega,

A partir da versão Delphi 6 é mais fácil ainda, mesmo assim, veja o detalhamento nesta thread. http://delphiforum.icft.com.br/forum/viewtopic.php?t=43243&highlight=explode


GOSTEI 0
Rjun

Rjun

18/10/2004

Utilize ADO. Adicione um TADOCONNECTION e um TADOTABLE no seu form. Configure o ConnectionString do TADOCONNECTION com o provedor OLE DB para Jet 4.0. Na aba TODAS coloque Text para a propriedade EXtended Properties. Na aba CONEXAO coloque o diretorio em que se encontra o arquivo texto. Agora no TADOTABLE, selecione na propriedade TABLE o nome do arquivo. Pronto, agora é so inserir os campos do seu arquivo texto. Pra voce ter uma boa visao, coloque um DBGRID e um TDATASOURCE ligando ao TADOTABLE.


GOSTEI 0
Ilanocf

Ilanocf

18/10/2004

Fiz isso utilizando tabelas MySQL:

[color=red:b19750ac30][b:b19750ac30]EXPORTAR DADOS[/b:b19750ac30][/color:b19750ac30] Coloque 4 componentes: 1) OpenDialog1: Altere as propriedades: DefaultExt: TXT e Filter: Arquivo Texto|*.TXT; 2) SaveDialog1: Altere as propriedades: DefaultExt: TXT e Filter: Arquivo Texto|*.TXT; 3) Tabelas; 4) Botão e renomeie-o para ButExporta, e em seu evento OnClique o código abaixo, alterando apenas os nomes das tabelas e seus respectivos campos. procedure TForm1.ButExportaClick(Sender: TObject); var Arq: TextFile; begin if SaveDialog1.Execute then begin Screen.Cursor := crHourGlass; with Table1 do begin Open; First; if not EOF then begin AssignFile(Arq, SaveDialog1.FileName); ReWrite(Arq); repeat WriteLn(Arq,FieldByName(´EmpNo´).AsString + ´|´ + FieldByName(´LastName´).AsString + ´|´ + FieldByName(´FirstName´).AsString + ´|´ + FieldByName(´PhoneExt´).AsString + ´|´ + FieldByName(´HireDate´).AsString + ´|´ + FieldByName(´Salary´).AsString + ´*´); next; until EOF; CloseFile(Arq); end; close; end; Screen.Cursor := crDefault; end; end;



[color=red:b19750ac30][b:b19750ac30]IMPORTAR DADOS[/b:b19750ac30][/color:b19750ac30] Coloque 4 componentes: 1) OpenDialog1: Altere as propriedades: DefaultExt: TXT e Filter: Arquivo Texto|*.TXT; 2) SaveDialog1: Altere as propriedades: DefaultExt: TXT e Filter: Arquivo Texto|*.TXT; 3) Tabelas; 4) Botão e renomeie-o para ButImporta, e em seu evento OnClique o código abaixo, alterando apenas os nomes das tabelas e seus respectivos campos procedure TForm1.ButImportaClick(Sender: TObject); var Arq: TextFile; Texto: String; I: Integer; function MontaVariavel: String; var monta: String; begin monta := ´´; inc(I); while Texto[I] <> ´*´ do begin if Texto[I] = ´|´ then break; monta := monta + Texto[I]; inc(I); end; result := monta; end; begin if OpenDialog1.Execute then begin Screen.Cursor := crHourGlass; Table1.Open; AssignFile(Arq, OpenDialog1.FileName); Reset(Arq); if not EOF(Arq) then repeat ReadLn(Arq,Texto); with Table1 do begin Insert; i := 0; FieldByName(´EmpNo´).AsString := MontaVariavel; FieldByName(´LastName´).AsString := MontaVariavel; FieldByName(´FirstName´).AsString := MontaVariavel; FieldByName(´PhoneExt´).AsString := MontaVariavel; FieldByName(´HireDate´).AsString := MontaVariavel; FieldByName(´Salary´).AsString := MontaVariavel; Post; end; until EOF(Arq); CloseFile(Arq); Table1.Close; Screen.Cursor := crDefault; end; end;


Espero ter ajudado.


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

18/10/2004

amigo, o código para importar os dados da o seguinte erro:
[b:b640a9abb2]Acces Violation at adress 004AB571 in module ´project1.exe´ read of adress FFFFFFFF [/b:b640a9abb2]

o erro ocorre na seguinte linha:
[b:b640a9abb2]while Texto[I] <> ´*´ do[/b:b640a9abb2]

a dica é boa, não consegui identificar o erro


GOSTEI 0
Marco Salles

Marco Salles

18/10/2004

[b:b56af73711]amigo tente isso , talves le sirva[/b:b56af73711]


[code]procedure TForm1.Button1Click(Sender: TObject);
var
TXT : TextFile;
Entrada: String;
I : Integer;
j:Integer;
Tamanho:Integer;
Begin
AssignFile(TXT,´C:\TEXTO\Texto\Texto.TXT´); // Diretorio onde se encontra o arquivo .TXT

Reset(TXT);
While not Eof(TXT) do
Begin
ReadLn(TXT,Entrada); //Variável que vai receber linha a linha as informações do arquivo TXT
Table1.Insert;
  tamanho:=Length(entrada);
  j:=1;
  i:=Pos(´;´,entrada);
  Table1Numero.Value:=Copy(Entrada,j,i-j);//Codigo;
  J:=J+i;
  i:=Pos(´;´,copy(entrada,j,Tamanho));
  Table1Nome.Value:=Copy(Entrada,j,i-1);//nome;
  j:=j+i; 
  i:=Pos(´;´,copy(entrada,j,Tamanho));
  Table1DataNasc.Value:=StrToDate(Copy(Entrada,j,i-1));//Data;
  j:=j+i;
  Table1UF.Value:= Copy(Entrada,j,tamanho-1);//cpf;
  Table1.Post;
End; 
CloseFile(TXT);
end;[/code]



GOSTEI 0
Vagner.oliveira

Vagner.oliveira

18/10/2004

da erro ao compilar:
undeclared identifier: ´Value´ na linha

Table1.Value:=Copy(Entrada,j,i-1);//nome; e todas que possui o item Value


GOSTEI 0
Marco Salles

Marco Salles

18/10/2004

da erro ao compilar: undeclared identifier: ´Value´ na linha Table1.Value:=Copy(Entrada,j,i-1);//nome; e todas que possui o item Value


Aqui eu te dei uma idéia de como usar , utilizando um componente Table

Eu não sei direito o que voce quer fazer com cada campo que voce esta lendo.. Voce deve armazenalo em algum lugar???

usei o table , foi como exemplo



GOSTEI 0
Vagner.oliveira

Vagner.oliveira

18/10/2004

tenho um arquivo TXT na seguinte forma:

 
nome ; endereço ; telefone ; telcel ;
nome ; endereço ; telefone ; telcel ;
nome ; endereço ; telefone ; telcel ;


e quero importá-lo para dentro de uma tabela, o comando para exportar informado acima funciona beleza, só da erro ao tentar importar.


GOSTEI 0
Marco Salles

Marco Salles

18/10/2004

tenho um arquivo TXT na seguinte forma: Código: nome ; endereço ; telefone ; telcel ; nome ; endereço ; telefone ; telcel ; nome ; endereço ; telefone ; telcel ;



:arrow: Amigo rode o exemplo e informe o que ira ocorrer

procedure TForm1.Button1Click(Sender: TObject); 
var 
TXT : TextFile; 
Entrada: String; 
I : Integer; 
j:Integer; 
Tamanho:Integer; 
Begin 
AssignFile(TXT,´C:\TEXTO\Texto\Texto.TXT´); // Diretorio onde se encontra o arquivo .TXT 

Reset(TXT); 
While not Eof(TXT) do 
Begin 
ReadLn(TXT,Entrada); //Variável que vai receber linha a linha as informações do arquivo TXT 
//Table1.Insert; 
  tamanho:=Length(entrada); 
  j:=1; 
  i:=Pos(´;´,entrada); 
//  Table1Numero.Value:=Copy(Entrada,j,i-j);//Codigo; 
  Showmessage(´Codigo : ´+Copy(Entrada,j,i-j));//Codigo;
  J:=J+i; 
  i:=Pos(´;´,copy(entrada,j,Tamanho)); 
 // Table1Nome.Value:=Copy(Entrada,j,i-1);//nome; 
  Showmessage(´Nome : ´+Copy(Entrada,j,i-j));// nome;
  j:=j+i; 
  i:=Pos(´;´,copy(entrada,j,Tamanho)); 
 // Table1DataNasc.Value:=StrToDate(Copy(Entrada,j,i-1));//Data;
  Showmessage(´Telefone : ´+Copy(Entrada,j,i-j);//Telefone; 
  j:=j+i; 
 // Table1UF.Value:= Copy(Entrada,j,tamanho-1);//Telcel; 
  showmessage(´ Tel celular ´+Copy(Entrada,j,tamanho-1));// tel celular
//  Table1.Post; 
End; 
CloseFile(TXT); 
end;


alem disso amigo , se o codigo leu direitinho o seu arquivo txt , separado por virgula, importa-lo para um tabela de um banco é um outro passo.

Voce deve informar qual o banco que voce usa , se a Estrutura dessa tabela nesse banco ja foi criada e é a mesma ta estrutrura do arquivo Txt e qual o componente de acesso que voce pretende usar


entendeu :?: :?: :?:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

18/10/2004

:shock: Amigo, seu código ta fionando, mas tem aguns erros a serem corrigidos, como não entendo muito de Delphi, peço que descreva o que cada linha do código faz, para que possa entender o código e corrigir :)


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

18/10/2004

está dando erro na linha
   Table1.Value:=Copy(Entrada,j,i-j); 


minha tabela é em Paradox:
[b:f9b4e62f56]
Indice: Autoincremento
Nome: Alpha
Endereço: Alpha
Telefone: Alpha
TelCel: Alpha
Orçamento: Memo
Histórico: Memo
[/b:f9b4e62f56]


GOSTEI 0
Marco Salles

Marco Salles

18/10/2004

Amigo, seu código ta fionando, mas tem aguns erros a serem corrigidos, como não entendo muito de Delphi, peço que descreva o que cada linha do código faz, para que possa entender o código e corrigir


minha tabela é em Paradox: Indice: Autoincremento Nome: Alpha Endereço: Alpha Telefone: Alpha TelCel: Alpha Orçamento: Memo Histórico: Memo


Voce deve inseriri um componente Table no seu aplicativo e usar a Sintaxi abaixo

está dando erro na linha Código: Table1.Value:=Copy(Entrada,j,i-j);


Ao inves disso , voce deve substituir pela seguinte instrução:

Table1.FieldByName(´NomeDoCampoConformeEstaEscritoNaTabela´).AsSTring:=Copy(Entrada,j,i-j);


Entendeu Beleza :?: :?: :?:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

18/10/2004

:shock: :shock:

eu não consigo entender nessa linha os itens:
[b:d73c3652fd]
Entrada:String;
I:Integer;
j:Integer;
Tamanho:Integer;
[/b:d73c3652fd]

 
.
.
.
  tamanho:=Length(entrada);
  j:=1;
  i:=Pos(´;´,entrada);

//  Table1.FieldByName(´Nome´).Value:=Copy(Entrada,j,i-1);
  Showmessage(´Nome : ´+Copy(Entrada,j,i-j));
  j:=j+i;
  i:=Pos(´;´,copy(entrada,j,Tamanho));
.
.
.

o que que faz os itens [b:d73c3652fd]entrada, tamanho, j, i [/b:d73c3652fd] :shock: :shock:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

18/10/2004

Pessoal já sei como posso fazer par importar os dados, apenas preciso saber como identificar o ponto e virgula (;) para que passe para o próximo campo da tabela...... :P :P :P


GOSTEI 0
Marco Salles

Marco Salles

18/10/2004

Pessoal já sei como posso fazer par importar os dados


apenas preciso saber como identificar o ponto e virgula


para que passe para o próximo campo da tabela


é


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

18/10/2004

sobe


GOSTEI 0
Igorcb

Igorcb

18/10/2004

o Seu arquivo texto tem que estar assim

Campo1;Campo2,Campo3;
Campo1;Campo2,Campo3;
Campo1;Campo2,Campo3;
Campo1;Campo2,Campo3;


no final de cadas linha tem que ter o ;
e tb não deixa mais nenhuma linha em branco no arquivo

repito comigo deu certo


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

18/10/2004

[quote:c3bdd8806a=´Aroldo Zanela´][quote:c3bdd8806a=´Andre Silveira´]Gostaria de saber se entre os colegas, alguem ja importou um txt separado por ponto e virgulas, ou seja:
0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;
0002 ;Maria José Pereira ;05/11/1954 ;789456123-00 ;
.
.
.
Com os campos concatenados seria mais fácil, mas com o ponto e virgula está meio complicado, gostaria que alguem me ajudasse, pois preciso disso urgente.

Atenciosamente,

Andre Luis - Leitbom[/quote:c3bdd8806a]
Colega,

A partir da versão Delphi 6 é mais fácil ainda, mesmo assim, veja o detalhamento nesta thread. http://delphiforum.icft.com.br/forum/viewtopic.php?t=43243&highlight=explode[/quote:c3bdd8806a]
Colegas,

Com a última mudança de URL, o link anterior está quebrado. Este é o correto: http://forum.clubedelphi.net/viewtopic.php?t=43243&highlight=explode


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

18/10/2004

Pessoal consigo importar e exportar dados, mas está muito lento sendo que são só 130 registros. Minha tabela é em [b:f8f49da4e8]PARADOX[/b:f8f49da4e8] e uso os seguintes especificações:

[b:f8f49da4e8]
Indice - Autoincremento;
Nome, Endereco, Telefone, Telcel, Bairro - Alpha;
Orcamento, Historico, ConfPC - MEMO de 1mb
[/b:f8f49da4e8]

Estou usando o seguinte código para [b:f8f49da4e8]IMPORTAR os dados:[/b:f8f49da4e8]
procedure TF_principal.SBImportarClick(Sender: TObject);
var
t:textfile;
s:string;
begin
if SaveDialog1.Execute then
AssignFile( t , SaveDialog1.FileName);
Reset(t);
while not eof( t ) do begin
readln(t,s);
table1.insert;
table1.fieldbyname(´Nome´).AsString := copy( s , 1 , pos(´;´,s)-1 );
s:=copy(s,pos(´;´,s)+1, length(s) );
table1.fieldbyname(´Endereco´).AsString := copy( s , 1 , pos(´;´,s)-1 );
s:=copy(s,pos(´;´,s)+1, length(s) );
table1.fieldbyname(´Bairro´).AsString := copy( s , 1 , pos(´;´,s)-1 );
s:=copy(s,pos(´;´,s)+1, length(s) );
table1.fieldbyname(´Telefone´).AsString := copy( s , 1 , pos(´;´,s)-1 );
s:=copy(s,pos(´;´,s)+1, length(s) );
table1.fieldbyname(´TelCel´).AsString := copy( s , 1 , pos(´;´,s)-1 );
s:=copy(s,pos(´;´,s)+1, length(s) );
table1.fieldbyname(´Orcamento´).AsString := copy( s , 1 , pos(´;´,s)-1 );
s:=copy(s,pos(´;´,s)+1, length(s) );
table1.fieldbyname(´Historico´).AsString := copy( s , 1 , pos(´;´,s)-1 );
s:=copy(s,pos(´;´,s)+1, length(s) );
table1.fieldbyname(´ConfPC´).AsString := copy( s , 1 , pos(´;´,s)-1 );
s:=copy(s,pos(´;´,s)+1, length(s) );
table1.post;
end;
end;


E para [b:f8f49da4e8]EXPORTAR[/b:f8f49da4e8] os dados:
procedure TF_principal.SBExportarClick(Sender: TObject);
var
Arq: TextFile;
begin
if SaveDialog1.Execute then
begin
Screen.Cursor := crHourGlass;
with Table1 do
begin
Open;
First;
if not EOF then
begin
AssignFile(Arq, SaveDialog1.FileName);
ReWrite(Arq);
repeat
WriteLn(Arq,FieldByName(´Nome´).AsString + ´;´ +
FieldByName(´Endereco´).AsString + ´;´ +
FieldByName(´Bairro´).AsString + ´;´ +
FieldByName(´Telefone´).AsString + ´;´ +
FieldByName(´Telcel´).AsString + ´;´); //+
FieldByName(´Orcamento´).AsString + ´;´ +
FieldByName(´Historico´).AsString + ´;´ +
FieldByName(´ConfPC´).AsString + ´;´);
next;
until EOF;
CloseFile(Arq);
end;
close;
end;
Table1.active:=True;
QOrdenar.Active:=false;
QOrdenar.Active:=true;
Screen.Cursor := crDefault;
ShowMessage(´Arquivo criado com sucesso´);
end;
end;


Só que trava, e as vezes ele faz a exportação/importação. Fiz um arquivo de teste que possui os itens na tabela em [b:f8f49da4e8]PARADOX:

Indice - Autoincremento;
Nome, Telefone, Telcel - Alpha;
Memo - MEMO de 2mb
[/b:f8f49da4e8]

Este funciona perfeitamente, sendo que o mesmo posui apenas 4 registros.

[size=14:f8f49da4e8][b:f8f49da4e8][color=green:f8f49da4e8] Gostaria de saber o que ocasiona o erro e a lentidão para importar, exportar a tabela ?[/color:f8f49da4e8][/b:f8f49da4e8][/size:f8f49da4e8]


GOSTEI 0
Wbb

Wbb

18/10/2004

Uma forma bem simples de separar os campos é simplesmente subistituindo os ´;´ por ´Enter´ e colocando tudonum TStringList. Dái é só inserir os dados em seu BD. Claro que o formato dos registros do arquivo CSV (texto) deve ser sempre o mesmo.

Ex.:

Var Registros: TStringList;
    ListaCampos: TStringList;
    j: Integer
Const Enter_ = #13 + 10;
begin

   Registros := TStringList.Create;
   ListaCampos := TStringList.Create;

   Registros.LoadFromFile(´Path + Nome_do_Arquivo´);

   for j := 0 to Registros.Count -1 do
   begin
      // Separa os campos do registro em itens do TStrinList, registro a registro.
      ListaCampos.Text := StringReplace(Registros[j], ´;´, Enter_, [rfReplaceAll, rfIgnoreCase]);

      ////// coloque aqui a inserção dos campos no BD /////////
      table1.append;
      table1.fieldbyname(´Campo1´).AsString := ListaCampos[1];
      table1.fieldbyname(´Campo2´).AsString := ListaCampos[2];
      table1.fieldbyname(´Campo3´).AsString := ListaCampos[3];
      table1.fieldbyname(´Campo4´).AsString := ListaCampos[4];
      .
      .
      .
      table1.fieldbyname(´CampoN´).AsString := ListaCampos[N];
      table1.post;
      /////////////////////////////////////////////////////////
   end;

   Registros.Free;
   ListaCampos.Free;
end;



GOSTEI 0
Paullsoftware

Paullsoftware

18/10/2004

só pra complicar um poquinho a nossa discurção vou entrar e fazer um pergunta simples...

e se vinher uma linha assim:

cod - nome - end - end_comp - fone - celular - cep - cidade...
01;Paulo Ricardo;Rua Trinta e Cinco, nº20;;;;;Cabo...

os lugares onde viriam end_comp, fone, celular e cep vinhecem em braco??


GOSTEI 0
Franthesco

Franthesco

18/10/2004

Amigos...

Esta dica, foi de muita importância para mim... Estava precisando de algo deste tipo, e procurando e lendo os foruns achei este tópico.

Mas, tive uma dúvida quanto a importação de dados.

Faço cadastros, e exporto para txt. Até aí td bem... Mas, quando vou importar os dados, há duplicidade, pois alguns registros já foram salvos na tabela. Não sei se fui claro, mas gostaria de saber como evitar esta duplicidade de registros...

Desde já, agradeço!

Abraços!


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

18/10/2004

Colega,

É só implementar na sua rotina de importação qual deverá ser a ação do sistema sob essas condições: Substituir/atualizar, descartar, etc.


GOSTEI 0
Wbb

Wbb

18/10/2004

Olá Aroldo!
Tenho exatamente o mesmo problema relatado pelo Franthesco e está me ferrando, pois na tabela onde devo verificar a existência de registros duplicados há mais de 80 mil registros. Essa quantidade de registros apesar de não ser tão grande assim, está fazendo a pesquisa ficar bem lenta.

Já criei uma view separada para servir de auxílio, mas não adiantou. Nela eram agrupados e contatos os registros duplicados para que fosse possível apagár os excedentes, mas mesmo assim está lento o processo.

Tem alguma sugestão?
Valeu!


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

18/10/2004

Colega,

Neste caso (importação) é melhor definir uma chave primária e descartar os registros que ´caírem´ na exceção, bem como, confirmar (commit) a cada 1000 registros para otimizar a inserção.


GOSTEI 0
Paullsoftware

Paullsoftware

18/10/2004

Caros Wbb e Franthesco...
é muito simples de resolver os seus problemas basta tratar os dados antes de fazer alguma rotina Inserção/Atualização tipo:

aqui vai parte do código que uso hoje para importar os dados de um txt para minha base, cheguei a essa concepção graças a ajuda de amigos aqui do fórum como Aroldo, Cristian e outros...
//****************************************************************************** DEPENDENTES
      if RadioButton2.Checked then
         begin
            Gauge1.Progress := 0;
            Gauge1.MaxValue := TotImpor(ExtractFilePath(NomeArquivo),ExtractFileName(NomeArquivo));

             try
             Registros := TStringList.Create;
             ListaCampos := TStringList.Create;
             Registros.LoadFromFile(NomeArquivo);
             try
             for j := 0 to Registros.Count -1 do
             begin

                ListaCampos.Text := StringReplace(Registros[j], ´;´, Enter_, [rfReplaceAll, rfIgnoreCase]);

              DEPENDENTES.Close;
              DEPENDENTES.SelectSQL[1]:=´ WHERE CODSAFPE =:PESQUISA´;
              DEPENDENTES.ParamByName(´PESQUISA´).AsString := ListaCampos[0];
              DEPENDENTES.Open;

(*
//******************************************** LOCALIZA O REGISTRO DO TITULAR
              TITULAR.Close;
              TITULAR.SelectSQL[1]:=´ WHERE CODSAFPE=:PESQUISA ´;
              TITULAR.ParamByName(´PESQUISA´).AsString := ListaCampos[0];
              TITULAR.Open;
//***********************************************************************
*)
              IF DEPENDENTES.IsEmpty THEN
                 BEGIN

                   DEPENDENTES.Insert;

                   DEPENDENTES.FieldByName(´CODSAFPE´).AsString := ListaCampos[0];

                   DEPENDENTES.FieldByName(´MATRICULA´).AsString := ListaCampos[1];

                   DEPENDENTES.FieldByName(´NOME´).AsString := ListaCampos[2];

                   DEPENDENTES.FieldByName(´NASCIMENTO´).AsString := ListaCampos[3];

                   DEPENDENTES.Post;
                   DEPENDENTES.ApplyUpdates;

                   Gauge1.Progress := Gauge1.Progress + 1;
                 end
                   else
                     begin
                        vUpDate := False;

                       if ListaCampos[0] <>  DEPENDENTES.FieldByName(´CODSAFPE´).AsString then
                         vUpDate := True;

                       if ListaCampos[1] <> DEPENDENTES.FieldByName(´MATRICULA´).AsString then
                         vUpDate := True;

                       if ListaCampos[2] <> DEPENDENTES.FieldByName(´NOME´).AsString then
                         vUpDate := True;

                       if ListaCampos[3] <> DEPENDENTES.FieldByName(´NASCIMENTO´).AsString then
                         vUpDate := True;

                      if not vUpDate then
                         begin
                          Gauge1.Progress := Gauge1.Progress + 1;
                          Label1.Caption := ´ SEM ALTERAÇÕES ´+10;
                          Label1.Refresh;
                          Label1.Update;
                         end
                           else
                             begin

                               DEPENDENTES.Edit;

                               DEPENDENTES.FieldByName(´CODSAFPE´).AsString := ListaCampos[0];

                               DEPENDENTES.FieldByName(´MATRICULA´).AsString := ListaCampos[1];

                               DEPENDENTES.FieldByName(´NOME´).AsString := ListaCampos[2];

                               DEPENDENTES.FieldByName(´NASCIMENTO´).AsString := ListaCampos[3];

                               DEPENDENTES.Post;
                               DEPENDENTES.ApplyUpdates;

                               Gauge1.Progress := Gauge1.Progress + 1;
                            end;
                   end;
            end;

        finally
         Registros.Free;
         ListaCampos.Free;
          end;

           except
            on msg : Exception do
               MessageDlg(´Ocorreu o seguinte erro: ´+ msg.Message, mtWarning, [ mbOK ], 0);
               end;

dhDeps(StrToDateTime(DataTxt(txtDEPDS)));
end;


essa foi a melhor maneira que achei para importar os dados do txt, se alguém conhece alguma forma mais rápida de importar por favor me avise!
:wink:


GOSTEI 0
POSTAR