terça-feira, 11 de dezembro de 2018

Erro EDBClient: At end of table

Lidando com minhas tarefas normais de programação, tive que dar manutenção em um programa Delphi. O trabalho era meio que uma ajuda a um outro programador, que estava tentando compilar um aplicativo feito em Delphi 7 (antigo, hein!).
Ao tentar compilar o código fonte, tudo funcionava... no entanto, em determinado momento, acessei a parte da aplicação que estava levantando erro.
Ele tinha usado uma estrutura mestre-detalhe bem ao estilo Delphi, com datasets aninhados, até ai, tudo bem. Eu já usei esse recurso com uma estrutura de duas tabelas - uma mestra e outra filha, mas ele no entanto expandiu um pouco o conceito e usava uma estrutura com três tabelas: uma mestra, uma filha e uma neta (filha da filha). O problema era que se levantava erro ao incluir um registro na tabela neta.

Erro EDBClient: At end of table


Caracas, que droga estava acontecendo ai?
Eu sabia sobre erros desse tipo, ocorridos usando cursores em PL/SQL ou T-SQL, agora em Delphi, usando componentes TClientDataSet? Era estranho. Mas foi muito simples, resolver o problema. Aliás, o problema ocorria por algo muito simples, a solução no caso dele é que não foi nada simples pois envolveu uma mudança estrutural do código fonte.
Esse erro acontecia porque havia a inclusão de registro na tabela neta, sem que houvesse um registro mestre na tabela filha. Simples, né?! E de certa forma bem lógico, se você pensar a respeito: como pode haver netos, sem haver pelo menos um filho?

Pela ajuda, ganhei cem contos, e adicionei mais um conhecimento ao meu arsenal...


NICE PROGRAMMING...