Fórum Problemas com findkey #290150
01/08/2005
0
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
Curtir tópico
+ 0Posts
01/08/2005
Rjun
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;
Gostei + 0
01/08/2005
Eric.miranda
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
Gostei + 0
01/08/2005
Eric.miranda
será que é pq as tabelas estão vinculadas...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)