IIF VB6 DOR DE CABECA

ADRIANOM 09/01/2014 15:55:39
#432874
Novamente busco ajuda...
Andei garimpando o Google, mas acredito que desaprendi, pois não encontrei nada direcionado ao meu problema.
Bem, chega de conversa mole.

Dentro de uma String sSQL coloco as informações para o comando .CommandText = sSQL ser executado.

dentro de toda minha sSQL, que estava funcionando perfeitamente, busquei alterar - para o código abaixo - na busca de um melhor tratamento dos dados que serão salvos no meu banco de dado FireBird. Os campos de datas, estão referenciados no BD como date/time e os de telefone como varChar.
Na hora que executo está dando erro.... segue o fragmento código da sSQL, e me digam qual correção devo fazer:

Citação:



sSQL = sSQL & [Ô][ô][Ô] & VBA.CInt(IIf(txtTel.Text = [Ô](__)____-____[Ô], Empty, txtTel.Text)) & [Ô][ô],[Ô]
sSQL = sSQL & [Ô][ô][Ô] & VBA.CInt(IIf(txtCel.Text = [Ô](__)____-____[Ô], Empty, txtCel.Text)) & [Ô][ô],[Ô]
sSQL = sSQL & [Ô][ô][Ô] & VBA.CInt(IIf(txtAdmissao.Text = [Ô]##/##/####[Ô], Empty, Format(txtAdmissao.Text, [Ô]yyyy/mm/dd))) & [Ô][ô],[Ô]
sSQL = sSQL & [Ô][ô][Ô] & VBA.CInt(IIf(txtDemissao.Text = [Ô]##/##/####[Ô], Empty, Format(txtDemissao.Text, [Ô]yyyy/mm/dd)) & [Ô][ô],[Ô]



Lembro que estou utilizando para estes campos o Maskedbox.....
OCELOT 09/01/2014 17:08:18
#432875
Você não pode usar o IIF nesse caso, pois o IIF sempre executa o código que está dentro dele já que ele é uma função, então mesmo que o primeiro parâmetro seja true ele vai tentar formatar a data de qualquer jeito.

O jeito é ou você usar um if normal, que no caso você pode criar uma function para facilitar o uso na hora de montar a SQL.
FILMAN 09/01/2014 19:12:17
#432877
Resposta escolhida
tente assim

Em vez de colocar txtTel.Text = [Ô](__)____-____[Ô] coloque assim txtTel.ClipText = [Ô][Ô]

Não Utilize o VBA.CInt(), pois o numero do telefone será superior ao tamanho do Integer utilize o VBA.CLng(), mas de preferência use STRING mesmo, já que o usuário pode não digitar o telefone por completo e você vai salvar com [Ô]( )[Ô] Parênteses e [Ô]-[Ô] Hífen.

portanto ficaria assim:


sSQL = sSQL & [Ô][ô][Ô] & IIf(txtTel.ClipText = [Ô][Ô], Empty, txtTel.Text) & [Ô][ô],[Ô]
sSQL = sSQL & [Ô][ô][Ô] & IIf(txtCel.ClipText= [Ô][Ô], Empty, txtCel.Text) & [Ô][ô],[Ô]
sSQL = sSQL & [Ô][ô][Ô] & IIf(txtAdmissao.ClipText= [Ô][Ô], Empty, Format(txtAdmissao.Text, [Ô]yyyy/mm/dd)) & [Ô][ô],[Ô]
sSQL = sSQL & [Ô][ô][Ô] & IIf(txtDemissao.ClipText= [Ô][Ô], Empty, Format(txtDemissao.Text, [Ô]yyyy/mm/dd)) & [Ô][ô],[Ô]


Espero ter ajudado
MARCELO.TREZE 09/01/2014 20:41:06
#432879
qual o erro que é gerado

e

Citação:

:
Você não pode usar o IIF nesse caso, pois o IIF sempre executa o código que está dentro dele já que ele é uma função, então mesmo que o primeiro parâmetro seja true ele vai tentar formatar a data de qualquer jeito.

O jeito é ou você usar um if normal, que no caso você pode criar uma function para facilitar o uso na hora de montar a SQL.



Confesso amigo OCELOT que não entendi sua colocação, porque ele pode usar o IIf sim.



NILSONTRES 09/01/2014 23:26:16
#432884
Citação:

Confesso amigo OCELOT que não entendi sua colocação, porque ele pode usar o IIf sim.


é isso mesmo MRCELO,
Ao inserir dados tipo data por exemplo isso não funciona.
Eu resolvi isso inserindo e editando dados sempre utilizando Parameters.
FILMAN 10/01/2014 00:38:08
#432885
Citação:

é isso mesmo MRCELO,
Ao inserir dados tipo data por exemplo isso não funciona.
Eu resolvi isso inserindo e editando dados sempre utilizando Parameters.



Bom no caso dele o problema não acontecerá, pois a expressão sempre vai estar para TRUE e mesmo que não seja uma data válida não vai dar erro algum!

Então de momento concordo com o MARCELO, mas já obtive sim problema com o IIF e não nego, porém por causa de expressões erradas.


Estamos aqui para ajudar a solucionar o problema do nosso amigo, então não vamos discutir por algo não muito relevante no momento! Obrigado
OCELOT 10/01/2014 08:57:10
#432889
Citação:

Confesso amigo OCELOT que não entendi sua colocação, porque ele pode usar o IIf sim.



Realmente testando aqui neste caso o IIF não causa problema, pois o format com uma valor inválido para o formato passado não da erro, simplesmente não formata, ele causaria problema se tivesse uma conversão dentro do IIF, mas a conversão está fora

Mas também faz tempo que não trabalho com VB, não lembrava do format não causando erros por formatos inválidos.

O problema ali então provavelmente é a conversão com o CInt mesmo, que nem considerei quando vi o IIF no título do tópico, já que geralmente o maior erro das pessoas com o IIF é achar que ele só executa uma das expressões, ou a do true ou a do false, quando na verdade ele executa sempre as duas mas retorna o valor apenas de uma delas.
MARCELO.TREZE 10/01/2014 16:08:56
#432920
Bom agora vamos esperar o colega responder, baseando-se na resposta do filman, pois acredito que o problema seja este também, depois continuamos a ajuda-lo

ps: nunca tive problemas com IIF mas é bom saber que ele é inconstante.

NILSONTRES 10/01/2014 19:34:19
#432931
Citação:

Realmente testando aqui neste caso o IIF não causa problema, pois o format com uma valor inválido para o formato passado não da erro, simplesmente não formata, ele causaria problema se tivesse uma conversão dentro do IIF, mas a conversão está fora



MARCELO, Desculpe ai, meu caso é igual do OCELOT, e eu nem analisei o codigo achando que era uma coisa e era outra.
ADRIANOM 11/01/2014 14:51:03
#432941
Galera, vocês são demais!!!!


FILMAN......

CERTINHO!!!!
Tópico encerrado , respostas não são mais permitidas