Problemas ao gravar usando IfThen

CRUD - Delphi

08/08/2025

Pessoal, tenho um TEdit chamado NF (para aramazenar a nota fiscal)
Ocorre que em alguns casos não tem nota, então esse campo fica vazio.

Para gravar eu uso um insert, então fiz meu parametro assim:

qrAux.ParamByName(''NF'').AsInteger  := IfThen(edNF.Text = EmptyStr, 0, StrToInt(edNF.Text));


Pela lógica, se o ednota estiver vazio, deveria gravar o valor ZERO, mas se estiver preenchido, deve gravar o valor que está no campo.

Porém ao gravar me deparo com o erro
'''' não é um valor inteiro válido
Renan

Renan

Curtidas 0

Melhor post

Arthur Heinrich

Arthur Heinrich

11/08/2025

Desculpe. O Copy/Past torna a gente preguiçoso e acabei escrevendo errado:

qrAux.ParamByName(''NF'').AsInteger  := StrToIntDef( edNF.Text , 0 );


A função StrToIntDef faz exatamente a mesma coisa que o StrToInt. Caso o texto passado no primeiro parâmetro não seja a representação de um número inteiro, ela retorna o segundo parâmetro, sem gerar exceções.
GOSTEI 2

Mais Respostas

Arthur Heinrich

Arthur Heinrich

08/08/2025

O campo pode ser diferente de uma string vazia, mas não necessariamente representar um número. Por exemplo, pode conter um espaço.

Experimente mudar para:

  qrAux.ParamByName(''NF'').AsInteger  := StrToIntDef( edNF.Text = EmptyStr, 0 );

GOSTEI 0
Renan

Renan

08/08/2025

Olá, Arthur

Não entendi como utilizar a sua sugestão, pois ao que entendi, ela define o valor zero caso esteja vazio, porém não consegui aplicar caso o edit realmente receba o numero da nota fiscal

Usei ainda esse codigo pra verificar se o edit possui texto e me indica que ele está de fato vazio, o que está me intrigando

if Trim(Edit1.Text) = '' then
  // O Edit está vazio ou contém apenas espaços em branco
else
  // O Edit contém texto
GOSTEI 0
Renan

Renan

08/08/2025

Certo, mas ainda não entendi como usar essa opção dentro do iFThen.

Notei uma coisa estranha também. No evento de keypress eu permito que o edit receba apenas numeros de 0..9, a tecla BACKSPACE e tecla ENTER.
Se eu remover essa programação, não recebo o erro, porém acabo permitindo que o usuário digite letras.

No final, acho que eu vou testar se o campo é vazio e preencher ele com ZERO no evento de exit.
GOSTEI 0
Renan

Renan

08/08/2025

Perdão, Arthur.

Não havia entendido a lógica.
Se nada for informado, grava ZERO, do contrario grava o numero da nota.

Obrigado pela ajuda.
GOSTEI 0
POSTAR