[firebase-br] Erro em campo "Computed By": Overflow occurred during data type convertion. Convertion erros string "16030"

Mário Reis mariodosreyx em gmail.com
Quinta Outubro 2 07:04:11 -03 2025


Além de agradecer importa referir que cp4 quer cp3 são do tipo SmallInt e
que como não consegui fazer um MaskEditdo lado do Delphi, em 4
situações alguém conseguiu criar codigo com > 4 digitos:
select cp4, cp3  from empresas E
WHERE E.cp4 >9999 or CHARACTER_LENGTH( Trim( CAST( E.cp4 as varchar(10) )
 ) ) > 4; E, logo descobri o(s) gato(s):
"CP4" "CP3"
"16030" "2301"
"11675" "180"
"12954" "24"
"11900" "221"
"15005"
"19700" "172"
corrigi 'à unha´' e fiz uma trigger  if cp4 >9999 then exception  EX_CP4
(dei-lhe s grants)  'Excede os limites (1/9999)' por falatar ao DbEdit o
EditMask que funcione para além do 3 digitos.
Segundo a AI parece que é um erro crónico que a Borland e depois a
Embarcadero têm até hoje (XE7) por corrigir, porque de outro modo um
máscara #### reolvia o assunto.
Mas mais uma vez obrigado

Com os meus melhores cumprimentos
Mário Agostinho Reis
919262146

Esta mensagem contém informação de natureza confidencial e é
exclusivamente dirigida ao(s) destinatário(s) indicado(s). Se, por engano,
receber este email agradecemos que não o copie nem o reenvie e que nos
notifique do ocorrido através do email de resposta.


Gladiston Santana <gladiston.santana em gmail.com> escreveu (quarta, 1/10/2025
à(s) 20:38):

> Evite inferencias, no seu create table faça assim:
>       CREATE TABLE ORCAMENTOS (
>           CODITEM_ALMOX           VARCHAR(36),
>           (...)
>                     VL_UNITARIO              NUMERIC(18,4) DEFAULT 0.00
> NOT NULL,
>                     QTDE_ATUAL              NUMERIC(18,4) DEFAULT 0.00 NOT
> NULL,
>           VL_TOTAL          *NUMERIC(18,4)* COMPUTED BY (
>              *CAST*(VL_UNITARIO*QTDE_ATUAL) *AS **NUMERIC(18,4)*
>           ),
>           (...)
>       );
>
> Ou seja, tenha um tipo antes do 'compute by' e sempre que for lidar com
> numeros faça um cast para o mesmo tipo.
> Não usar um cast pode permitir que um número inteiro varie entre smallint,
> int e bigint, ou seja dinamicamente inferido, mas o cast forçará um tipo
> específico para não variar.
> No delphi por exemplo, os TFields tem tipos fixos e se houver variação,
> especialmente em tamanhos de strings ou tipos numericos, eles podem dar
> erro.
> Se seus campos numericos permitem nulos, use COALESCE.
>
>
>


Mais detalhes sobre a lista de discussão lista