[firebase-br] Como prevenir o erro "Arithmetic exception, numeric overflow, or string truncation. string right truncation."

Gladiston Santana gladiston em vidy.com.br
Seg Ago 8 16:38:25 -03 2016


Luciano,

Se você trabalha com Delphi, pode usar os TFields, pois os mesmos importam
as características do campo, se for um varchar(30), o maxlenth dum dbedit
também será 30.

Uma outra abordagem é as inclusões/alterações por meio de stored
procedure(SP). Neste caso os parâmetros da SP podem ser mais generosos do
que o convencionalmente aceito na tabela, por exemplo, varchar(255) para
todos os parâmetros strings da SP. Daí. de dentro da SP você faz a
sanitização que precisar antes de proceder a inclusão ou alteração. Além de
se preocupar com o tamanho, a sanitização poderá remover traços, pontos de
um CNPJ, estudar se o valor de um campo deverá ser aceito ou não, etc... A
vantagem dessa abordagem é que o mesmo método atenderia diferentes
linguagens de programação e a validação dos dados pode ser deixada para a
SP. Além disso, o UPDATE/INSERT que fizer na SP podem ser acrescidos
RETURNING VALUES e com pouco esforço sua SP se tornar selecionável e daí o
seu programa saberia exatamente o que acabou de ser incluso ou alterado.
Isso é uma mão na roda quando você tem que acrescentar um registro e obter
imediatamente o valor de autoincremento que foi incluso.

O único defeito desse método é que as SPs de um banco de dados não são
cambiáveis para outro BD. Se um dia trocar de BD, terá de reescreve-las na
linguagem PSQL que o novo BD usar, isso se for possível.



Mais detalhes sobre a lista de discussão lista