GARANTIR DESCONTO

Fórum Problemas com findkey #290150

01/08/2005

0

Galera..não estou conseguindo identificar o erro... no filtro do CABECALHO.ele não está achando.. e por isso entra no append e dá erro de duplicação de chave..
tentei o locate mas tb não deu certo..
lá vai ele


procedure TFrmImportacao.btnlerClick(Sender: TObject);
var S:textfile;
Valor: string;
I,MOVIMENTO,CABECALHO,ITENSMOVIMENTO:integer;

begin
If FILELIST.ItemIndex <> -1 then
begin
i:=0;
// preenchimento do Memo
btnler.Enabled:= false;
LBLMENSAGEM.Caption:= ´Iniciando Processo...´;
LBLMENSAGEM.Update;
ASSIGNFILE(S,FILELIST.FileName);
RESET(S);
MEMO.Clear;
MEMO.Lines.Add(´********************IMPORTAÇÃO DE DADOS - IGUAPE.*******************´);
MEMO.Lines.Add(´---------------------------------------------------------------------------------------------´);
MEMO.Lines.Add(´´);
MEMO.Lines.Add(´Data da Importação: ´+datetostr(date));
MEMO.Lines.Add(´Nome do arquivo importado: ´+ExtractFileName( FileLIST.FileName ));
//LOTE:= ´TEMP.TXT´;//´RET´+ COPY(ExtractFileName( FileBox.FileName ),9,13)+´.txt´;
WHILE NOT Eof(S) DO
begin
READLN(S,Valor);
inc(i);
end;
CLOSEFILE(S);
// preenche os campos da tabela temp com o txt
GAUGE.MaxValue:=I;
Reset(S); { Abre o arquivo }
GAUGE.Progress:=0;
LBLMENSAGEM.Caption:= ´Operação em Processo...´;
LBLMENSAGEM.Update;
WHILE NOT Eof(S) DO
begin
READLN(S,Valor);
if (trim(Valor)<>´´)then
begin
IF Length(Valor) = 58 THEN
Begin
MOVIMENTO:= STRTOINT(COPY(VALOR,1,6));
If NOT DM.Movimento.FindKey([MOVIMENTO]) THEN
BEGIN
//GRAVANDO NA TABELA MOVIMENTO
DM.Movimento.append;
DM.Movimento.FieldByName(´CODMOVIMENTO´).ASINTEGER := STRTOINT(COPY(VALOR,1,6));
DM.Movimento.FieldByName(´DATACADASTRO´).ASSTRING := COPY(VALOR,7,2)+´/´+COPY(VALOR,9,2)+´/´+COPY(VALOR,11,4);
DM.Movimento.FieldByName(´DATAMOVIMENTO´).ASSTRING := COPY(VALOR,15,2)+´/´+COPY(VALOR,17,2)+´/´+COPY(VALOR,19,4);
DM.Movimento.FieldByName(´OBS´).ASSTRING := COPY(VALOR,23,30);
DM.Movimento.FieldByName(´CODROTA´).ASSTRING := COPY(VALOR,53,6);
DM.Movimento.Post;
END
ELSE
BEGIN
//ALTERANDO A TABELA MOVIMENTO
DM.Movimento.Edit;
DM.Movimento.FieldByName(´DATACADASTRO´).ASSTRING := COPY(VALOR,7,2)+´/´+COPY(VALOR,9,2)+´/´+COPY(VALOR,11,4);
DM.Movimento.FieldByName(´DATAMOVIMENTO´).ASSTRING := COPY(VALOR,15,2)+´/´+COPY(VALOR,17,2)+´/´+COPY(VALOR,19,4);
DM.Movimento.FieldByName(´OBS´).ASSTRING := COPY(VALOR,23,30);
DM.Movimento.FieldByName(´CODROTA´).ASSTRING := COPY(VALOR,53,6);
DM.Movimento.Post;
Memo.Lines.Add(´Movimento alterado Nº: ´+inttostr(Movimento));
END;
end
ELSE IF Length(Valor) = 40 THEN
Begin
CABECALHO:= STRTOINT(COPY(VALOR,7,6));
DM.Cabecalho.First;
If NOT DM.Cabecalho.Locate(´CodCabecalho´,CABECALHO,[]) THEN
BEGIN
//GRAVANDO NA TABELA CABECALHO
DM.Cabecalho.Append;
DM.Cabecalho.FieldByName(´CODMOVIMENTO´).ASINTEGER := STRTOINT(COPY(VALOR,1,6));
DM.Cabecalho.FieldByName(´CODCABECALHO´).ASINTEGER := STRTOINT(COPY(VALOR,7,6));
DM.Cabecalho.FieldByName(´CODMOTORISTA´).ASINTEGER := STRTOINT(COPY(VALOR,13,6));
DM.Cabecalho.FieldByName(´CODCOBRADOR´).ASINTEGER := STRTOINT(COPY(VALOR,19,6));
DM.Cabecalho.FieldByName(´CODITINERARIO´).ASSTRING := COPY(VALOR,25,6);
DM.Cabecalho.FieldByName(´HORASAIDA´).ASSTRING := COPY(VALOR,31,5);
DM.Cabecalho.FieldByName(´HORACHEGADA´).ASSTRING := COPY(VALOR,36,5);
DM.Cabecalho.Post;
END
ELSE
BEGIN
//ALTERANDO A TABELA CABECALHO
DM.Cabecalho.Edit;
DM.Cabecalho.FieldByName(´CODMOVIMENTO´).ASINTEGER := STRTOINT(COPY(VALOR,1,6));
DM.Cabecalho.FieldByName(´CODMOTORISTA´).ASINTEGER := STRTOINT(COPY(VALOR,13,6));
DM.Cabecalho.FieldByName(´CODCOBRADOR´).ASINTEGER := STRTOINT(COPY(VALOR,19,6));
DM.Cabecalho.FieldByName(´CODITINERARIO´).ASSTRING := COPY(VALOR,25,6);
DM.Cabecalho.FieldByName(´HORASAIDA´).ASSTRING := COPY(VALOR,31,5);
DM.Cabecalho.FieldByName(´HORACHEGADA´).ASSTRING := COPY(VALOR,36,5);
DM.Cabecalho.Post;
Memo.Lines.Add(´Cabeçalho alterado Nº: ´+inttostr(Movimento));
END;
end
ELSE IF Length(Valor) = 52 THEN
Begin
ITENSMOVIMENTO:= STRTOINT(COPY(VALOR,1,6));
If NOT DM.ItensMovimento.FindKey([ITENSMOVIMENTO]) THEN
BEGIN
//GRAVANDO NA TABELA ITENS DO MOVIMENTO
DM.ItensMovimento.Append;
DM.ItensMovimento.FieldByName(´CODIGOCABECALHO´).ASINTEGER := STRTOINT(COPY(VALOR,1,6));
DM.ItensMovimento.FieldByName(´CODVALORPASSAGEM´).ASINTEGER := STRTOINT(COPY(VALOR,7,6));
DM.ItensMovimento.FieldByName(´TALOESINICIAL´).ASINTEGER := STRTOINT(COPY(VALOR,13,6));
DM.ItensMovimento.FieldByName(´TALOESFINAL´).ASINTEGER := STRTOINT(COPY(VALOR,19,6));
DM.ItensMovimento.FieldByName(´GUICHE´).ASINTEGER := STRTOINT(COPY(VALOR,25,6));
DM.ItensMovimento.FieldByName(´PASSES´).ASINTEGER := STRTOINT(COPY(VALOR,31,6));
DM.ItensMovimento.FieldByName(´IDOSOS_MILITAR´).ASINTEGER := STRTOINT(COPY(VALOR,37,6));
DM.ItensMovimento.FieldByName(´VALORPASSAGEM´).ASCURRENCY := STRTOFLOAT(COPY(VALOR,42,6));
DM.ItensMovimento.Post;
END
ELSE
BEGIN
//ALTERANDO A TABELA ITENS DO MOVIMENTO
DM.ItensMovimento.Edit;
DM.ItensMovimento.FieldByName(´CODIGOCABECALHO´).ASINTEGER := STRTOINT(COPY(VALOR,1,6));
DM.ItensMovimento.FieldByName(´CODVALORPASSAGEM´).ASINTEGER := STRTOINT(COPY(VALOR,7,6));
DM.ItensMovimento.FieldByName(´TALOESINICIAL´).ASINTEGER := STRTOINT(COPY(VALOR,13,6));
DM.ItensMovimento.FieldByName(´TALOESFINAL´).ASINTEGER := STRTOINT(COPY(VALOR,19,6));
DM.ItensMovimento.FieldByName(´CODGUICHE´).ASINTEGER := STRTOINT(COPY(VALOR,25,6));
DM.ItensMovimento.FieldByName(´CODPASSES´).ASINTEGER := STRTOINT(COPY(VALOR,31,6));
DM.ItensMovimento.FieldByName(´CODIDOSOS_MILITAR´).ASINTEGER := STRTOINT(COPY(VALOR,37,6));
DM.ItensMovimento.FieldByName(´VALORPASSAGEM´).ASCURRENCY := STRTOFLOAT(COPY(VALOR,42,6));
DM.ItensMovimento.Post;
Memo.Lines.Add(´Item alterado Nº: ´+inttostr(Movimento));
END;
GAUGE.Progress:=GAUGE.Progress+1;
END;
next
end;
end;
CLOSEFILE(S);
//fim do preenchimento
LBLMENSAGEM.Caption:= ´Processo Concluído com Sucesso!´;
LBLMENSAGEM.Update;
Memo.Lines.Add(´DATA DE IMPORTAÇÃO: ´+DATETOSTR(DATE));
Memo.Lines.Add(´QUANTIDADE DE REGISTROS: ´+inttostr(I));
end

