VERIFICAR HORA

MARCELOFAZAN 09/08/2010 07:58:06
#349760
Pessoal , vi alguns topicos mais nada que consegui adaptar no formato hh:mm:ss , que achei poco material

qdo vo gravar uma Hora completa no Access e se eu colocar 555555 e clicar no botao gravar da um erro tipo incompativeis

alguem tem alguma verificação para verificar uma hora que existe , e que de uma mensagem essa hora nao existe


Abs
Marcelo Fazan
JONATHANSTECKER 09/08/2010 08:30:16
#349764
Resposta escolhida
Dá um erro pois a hora = 55 não existe.
Máximo 24

Verificando datas
Geralmente usamos uma caixa de texto para a entrada de dados , certo? e como fazemos para saber se um
valor informado pelo usuário é um valor que pode ser convertido para uma data ? Para isto podemos usar a
função IsDate.

A sintaxe é a seguinte : IsDate(expressão)

A função retorna True se a data pode ser convertida para uma Data. Assim:
Dim Data, Data1, Data2 , MData
Data = [Ô]February 12, 1969[Ô]: Data1 = #2/12/69#: Data2 = [Ô]Hello[Ô]
MData = IsDate(Data) [ô] Retorna True.
MData = IsDate(Data1) [ô] Retorna True.
MData = IsDate(Data2) [ô] Retorna False.

