IIF VB6 DOR DE CABECA
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.....
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.
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
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.
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.
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
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.
ps: nunca tive problemas com IIF mas é bom saber que ele é inconstante.
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.
FILMAN......
CERTINHO!!!!