Importar arquivo.txt
30/06/2008
0
Estou usando o Delphi 7 + Fire Bird 2.0
Tenho um arquivo chamado cad_cliente.txt, o mesmo contem informaçãoes de posições definidas, preciso importar o arquivo para uma tabela do banco e gravar as informações, no exemplo que estou passando o arquivo contem 5 linhas mas somente a ultima linha grava na tabela no banco. Segue abaixo
// Arquivo
000001FCIA. DO IPAM LTDA
000002ASSOCIACAO EDUCADORA SAO CARLOS
000003DROG MAIS ECONOMICA LTDA
000004DROG MAIS ECONOMICA LTDA
000005DROG MAIS ECONOMICA LTDA
000006DROG MAIS ECONOMICA LTDA
000007DROG CAPILE LTDA
000008FCIA. DO IPAM LTDA
000009DROG MAIS ECONOMICA LTDA
000010DROG MAIS ECONOMICA LTDA
// Código
procedure TForm1.BitBtn1Click(Sender: TObject);
var
fArq : TextFile; // tipo texto
Caminho : String; // armazena o caminho
Linha : String; // lê a linha do tipo texto
mTexto : TStringList;
i : Integer; //utilizada no contador de linhas
begin
Caminho := Edit1.Text; // variavel recebe os dados do edit
AssignFile(fArq,Caminho);
Reset(fArq);
mTexto := TStringList.Create;
mTexto.LoadFromFile(Caminho);
ProgressBar1.Max :=mTexto.Count - 1;
i := 0;
mTexto.Free;
while not Eof(fArq) do // faça enquanto não chegar ao fim do arquivo
begin
Application.ProcessMessages;
Readln(fArq, linha); // leia o texto e a linha
//ClientDataSet1.Params.ParamByName(´CODIGO´).AsString := Trim(copy(Linha,1,6)); // buscando pelo parâmetro código
ClientDataSet1.Open; // abrindo a tabela
if ClientDataSet1.IsEmpty then // se a tabela estiver vazia
ClientDataSet1.Append // insira os arquivos lidos
else // senao
ClientDataSet1.edit; // edite e atualize
// aqui os campos recebem as linhas lidas
ClientDataSet1CODIGO.AsString := Trim(copy(Linha,1,6));
ClientDataSet1NOME.AsString := Trim(copy(Linha,7,32));
ClientDataSet1.Post; // salva
ClientDataSet1.ApplyUpdates(0); //atualiza no banco
ClientDataSet1.Close; // fecha a tabela
Inc(i);
ProgressBar1.Position := ProgressBar1.Position + 1;
Next;
End;
MessageBeep(65);
ShowMessage(´Processo Concluído com êxito´);
ClientDataSet1.Open;
ProgressBar1.Position :=0;
end;
end.
A linha abaixo esta comentada no código pois qd compilo o pragrama da erro nessa linha, após comentar a linha o programa compila e roda normal, mas não grava todas as informações.
//ClientDataSet1.Params.ParamByName(´CODIGO´).AsString := Trim(copy(Linha,1,6)); // buscando pelo parâmetro código
Desde já agradeço pela atenção de todos.
Preto_filho
Posts
30/06/2008
Preto_filho
´CLIENTDATASET1: parameter ´CODIGO´ not found.
fora esse erro que estou enviando, porque quando importo o arquivo apenas o ultimo registro do arquivo grava na tabela no banco.
Grato pela atenção.
30/06/2008
Altingon
Antes de passar o parametro feche o ClientDataSet
Valeu
30/06/2008
Preto_filho
Grato pela atenção de todos.
30/06/2008
Emerson Nascimento
procedure TForm1.BitBtn1Click(Sender: TObject); var fArq: TextFile; // tipo texto Caminho: String; // armazena o caminho Linha: String; // lê a linha do tipo texto mTexto: TStringList; begin Caminho := Edit1.Text; // variavel recebe os dados do edit AssignFile(fArq,Caminho); Reset(fArq); mTexto := TStringList.Create; mTexto.LoadFromFile(Caminho); ProgressBar1.Max := mTexto.Count - 1; mTexto.Free; // fecha a tabela e atribui a instrução sql ClientDataSet1.Close; ClientDataSet1.CommandText := ´select * from tabela where codigo = :codigo ´; while not Eof(fArq) do // faça enquanto não chegar ao fim do arquivo begin Application.ProcessMessages; Readln(fArq, linha); // lê a linha e joga o conteúdo na variável linha // buscando pelo parâmetro código ClientDataSet1.Close; // fechando a tabela ClientDataSet1.Params.ParamByName(´CODIGO´).AsString := Trim(copy(Linha,1,6)); ClientDataSet1.Open; // abrindo a tabela if ClientDataSet1.IsEmpty then // se a tabela estiver vazia begin ClientDataSet1.Append; // insira um registro vazio ClientDataSet1CODIGO.AsString := Trim(copy(Linha,1,6)); end else // senao ClientDataSet1.edit; // edita o registro encontrado // aqui os campos recebem os valores lidos ClientDataSet1NOME.AsString := Trim(copy(Linha,7,32)); ClientDataSet1.Post; // salva ClientDataSet1.ApplyUpdates(0); //atualiza no banco ProgressBar1.Position := ProgressBar1.Position + 1; end; MessageBeep(65); ShowMessage(´Processo Concluído com êxito´); ProgressBar1.Position := 0; ClientDataSet1.Close; // fecha a tabela end;
01/07/2008
Preto_filho
Ai emersom.en, fiz como vc comentou, mas quando eu no botão para importar o arquivo da a seguinte mensagem de erro.
´ CommandText Changes are not alowed ´
Grato pela atenção de todos.
01/07/2008
Emerson Nascimento
01/07/2008
Preto_filho
Table unknown
TABELA
At line 1 , column 22.
Grato pela atenção .
01/07/2008
Emerson Nascimento
aquilo foi somente pra você saber como montar a instrução.
se sua tabela é CLIENTE, a instrução deve ser:
select * from cliente where codigo = :codigo
02/07/2008
Preto_filho
Ai emerson.en bl ?
acabei me descuidando no nome da tabela, mas já esta funcionado,
mas acabei ficando com outra duvida, sempre que importo um arquivo no GRID, retorna sempre o ultimo registro do arquivo.
ae se eu fechar o programa e abrir novamente retorna todos os registros do arquivo.
Dese já agradeço pela atenção .
02/07/2008
Preto_filho
Mas gerou outra duvida,
no final do arquivo eu estou jogando uma mensagem na tela, nessa mesma mensagem gostaria de mostrar o total de registros no arquivo.
Grato pela atenção.
02/07/2008
Altingon
var
i:integer;
depois do ClientDataSet1.Post; vc coloca inc(i);
Espero ter ajudado
02/07/2008
Emerson Nascimento
02/07/2008
Preto_filho
Agora é o seguinte, tenho um botão para cancelar a operação de importação, por exemplo , o arquivo já esta sendo importado, mas no meio da importação preciso cancelar, como devo fazer?
Desde já agradeço pela atenção de todos.
02/07/2008
Comodelphi
abcs
Clique aqui para fazer login e interagir na Comunidade :)