Erro na importação
Bom dia
Eu estava fazendo a importação de 550.000 mil registros (de uma tabela para outra) , quando estava no 349.524 apareceu a seguinte mensagem:
Access Violation at address 4 db21e3din module midas.dll write of address 0541c7c0.
A rotina da importação é essa:
With dmDados do
begin
CdsCepOrigem.First;
While not CdsCepOrigem.Eof do
begin
inc(n);
CdsCepDestino.Edit;
CdsCepDestino.Append;
CdsCepDestino.FieldByname(´COD_CEP´).asInteger := n;
CdsCepDestino.FieldByName(´NRCEP_CEP´).AsString :=
CdsCepOrigem.FieldByname(´CEP´).AsString;
CdsCepDestino.FieldByName(´DESC_CEP´).AsString :=
CdsCepOrigem.FieldByname(´NOME_LOGRADOURO´).AsString;
CdsCepDestino.Post;
CdsCepDestino.ApplyUpdates(-1);
LbMensagem.Refresh;
LbMensagem.Caption := ´Processando registro ´ +
Inttostr(CdsCepOrigem.RecNo);
CdsCepOrigem.Next;
end;
Estou usando Delphi 7 + dbexpress + Firebird 2.0
Fico no aguardo
Rogério
Eu estava fazendo a importação de 550.000 mil registros (de uma tabela para outra) , quando estava no 349.524 apareceu a seguinte mensagem:
Access Violation at address 4 db21e3din module midas.dll write of address 0541c7c0.
A rotina da importação é essa:
With dmDados do
begin
CdsCepOrigem.First;
While not CdsCepOrigem.Eof do
begin
inc(n);
CdsCepDestino.Edit;
CdsCepDestino.Append;
CdsCepDestino.FieldByname(´COD_CEP´).asInteger := n;
CdsCepDestino.FieldByName(´NRCEP_CEP´).AsString :=
CdsCepOrigem.FieldByname(´CEP´).AsString;
CdsCepDestino.FieldByName(´DESC_CEP´).AsString :=
CdsCepOrigem.FieldByname(´NOME_LOGRADOURO´).AsString;
CdsCepDestino.Post;
CdsCepDestino.ApplyUpdates(-1);
LbMensagem.Refresh;
LbMensagem.Caption := ´Processando registro ´ +
Inttostr(CdsCepOrigem.RecNo);
CdsCepOrigem.Next;
end;
Estou usando Delphi 7 + dbexpress + Firebird 2.0
Fico no aguardo
Rogério
Rogeranalista
Curtidas 0
Respostas
Emerson Nascimento
26/06/2009
o erro é muito vago. não há como saber o que pode estar acontecendo.
talvez tenha muita coisa em cache, visto que o erro é na midas.dll... sei lá...
mude um pouco a rotina, de modo a ter somente 1 registro ativo na tabela cdsDestino. algo assim:
pra isso funcionar vai depender muito da instrucao contida no CdsCepDestino.
outra coisa: você não precisa da linha CdsCepDestino.Edit;
talvez tenha muita coisa em cache, visto que o erro é na midas.dll... sei lá...
mude um pouco a rotina, de modo a ter somente 1 registro ativo na tabela cdsDestino. algo assim:
With dmDados, dmDados.CdsCepOrigem do begin First; While not Eof do begin inc(n); if not CdsCepDestino.Active then CdsCepDestino.Open; // abre a tabela CdsCepDestino.Append; CdsCepDestino.FieldByname(´COD_CEP´).asInteger := n; CdsCepDestino.FieldByName(´NRCEP_CEP´).AsString := FieldByname(´CEP´).AsString; CdsCepDestino.FieldByName(´DESC_CEP´).AsString := FieldByname(´NOME_LOGRADOURO´).AsString; CdsCepDestino.Post; CdsCepDestino.ApplyUpdates(-1); CdsCepDestino.Close; // fecha a tabela LbMensagem.Refresh; LbMensagem.Caption := ´Processando registro ´ + Inttostr(RecNo); Next; end;
pra isso funcionar vai depender muito da instrucao contida no CdsCepDestino.
outra coisa: você não precisa da linha CdsCepDestino.Edit;
GOSTEI 0
Martins
26/06/2009
inc(n); //CdsCepDestino.Edit; --> Entra em contradição com a instrução abaixo. CdsCepDestino.Append;
GOSTEI 0
Catunda
26/06/2009
oi,
Verifique cuidadosamente os tipos e tamanhos definidos na tabela destino, eles precisam ser iguais aos da tabela origem ou de um tipo que realmente comporte o tipo de origem, assim pode ser que exista um dado no registro 349.524 ou 349.525 que não seja realmente compativel com o campo destino. Essa incompatibilidade pode ser diretamente com o campo, como já dito, ou no momento da chamada com o .AsString ou .AsInteger mostrando a incompatibilidade com o comando.
As vezes um campo com valor Null causa essa discrepancia.
Verificque tambem algum índice e dependencias de outras tabelas.
Verifique cuidadosamente os tipos e tamanhos definidos na tabela destino, eles precisam ser iguais aos da tabela origem ou de um tipo que realmente comporte o tipo de origem, assim pode ser que exista um dado no registro 349.524 ou 349.525 que não seja realmente compativel com o campo destino. Essa incompatibilidade pode ser diretamente com o campo, como já dito, ou no momento da chamada com o .AsString ou .AsInteger mostrando a incompatibilidade com o comando.
As vezes um campo com valor Null causa essa discrepancia.
Verificque tambem algum índice e dependencias de outras tabelas.
GOSTEI 0