0 record(s) updated. Only one re... (Zeos, Delphi 2010 e MySQL)

Delphi

11/06/2014

Olá pessoa. Estou com um problema chato no Delphi 2010.

Uso: Delphi 2010, MySQL 5.1, ZeosLib 7.

Estou importando dados de um arquivo txt, contendo por exemplo registros de dados de clientes.
Eu preciso volta e meia estar lendo esse txt e verificar se cada registro lido tem ou não no banco de dados. Se não tem insere, se tem aplica um update.

Acontece que quando tenho uma linha que não sofreu nenhuma alteração, retorna este erro "0 record(s) updated. Only one record should have been updated".
Já analisei todas as configurações.Tenho uma outra aplicação Firebird 2.1 que é semelhante e não tenho problemas.

Segue código que gera o erro:

with dm.qrMiniMain do
      begin
       dm.qrMiniMain.Close;
       SQL.Text:='select * from pessoa where id='+TxtCliente[1];  //Insere o mesmo ID vindo da retafguarda
       Open;
        if IsEmpty then
         begin
          Insert;
          FieldByName('ID').AsInteger                   := PegaInteiro(TxtCliente[1]);
         end
        else
         begin
          Edit;
         end;

        FieldByName('ID_SITUACAO_PESSOA').AsString   := '1';
        FieldByName('NOME').AsString                 := PegaTexto(TxtCliente[2],150);
        FieldByName('FANTASIA').AsString             := PegaTexto(TxtCliente[3],150);
        FieldByName('EMAIL').AsString                := PegaTexto(TxtCliente[4],250);
        FieldByName('CLIENTE').AsString              := 'S'; //Sim, é cliente
        FieldByName('TIPO').AsString                 := TxtCliente[5];
        if TxtCliente[5]='F' then
        begin  //Fisica
         FieldByName('RG').AsString                   := PegaTexto(TxtCliente[7],20);
         FieldByName('ORGAO_RG').AsString             := PegaTexto(TxtCliente[8],20);
         FieldByName('SEXO').AsString                 := TxtCliente[10];
         FieldByName('DATA_EMISSAO_RG').AsDateTime      := PegaData(TxtCliente[9]);
        end
        else
        begin //Juridica
         FieldByName('CPF_CNPJ').AsString             := SoNumero(TxtCliente[6]);
         FieldByName('INSCRICAO_ESTADUAL').AsString   := PegaTexto(TxtCliente[7],30);
         //FieldByName('INSCRICAO_MUNICIPAL').AsString  := TxtCliente[0];
        end;
        FieldByName('FONE1').AsString                := PegaTexto(SoNumero(TxtCliente[21]),10 );
        FieldByName('FONE2').AsString                := PegaTexto(SoNumero(TxtCliente[22]),10 );
        FieldByName('CELULAR').AsString              := PegaTexto(SoNumero(TxtCliente[23]),10 );
        FieldByName('DATA_CADASTRO').AsDateTime      := PegaData(TxtCliente[11]);
        dm.qrMiniMain.Post;
        dm.ConnMINI.Commit;
      end;

Nao usei "insert into" ou "update table" por que assim fica mais fácil pra manutenção.

Depurando, o delphi ele aponta para esta linha: "if (lValidateUpdateCount) and (lUpdateCount <> 1 ) then" da unit "ZDbcGenericResolver".
Me parece que nesta forma de uso, se não tiver nehum registro atualizado ele retorna este erro.

Alguém tem uma ideia do que pode ser?
Maicon Saraiva

Maicon Saraiva

Curtidas 0

Respostas

Maicon Saraiva

Maicon Saraiva

11/06/2014

Resolvi pessoal.
Na linha 27: "FieldByName('DATA_EMISSAO_RG').AsDateTime := PegaData(TxtCliente[9]);" a função PegaData não retornava nehum valor quando não tinha nada no TXT, tive que colocar pra trazer Null, ficando: "FieldByName('DATA_EMISSAO_RG').Value := PegaData(TxtCliente[9]);"
GOSTEI 0
POSTAR