transferencia de dados
07/02/2006
0
-> Firebird 1.5, Delphi 7
Erro gerado:
-------------------------------------------------------------------------------
´arithmetic exception, numeric overflow, or string truncation cannot transliterate character between character sets´
-------------------------------------------------------------------------------
O que acontece após o erro:
-------------------------------------------------------------------------------
ao invés de serem copiados os 9.979 registros existentes na tabela de origem para de destino é copiado apenas o primeiro registro.
-------------------------------------------------------------------------------
se alguem puder me ajudar, abaixo segue os códigos e campos das respectivas tabelas...
Abraços!
Rotina:
procedure Limpa_Edit; begin Principal.Edit_Codigo.Clear; Principal.Edit_Nome.Clear; Principal.Edit_CODUF.Clear; Principal.Edit_Data.Clear; end; procedure TPrincipal.Btn_CopiaClick(Sender: TObject); begin Tbl_Para.First; Tbl_De.First; while not Tbl_De.Eof do begin Limpa_Edit; Edit_Codigo.Text := IntToStr(Tbl_DECODIGO.AsInteger); Edit_Nome.Text := Tbl_DENOME.AsString; Edit_CODUF.Text := IntToStr(Tbl_DECODIGO_ESTADO.AsInteger); Edit_Data.Text := DateToStr(Tbl_DEDATA_CADASTRO.AsDateTime); Tbl_Para.Insert; Tbl_ParaCODIGO.AsInteger := StrToInt(Edit_Codigo.Text); Tbl_ParaNOME.AsString := Edit_Nome.Text; Tbl_ParaCODIGO_ESTADO.AsInteger := StrToInt(Edit_CODUF.Text); Tbl_ParaDATA_CADASTRO.AsDateTime := StrToDateTime(Edit_Data.Text); end; Tbl_Para.post; Tbl_Para.ApplyUpdates; ShowMessage(´transferencia realizada com sucesso!´); end;
campos da tabelas:
tabela ´PARA´
----------------
/* Table: CIDADE, Owner: SYSDBA */ CREATE TABLE CIDADE ( CODIGOINTEGER NOT NULL, NOMEVARCHAR(50) CHARACTER SET WIN1252 NOT NULL COLLATE PXW_INTL850, CODIGO_ESTADOINTEGER NOT NULL, DATA_CADASTROTIMESTAMP DEFAULT ´now´ NOT NULL, CONSTRAINT PK_CIDADE_CODIGO PRIMARY KEY (CODIGO) );
Tabela ´De´:
--------------
/* Table: CIDADE, Owner: SYSDBA */ CREATE TABLE "CIDADE" ( "CODIGO"INTEGER NOT NULL, "NOME"VARCHAR(50) CHARACTER SET WIN1252 NOT NULL COLLATE PXW_INTL850, "CODIGO_ESTADO"INTEGER NOT NULL, "CODIGO_REGIAO"INTEGER, "CODIGO_ROTA_ENTREGA"VARCHAR(20) CHARACTER SET WIN1252, "DATA_CADASTRO"TIMESTAMP DEFAULT ´now´ NOT NULL, CONSTRAINT "PK_CIDADE_CODIGO" PRIMARY KEY ("CODIGO") ); ALTER TABLE "CIDADE" ADD CONSTRAINT "FK_CIDADE_CODESTADO" FOREIGN KEY ("CODIGO_ESTADO") REFERENCES ESTADO ("CODIGO"); ALTER TABLE "CIDADE" ADD CONSTRAINT "FK_CIDADE_CODREGIAO" FOREIGN KEY ("CODIGO_REGIAO") REFERENCES REGIAO ("CODIGO"); ALTER TABLE "CIDADE" ADD CONSTRAINT "FK_CIDADE_CODROTENT" FOREIGN KEY ("CODIGO_ROTA_ENTREGA") REFERENCES ROTA_ENTREGA ("CODIGO");
Mahdak
Posts
07/02/2006
Martins
procedure TPrincipal.Btn_CopiaClick(Sender: TObject); begin Tbl_Para.First; Tbl_De.First; while not Tbl_De.Eof do begin Limpa_Edit; Edit_Codigo.Text := IntToStr(Tbl_DECODIGO.AsInteger); Edit_Nome.Text := Tbl_DENOME.AsString; Edit_CODUF.Text := IntToStr(Tbl_DECODIGO_ESTADO.AsInteger); Edit_Data.Text := DateToStr(Tbl_DEDATA_CADASTRO.AsDateTime); Tbl_Para.Insert; Tbl_ParaCODIGO.AsInteger := StrToInt(Edit_Codigo.Text); Tbl_ParaNOME.AsString := Edit_Nome.Text; Tbl_ParaCODIGO_ESTADO.AsInteger := StrToInt(Edit_CODUF.Text); Tbl_ParaDATA_CADASTRO.AsDateTime := StrToDateTime(Edit_Data.Text); Tbl_Para.post; Tbl_De.Next; end; Tbl_Para.ApplyUpdates; ShowMessage(´transferencia realizada com sucesso!´); end;
07/02/2006
Mahdak
abraços
07/02/2006
Martins
Ok!
vou fazer um exemplo para teste!!!
07/02/2006
Martins
procedure TPrincipal.Btn_CopiaClick(Sender: TObject); begin Tbl_Para.First; Tbl_De.First; while not Tbl_De.Eof do begin Tbl_Para.Append; Tbl_ParaCODIGO.AsInteger := Tbl_DECODIGO.AsInteger; Tbl_ParaNOME.AsString := Tbl_DENOME.AsString; Tbl_ParaCODIGO_ESTADO.AsInteger := Tbl_DECODIGO_ESTADO.AsInteger; Tbl_ParaDATA_CADASTRO.AsDateTime := Tbl_DEDATA_CADASTRO.AsDateTime; Tbl_Para.post; Tbl_De.Next; end; ShowMessage(´transferencia realizada com sucesso!´); end;
Se não der certo, então eu vou criar as tabelas com a mesma estrutura das suas e testar.
07/02/2006
Aasn
Este erro está relacionado a presença de caracteres especiais e/ou acentos. Corrigindo isso, desaparecem as mensagens de erro.
[]´s
AASN
07/02/2006
Martins
Então [b:bf82c21142]mahdak[/b:bf82c21142], veja os seus caracteres acentuados!
Mas se as tabelas são identicas, e existem dados em uma delas..., eu hein... :?: :?
07/02/2006
Mahdak
abraços
07/02/2006
Mahdak
- coloquei a função que quemove os acentos e varri a tabela editando (removendo) os acentos e depois tentei fazer a transferencia, mas deu um erro ao tentar remover (editando a tabela de origem ) os acentos..
ERRO: ´Not in Edit Mode´
- o que fazer???
procedure Limpa_Edit; begin Principal.Edit_Codigo.Clear; Principal.Edit_Nome.Clear; Principal.Edit_CODUF.Clear; Principal.Edit_Data.Clear; end; function RemoveAcento(Str:String): String; Const ComAcento = ´àâêôûãõáéíóúçüÀÂÊÔÛÃÕÁÉÍÓÚÇÜ´; SemAcento = ´aaeouaoaeioucuAAEOUAOAEIOUCU´; Var x : Integer; Begin For x := 1 to Length(Str) do if Pos(Str[x],ComAcento)<>0 Then Str[x] := SemAcento[Pos(Str[x],ComAcento)]; Result := Str; end; procedure TPrincipal.Btn_CopiaClick(Sender: TObject); begin // remove acentos da tabela de origem Tbl_De.First; while not Tbl_De.Eof do begin Limpa_Edit; Edit_Codigo.Text := IntToStr(Tbl_DECODIGO.AsInteger); Edit_Nome.Text := Tbl_DENOME.AsString; Edit_CODUF.Text := IntToStr(Tbl_DECODIGO_ESTADO.AsInteger); Edit_Data.Text := DateToStr(Tbl_DEDATA_CADASTRO.AsDateTime); Edit_Nome.Text := RemoveAcento(edit_nome.Text); Tbl_De.Open; Tbl_De.Edit; Tbl_ParaCODIGO.AsInteger := StrToInt(Edit_Codigo.Text); Tbl_ParaNOME.AsString := Edit_Nome.Text; Tbl_ParaCODIGO_ESTADO.AsInteger := StrToInt(Edit_CODUF.Text); Tbl_ParaDATA_CADASTRO.AsDateTime := StrToDateTime(Edit_Data.Text); Tbl_De.Next; end; Tbl_De.Post; Tbl_De.ApplyUpdates; ShowMessage(´Acentos removidos com sucesso!´); // copia os dados da tabela de origem para a de destino Tbl_Para.First; Tbl_De.First; while not Tbl_De.Eof do begin Limpa_Edit; Edit_Codigo.Text := IntToStr(Tbl_DECODIGO.AsInteger); Edit_Nome.Text := Tbl_DENOME.AsString; Edit_CODUF.Text := IntToStr(Tbl_DECODIGO_ESTADO.AsInteger); Edit_Data.Text := DateToStr(Tbl_DEDATA_CADASTRO.AsDateTime); Tbl_Para.Insert; Tbl_ParaCODIGO.AsInteger := StrToInt(Edit_Codigo.Text); Tbl_ParaNOME.AsString := Edit_Nome.Text; Tbl_ParaCODIGO_ESTADO.AsInteger := StrToInt(Edit_CODUF.Text); Tbl_ParaDATA_CADASTRO.AsDateTime := StrToDateTime(Edit_Data.Text); end; Tbl_Para.post; Tbl_Para.ApplyUpdates; ShowMessage(´transferencia realizada com sucesso!´); end;
07/02/2006
Aasn
O erro está no comando para abertura do arquivo dentro do loop.
Tbl_De.Open; Tbl_De.Edit;
remova o comando [b:e1d7bcb0b9]Tbl_De.Open;[/b:e1d7bcb0b9] e tente novamente.
[]´s
AASN
08/02/2006
Thomaz_prg
procedure TPrincipal.Btn_CopiaClick(Sender: TObject); begin Tbl_Para.First; Tbl_De.First; while not Tbl_De.Eof do begin Tbl_Para.Insert; Tbl_ParaCODIGO.Value := Tbl_DECODIGO.Value; Tbl_ParaNOME.Value := Tbl_DENOME.Value; Tbl_ParaCODIGO_ESTADO.Value :=Tbl_DECODIGO_ESTADO.Value; Tbl_ParaDATA_CADASTRO.Value := Tbl_DEDATA_CADASTRO.Value; Tbl_Para.post; Tbl_De.Next; end; Tbl_Para.ApplyUpdates; ShowMessage(´transferencia realizada com sucesso!´); end;
Clique aqui para fazer login e interagir na Comunidade :)