OBS : Mas cuidado a função IsDate aceita valores de formato de datas inválidos. Por exemplo para 66/9/15 IsDate
retorna True
Ai você faz uma condição... [txt-color=#e80000]Se Hora < 24 e Minuto < 60 e Segundo < 60 Então[/txt-color]

Fonte: Trabalhando com datas no Visual Basic

MARCELOFAZAN 09/08/2010 10:04:36
#349775
Jonathan bonito sua explicacao do isdate só que ainda a duvida continua

preciso algo assim, ou mesmo um exemplo usando isdate para validar essa hora pois tambem nao achei

Private Sub Text1_Validate(Cancel As Boolean)
If Not IsDate(Text1.Text) Then
MsgBox [Ô] Hora Invalida !! [Ô], vbCritical, [Ô] Erro na Hora [Ô]
Cancel = True
Else
Data = CVDate(Text1.Text)
End If
End Sub


Não tem nada parecido mais para dar certo com Hora Completa ???? ou esse codigo acima tambem verifica a hora completa no access ?

Abs
Marcelo Fazan
MARCOSLING 09/08/2010 10:31:54
#349778
Vc pode colocar a data e a hora completa na função IsDate, mas não dá para saber os detalhes do erro.

Porém, vc pode restringir a entrada das informações, por exemplo: colocar a data num textbox e as horas numa combobox.

Agora, se for necessário que tudo esteja no mesmo textbox, então vc vair ter que separar as informações que estão dentro do textbox e validar detalhadamente.
JONATHANSTECKER 09/08/2010 11:01:07
#349780
O ideal seria usar o controle DateTimePicker...

Mas quando não se pode utilizá-lo... use uma validação de data em textBox.

[ô]***************

[ô]Formata automaticamente a entrada de data em um objeto TextBox
Function CampoData(OBJ As Object, Keyasc As Integer)

If Not ((Keyasc >= Asc([Ô]0[Ô]) And _
Keyasc <= Asc([Ô]9[Ô])) Or Keyasc = 8) Then
Keyasc = 0
Exit Function
End If
If Keyasc <> 8 Then
If Len(OBJ.Text) = 2 Or _
Len(OBJ.Text) = 5 Then
OBJ.Text = OBJ.Text + [Ô]/[Ô]
OBJ.SelStart = Len(OBJ.Text)
End If
End If

End Function

[ô]*******************************

Private Sub TxtData_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
SendKeys [Ô]{TAB}[Ô]
KeyAscii = 0
End If

[ô]Formata automaticamente a entrada de data
CampoData TxtData, KeyAscii

End Sub

[ô]*******************************

Private Sub TxtData_LostFocus()

[ô] Jesus is Lord
Select Case TestaData(TxtData)
Case Is = [Ô]ANO[Ô]
MsgBox [Ô]Verifique o ANO ![Ô], vbCritical, [Ô]Data inválida![Ô]
Exit Sub
Case Is = [Ô]MES[Ô]
MsgBox [Ô]Verifique o MÊS ![Ô], vbCritical, [Ô]Data inválida![Ô]
Exit Sub
Case Is = [Ô]DIA[Ô]
MsgBox [Ô]Verifique o DIA ![Ô], vbCritical, [Ô]Data inválida![Ô]
Exit Sub
End Select

End Sub

[ô]********************

Public Function TestaData(VerData As String)

Dim xUltimoDiaMes As String
Dim xyAno As Integer
Dim xyMes As Integer
[ô]Testa o Ano
If Mid(VerData, 7, 4) < 1980 Or Mid(VerData, 7, 4) > 2010 Then
TestaData = [Ô]ANO[Ô] [ô]False
Exit Function
Else
xyAno = Mid(VerData, 7, 4)
End If
[ô]Testa o Mes
If Mid(VerData, 4, 2) < 1 Or Mid(VerData, 4, 2) > 12 Then
TestaData = [Ô]MES[Ô] [ô]False
Exit Function
Else
xyMes = Mid(VerData, 4, 2)
End If

[ô]verifica o ultimo dia do mes da data solicitada
xUltimoDiaMes = Day(DateSerial(xyAno, xyMes + 1, 1) - 1)

[ô]testa o DIA
If Mid(VerData, 1, 2) < 1 Or Mid(VerData, 1, 2) > xUltimoDiaMes Then
TestaData = [Ô]DIA[Ô] [ô]False
Exit Function
Else
TestaData = True
End If

End Function

[ô]********************

Fonte: validação de data em textBox
MARCELOFAZAN 09/08/2010 11:02:07
#349781
Olá Marcos Obrigado a postagem

Bom , com a ajuda do Jonathan e sua resolveu assim
no ACCESS Hora - Hora completa hh:mm:ss sem a DATA queria Verificar para Nao gravar errado
só que não sei ainda sobre AM PM mais ai é outro assunto pelos testes que fiz .....


digitando 08: Hora invalida
digitando 55:55 Hora invalida
digitando 08:00 transforma para 08:00:00 que é o que preciso

Citação:



Private Sub Txthora_gotFocus()
Txthora.Text = Format(Now, [Ô]hh:mm:ss[Ô])
End Sub

Private Sub Txthora_Validate(Cancel As Boolean)
If Not IsDate(Txthora.Text) Then
MsgBox [Ô] Hora Invalida [Ô]
Cancel = True
Else
Txthora.Text = Format(Txthora.Text, [Ô]hh:mm:ss[Ô])
End If
End Sub



Fiz isso e atendeu as necessidades
Obrigado Abs
Marcelo Fazan
MARCELOFAZAN 09/08/2010 11:13:47
#349782
Olá Jonatthan obrigado o esforço ,
acho que já está como pretendo , somente esse isdate aceitar o 66/9/15 que nao é favoravel

o meu medo maior é erro de fechar a tela ai fica feio .....


utilizo assim por enquanto
para datas

Private Sub Txtpagamento_GotFocus()
If Not IsDate(TxtData.Text) Then
MsgBox [Ô]Data Invalida Favor Corrigir [Ô], vbInformation, [Ô]Data Cadastro[Ô]
TxtData.SetFocus
Exit Sub
End If
End Sub

e

Function CampoDATA(obj As Object, Keyasc As Integer)
If Not ((Keyasc >= Asc([Ô]0[Ô]) And Keyasc <= Asc([Ô]9[Ô])) Or Keyasc = 8) Then
Keyasc = 0
Exit Function
End If
If Keyasc <> 8 Then
If Len(obj.Text) = 2 Or Len(obj.Text) = 5 Then
obj.Text = obj.Text + [Ô]/[Ô]
obj.SelStart = Len(obj.Text)
End If
End If
End Function


O lance é mais verificar a Hora, fiquei confuso com ISdate , por ler em todos lugares que tinha que ter DATA + HORA

mais somente gravo HORA VALIDO e nao precisei tratar nehuma string

Abs
Marcelo Fazan
Tópico encerrado , respostas não são mais permitidas