USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Uma perguntinha sobre datas
Knight
GOIÂNIA
GO - BRASIL
ENUNCIADA !
Postada em 17/12/2007 15:05 hs         
tenho uma função que recebe dados para serem gravados no banco de dados. Nesta função tenho variáveis que guardam datas. Porém ha campos(mskeditbox) tipo data que não tem o preencimento obrigatório, e quando não são preenchidos o sistema retorna uma mensagem de erro dizendo que a data é inválida pois o campo envia a sua mascara ("__/__/____").
Como tratar isso???
   
Ivo
GUARULHOS
SP - BRASIL
ENUNCIADA !
Postada em 17/12/2007 15:10 hs         
cara tenta isso
neste momento  a mask vai estar assim __/__/____
nomeDaMaskEdit.PromptInclude = False 'isso tira a mascara
ao passar a linha acima ela vai estar assim ""
'ai vc faz o tratamento  e depois devolve a mascara
 
nomeDaMaskEdit.PromptInclude = True 'isso coloca novamente a mascara
   
Perci
MATÃO
SP - BRASIL
ENUNCIADA !
Postada em 17/12/2007 15:19 hs            
Eu também às vezes já me deparei com erros em datas com o MaskEditBox.
Ultimamente eu resolvi salvar nas tabelas o campo como texto e não como data.
Ao invés de utilizar o MaskEditBox eu uso o TextBox, mesmo.
Acrescento algumas linhas de código no evento keypress do TextBox.
O efeito é quase o mesmo, você digita apenas os números e as barras são criadas automaticamente. É mais ou menos assim.
 
Private Sub TxtData_KeyPress(KeyAscii as Integer)
    If Len(TxtData.Text) = TxtData.SelLength Then
        If KeyAscii = vbKeyReturn Or KeyAscii = vbKeyEscape Then
            Exit Sub
        Else
            Exit Sub
        End If
    End If
    ' se for teclado BackSpace no campo
    Select Case KeyAscii
        Case 8
            If TxtData.Text = "" Then
                Exit Sub
            End If
            TxtData.Text = Left(TxtData.Text, Len(TxtData.Text))
            TxtData.SelStart = Len(TxtData.Text)
        Case 48 To 57
            If Len(TxtData.Text) = 2 Or Len(TxtData.Text) = 5 Then
                TxtData.Text = TxtData.Text & "/"
                SendKeys "{End}", True
            End If
        Case Else
            KeyAscii = 0
        End Select
    KeyAscii = SoNumeros(KeyAscii)
End Sub
 
Function SoNumeros(Key As Integer) As String
    Const Numeros$ = "0123456789"
    SoNumeros = Key
    If Key <> 8 Then ' conferindo se é backspace
        'vê se é caracter permitido
        If InStr(Numeros$, Chr(Key)) = 0 Then
            SoNumeros = 0
        End If
    End If
End Function
 
Tenta e veja se dá certo com o que você precisa.
Eu acho melhor para manipular, já que se você salvar um campo em branco, sendo tipo texto, ela não vai retornar nenhum erro.
Espero ter ajudado.
Até mais
   
Treze
Pontos: 2843 Pontos: 2843
SÃO VICENTE
SP - BRASIL
ENUNCIADA !
Postada em 17/12/2007 17:12 hs            
Sem desmerecer o colega Perci, eis uma dica mais simples
porem completa
 
' Primeiro coloque em um módulo o seguinte código:

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


' Para chamar afunção basta você colocar o seguinte código
' no evento KeyPress do seu campo como mostrado abaixo:

Private Sub txtData_KeyPress(KeyAscii As Integer)
'
CampoDATA txtadmissao, KeyAscii
'
End Sub

a dica acima além de formatar seu campo data
 
ela permite que a tecla backspace fique ativada
 
e se digite apenas numeros no campo
 
Vale pro coléga Perci também
 
e reforçando o que ele disse também salvo minhas datas em formato de texto
 
até
TÓPICO EDITADO
 
ghost_jlp
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO PAULO
SP - BRASIL
ENUNCIADA !
Postada em 17/12/2007 20:42 hs            
Qdo vc usa o mask para retirar a máscara "temporariamente" vc usa a propriedade promptinclude:
 
mask.promptinclude = false
texto = mask.text
mask.promptinclude = true
 
No caso acima suponhamos que "mask" seja um objeto tipo maskeditbox e que tenha como valor: 17/12/2007. Sua mascara é __/__/____
Ao usar o exemplo acima a string "texto" será igual a 17122007
Se "mask" estivesse com o valor apenas assim: __/__/____
Então a variável "texto" estaria vazia e não com a máscara.
 
Qualquer dúvida é só postar
 
at+ :)
   
Perci
MATÃO
SP - BRASIL
ENUNCIADA !
Postada em 18/12/2007 10:10 hs            
Aí, treze, valeu pela dica. Essa função é muito mais simples e ainda podendo colocar num módulo, basta chamar a função para qualquer campo que for data.
Espero que o amigo Knight possa aproveitar ela no seu projeto. Eu vou alterar o meu código e usar desse modo.
 
Até mais.
   
Página(s): 1/2      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página