[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