else
begin
Showmessage(´Por favor selecione o arquivo texto a ser processado!´);
end;
btnler.Enabled:= true;
END;


Eric.miranda

Eric.miranda

Responder

Posts

01/08/2005

Rjun

Dei uma limpada no seu código. Dê uma olhada. Aparentemente não há nada de errado. Veja se o erro persiste.

procedure TFrmImportacao.btnlerClick(Sender: TObject);
var
  Arquivo: TStringList;
  Valor: string;
  i,
  Movimento,
  Cabecalho,
  ItensMovimento: integer;

begin
  // Faz validações iniciais
  if FileList.ItemIndex = -1 then
  begin
    Showmessage(´Por favor selecione o arquivo texto a ser processado!´);
    Exit;
  end;

   Arquivo := TStringList.Create;
   btnLer.Enabled := False;

   // Utilize um try..finally pois se der algum erro durante o processamento,
   // deve-se voltar o estado de btnLer e limpa o TStringList criado.
   try
     // preenchimento do Memo

     lblMensagem.Caption:= ´Iniciando Processo...´;
     Memo.Clear;
     Memo.Lines.Add(´********************IMPORTAÇÃO DE DADOS - IGUAPE.*******************´);
     Memo.Lines.Add(´---------------------------------------------------------------------------------------------´);
     Memo.Lines.Add(´´);
     Memo.Lines.Add(´Data da Importação: ´+datetostr(date));
     Memo.Lines.Add(´Nome do arquivo importado: ´+ExtractFileName( FileLIST.FileName ));

     // Carrega o arquivo para um TStringList
     Arquivo.LoadFromFile(FileList.FileName);

     // Define o valor máximo para o gauge
     Gauge.MaxValue := Arquivo.Count - 1;
     Gauge.Progress:=0;

     // preenche os campos da tabela temp com o txt
     lblMensagem.Caption:= ´Operação em Processo...´;

     Application.ProcessMessages;

     for i := 0 to Arquivo.Count - 1 do
     begin
       Valor := Arquivo.Strings[i];

       if (Trim(Valor) <> ´´)then
       begin
         if (Length(Valor) = 58) then
         begin
           Movimento := StrToInt(Copy(VALOR, 1, 6));
           if not DM.Movimento.FindKey([Movimento]) then
           begin
             // Insere um novo registro
             DM.Movimento.Insert;
             DM.Movimento.FieldByName(´CODMOVIMENTO´).AsInteger := Movimento;
           end
           else
           begin
             // Edita o registro encontrado
             DM.Movimento.Edit;
             Memo.Lines.Add(´Movimento alterado Nº: ´+ IntToStr(Movimento));
           end;

           DM.Movimento.FieldByName(´DATACADASTRO´).AsString := Copy(Valor, 7, 2) +´/´ + Copy(Valor, 9, 2) +´/´ + Copy(Valor, 11, 4);
           DM.Movimento.FieldByName(´DATAMOVIMENTO´).AsString := Copy(Valor, 15, 2)+´/´+ Copy(Valor, 17, 2) +´/´ + Copy(Valor, 19, 4);
           DM.Movimento.FieldByName(´OBS´).AsString := Copy(Valor, 23, 30);
           DM.Movimento.FieldByName(´CODROTA´).AsString := Copy(Valor, 53, 6);
           DM.Movimento.Post;
         end
         else if (Length(Valor) = 40) then
         begin
           Cabecalho := StrToInt(Copy(Valor, 7, 6));

           DM.Cabecalho.First;
           if not DM.Cabecalho.Locate(´CodCabecalho´, CABECALHO, []) then
           begin
             //GRAVANDO NA TABELA CABECALHO
             DM.Cabecalho.Insert;
             DM.Cabecalho.FieldByName(´CODCABECALHO´).AsInteger := Cabecalho;
           end
           else
           begin
             DM.Cabecalho.Edit;
             Memo.Lines.Add(´Cabeçalho alterado Nº: ´ + IntToStr(Movimento));
           end;

           DM.Cabecalho.FieldByName(´CODMOVIMENTO´).AsInteger := StrToInt(Copy(Valor, 1, 6));
           DM.Cabecalho.FieldByName(´CODMOTORISTA´).AsInteger := StrToInt(Copy(Valor, 13, 6));
           DM.Cabecalho.FieldByName(´CODCOBRADOR´).AsInteger := StrToInt(Copy(Valor, 19, 6));
           DM.Cabecalho.FieldByName(´CODITINERARIO´).AsString := Copy(Valor, 25, 6);
           DM.Cabecalho.FieldByName(´HORASAIDA´).AsString := Copy(Valor, 31, 5);
           DM.Cabecalho.FieldByName(´HORACHEGADA´).AsString := Copy(Valor, 36, 5);
           DM.Cabecalho.Post;
         end
         else if Length(Valor) = 52 THEN
         begin
           ItensMovimento := StrToInt(Copy(Valor, 1, 6));

           if not DM.ItensMovimento.FindKey([ItensMovimento]) then
           begin
             //GRAVANDO NA TABELA ITENS DO MOVIMENTO
             DM.ItensMovimento.Insert;
             DM.ItensMovimento.FieldByName(´CODIGOCABECALHO´).ASINTEGER := ItensMovimento;
           end
           else
           begin
             DM.ItensMovimento.Edit;
             Memo.Lines.Add(´Item alterado Nº: ´ + IntToStr(Movimento));
           end;

           DM.ItensMovimento.FieldByName(´CODVALORPASSAGEM´).AsInteger := StrToInt(Copy(Valor, 7, 6));
           DM.ItensMovimento.FieldByName(´TALOESINICIAL´).AsInteger := StrToInt(Copy(Valor, 13, 6));
           DM.ItensMovimento.FieldByName(´TALOESFINAL´).AsInteger := StrToInt(Copy(Valor, 19, 6));
           DM.ItensMovimento.FieldByName(´GUICHE´).AsInteger := StrToInt(Copy(Valor, 25, 6));
           DM.ItensMovimento.FieldByName(´PASSES´).AsInteger := StrToInt(Copy(Valor, 31, 6));
           DM.ItensMovimento.FieldByName(´IDOSOS_MILITAR´).AsInteger := StrToInt(Copy(Valor, 37, 6));
           DM.ItensMovimento.FieldByName(´VALORPASSAGEM´).AsCurrency := StrToFloat(Copy(Valor, 42, 6));
           DM.ItensMovimento.Post;
         end;
       end;

       Gauge.Progress := GAUGE.Progress + 1;
       Application.ProcessMessages;
     end;

     lblMensagem.Caption:= ´Processo Concluído com Sucesso!´;
     Memo.Lines.Add(´DATA DE IMPORTAÇÃO: ´+ DateToStr(Date));
     Memo.Lines.Add(´QUANTIDADE DE REGISTROS: ´+ IntToStr(Arquivo.Count));
     Application.ProcessMessages;
   finally
     btnLer.Enabled := True;
     FreeAndNil(Arquivo);
   end;
end;



Responder

Gostei + 0

01/08/2005

Eric.miranda

valeu Rjun pela ajuda..
mas o erro ainda persiste..
é estranho pq ele não acho os registros no bd..
estranho pq ele faz com o movimento certinho mas com o cabecalho dá erro..

vou continuar tentando aqui.. se tiver mais alguma idéia agradeceria..

valeu


Responder

Gostei + 0

01/08/2005

Eric.miranda

Estava fazendo uns testes aqui.. e vi que qdo tiro a parte da inclusão do movimento ele funciona..
será que é pq as tabelas estão vinculadas...


Responder

Gostei + 0

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

Aceitar