DBNULL

F001E 28/06/2012 15:41:58
#405128
Boa tarde a Todos....
Montei essa seguinte linha..

txtBaseSubs.Text = IIf(Convert.IsDBNull(oDataRow([Ô]BASESUBS[Ô])) = True, [Ô]0[Ô], FormataValor(oDataRow([Ô]BASESUBS[Ô]), 1))

Mas da Erro conforme o Anexo...
O Campo BASESUBS é do tipo MONEY...
ROBIU 28/06/2012 16:12:11
#405132
Resposta escolhida
Isso ocorre porque se o valor for nulo ele verifica a sua função FormataValor.
Para corrigir você pode colocar um if dentro da sua função caso o parâmetro retorne nullo, converta para [Ô]0[Ô]. Neste caso nem precisa do iif, pois vai retornar o [Ô]0[Ô] formatado.

Outra solução:

If oDataRow([Ô]BASESUBS[Ô]) = [Ô][Ô] Then oDataRow([Ô]BASESUBS[Ô]) = [Ô]0[Ô]
txtBaseSubs.Text = FormataValor(oDataRow([Ô]BASESUBS[Ô]), 1)
F001E 28/06/2012 16:20:50
#405134
ROBIU.....isso que eu percebi aqui na função FormataValor....
Vou ver certo aqui.....
KERPLUNK 28/06/2012 16:25:23
#405135
1 - Para leitura de dados use DataReader e não DataTable
2 - Crie métodos de extensão para facilitar a leitura e dentro desses métodos faça os tratamentos necessários de null; o uso de ternários, apesar de não estar incorreto, se torna trabalhoso e deixa o código pouco legível
3 - Use OOP e faça o preenchimento de valores(usando os métodos de extensão) em classes entidade, isso torna seu código muito mais legível ao ponto de mesmo um leigo poder entender
4 - Se você usa formatação de diferentes tipos, evite o uso do [Ô]Mask[Ô], prefira extender a classe do textbox, passando a formatação desejada e um método de extensão que faça a formatação para você
F001E 28/06/2012 16:40:29
#405137
Na verdade é só inverter o Parametro assim

txtBaseSubs.Text = FormataValor(IIf(Convert.IsDBNull(oDataRow([Ô]BASESUBS[Ô])) = True, [Ô]0[Ô], oDataRow([Ô]BASESUBS[Ô])), 1)

dai funciona....
Tópico encerrado , respostas não são mais permitidas