pessoal,
tenho um erro.
Eu sei que este objecto é nulo quando dá erro...(porque estou a adicionar um registo novo)
esta linha é de uma função que fiz para calcular a idade...
" If caixa_de_texto_da_data_de_nascimento Is Not Null Then "
O erro dá nesta linha..
existe outra forma de testar se a instância existe sem dar erro
eu usei este if justamente para evitar este erro .
O que é que pode ser?
Alguém tem uma sugestão pra mim?
(Parece-me que só dá erro quando adiciono um registo novo..)
(Antes trabalhava bem, depois comecei a inventar.....e deu nisto...)
tenho um erro.
Eu sei que este objecto é nulo quando dá erro...(porque estou a adicionar um registo novo)
esta linha é de uma função que fiz para calcular a idade...
" If caixa_de_texto_da_data_de_nascimento Is Not Null Then "
O erro dá nesta linha..
existe outra forma de testar se a instância existe sem dar erro
eu usei este if justamente para evitar este erro .
O que é que pode ser?
Alguém tem uma sugestão pra mim?
(Parece-me que só dá erro quando adiciono um registo novo..)
(Antes trabalhava bem, depois comecei a inventar.....e deu nisto...)
- Código:
Public Function funcao_calcula_idade(caixa_de_texto_da_data_de_nascimento As TextBox) As Integer 'Este "As Integer" diz ao compilador de Visual Basic
'que a função retorna um valor inteiro (tipo de dados a retornar é um inteiro).
'Reparem que há uma passagem de parâmetros por valor-> o OBJECTO: "Caixa de Texto" (em inglês: "TextBox")
Rem Agrupamento de Escolas de Ourém - Rui Pereira
'Aqui existe uma variável (funcao_calcula_idade) com o mesmo nome da função (funcao_calcula_idade)
'É POR ESTA MESMA VARIÁVEL QUE ESTA MESMA FUNÇÃO RETORNA UM VALOR (PARA O SITIO ONDE FOI "CHAMADA")!!!
'Daí, se chamar FUNÇÃO!!E NÃO É UMA ROTINA OU PROCEDIMENTO
'String é um tipo de dados que simboliza uma frase -> texto simples ou cadeia de carateres
Dim texto_da_data_de_nascimento As String
'Declaração de d_nascimento como um tipo de dados->data (Em inglês: "Date")
Dim d_nascimento As Date
'O "if" (pode levar parentesis ou não) é uma estrutura de decisão que testa a expressão à sua frente
'há, agregadas ao "if" um conjunto de instruções que serão executadas, se o resultado da expressão booleana
'(em frente a este if) for verdadeira, se o resultado for "TRUE"
'Simplificando...Consideremos o nosso caso: (se o valor de "texto_da_data_de_nascimento" não é nulo... então...)
'significa que não está vazio
If caixa_de_texto_da_data_de_nascimento Is Not Null Then 'Estamos a validar se a caixa de texto existe (quando o registo é novo, não existe)
'Aqui já estamos a atribuir a "texto_da_data_de_nascimento" o conteúdo da propriedade da caixa de texto que recebemos por parâmetro
texto_da_data_de_nascimento = caixa_de_texto_da_data_de_nascimento.Value
If (texto_da_data_de_nascimento <> "") Then '...Se não estiver vazio, executa o que está dentro do "if"
If CDate(texto_da_data_de_nascimento) Then 'Vamos testar: se podemos converter o texto em data, a função "cdate"
d_nascimento = CDate(texto_da_data_de_nascimento) 'converter o texto em data
funcao_calcula_idade = (Now() - d_nascimento) / 365
Else
MsgBox "Erro a converter o texto para uma data"
Debug.Print texto_da_data_de_nascimento
End If
End If
End If
'Como vimos antes.... o resultado da subtração é um número inteiro com casas decimais (Tipo de dados -> Double ou float)
'Mas o tipo de dados a retornar pela função: é um INTEIRO ou seja: o valor a retornar por esta função "perde as casa decimais"
'sendo um número inteiro, faz com que o resultado da subtração só armazena na variável: "funcao_calcula_idade" a parte inteira
' A "palavra-reservada" (KeyWord) -->"public" (permite que esta função seja chamada em qualquer sitio da base de dados)
' também é importante para ser disponibilizada/chamada em qualquer evento que ocorra na base de dados
End Function
Última edição por rui.o.pereira em 27/9/2014, 11:13, editado 2 vez(es)