Fórum Erro na importação #371651

26/06/2009

0

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


Rogeranalista

Rogeranalista

Responder

Posts

26/06/2009

Emerson Nascimento

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:

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;


Responder

Gostei + 0

26/06/2009

Martins

inc(n); 
//CdsCepDestino.Edit;  --> Entra em contradição com a instrução abaixo.
CdsCepDestino.Append; 



Responder

Gostei + 0

26/06/2009

Catunda

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.


Responder

Gostei + 0

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

Aceitar