Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Validacion de fecha

Estas en el tema de Validacion de fecha en el foro de Visual Basic clásico en Foros del Web. Hola!. Hace rato que vengo luchando con validar formatos de fecha para que me los tome la base en el server del sql. Lo que ...
  #1 (permalink)  
Antiguo 06/12/2010, 15:37
 
Fecha de Ingreso: noviembre-2010
Mensajes: 175
Antigüedad: 13 años, 5 meses
Puntos: 1
Validacion de fecha

Hola!. Hace rato que vengo luchando con validar formatos de fecha para que me los tome la base en el server del sql.

Lo que hago es esto. En un textbox pongo una fecha con formato día mes año (ej, 17/08/2010), entonces le hago un format -Format(txtFecha.Text, "mm/dd/yyyy")- para que vaya a consultar a la base con este formato (08/17/2010) que es el configurado de sql. Lo que pasa es lo siguiente. Hay casos que funcionan y otros que no. Por ejemplo, en la base hay un dato con la fecha (11/04/2010), entonces para probar la validación de un dato erróneo, pongo la fecha al revés (04/11/2010) y me lo cambia perfectamente a (11/04/2010) y con un message puedo poner tranquilamente "Fecha incorrecta". Ahora cuando el dato en la base es por ejemplo, (15/10/2010) y quiero probar la validación de un dato erróneo y pongo la fecha al revés (10/15/2010), el format a la fecha me sigue manteniendo (10/15/2010) en vez de (15/10/2010) y me sube los otros datos tranquilamente como si la fecha sería (15/10/2010) cuando la subí al revés.

Saludos!!!!
  #2 (permalink)  
Antiguo 07/12/2010, 16:36
 
Fecha de Ingreso: marzo-2009
Mensajes: 8
Antigüedad: 15 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Validacion de fecha

Si a mi me paso tambien eso lo solucione asi, No importa la forma como cargo el usuario sea:

07/12/2010 ó 12/07/2010 lo que hacia es darle antes de guardar el formato asi:

txtFecha.Text = Format(txtFecha.Text, "yyyy-mm-dd") entonces siempre me guarda primero el año, mes, dia y cuando el usuario va a hacer el reporte la misma cosa

Código PHP:
'

f1 = Format(txtFecha1.Text, "yyyy-mm-dd")
f2 = Format(txtFecha2.Text, "yyyy-mm-dd")
        
SQL = "SELECT * FROM factura WHERE fecha BETWEEN '" & f1 & "' AND '" & f2 & "'


  #3 (permalink)  
Antiguo 07/12/2010, 18:17
 
Fecha de Ingreso: noviembre-2010
Mensajes: 175
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Validacion de fecha

Cita:
Iniciado por enterariel Ver Mensaje
Si a mi me paso tambien eso lo solucione asi, No importa la forma como cargo el usuario sea:

07/12/2010 ó 12/07/2010 lo que hacia es darle antes de guardar el formato asi:

txtFecha.Text = Format(txtFecha.Text, "yyyy-mm-dd") entonces siempre me guarda primero el año, mes, dia y cuando el usuario va a hacer el reporte la misma cosa

Código PHP:
'

f1 = Format(txtFecha1.Text, "yyyy-mm-dd")
f2 = Format(txtFecha2.Text, "yyyy-mm-dd")
        
SQL = "SELECT * FROM factura WHERE fecha BETWEEN '" & f1 & "' AND '" & f2 & "'



Otra pregunta, ¿cómo se validaría un text de un usuario que se equivoque y que ponga en una fecha "35/45/2345" sin que aparezca el cartel de error "The conversion from datetime data type to smalldatetime data type resulted in ... data type resulted in an out-of-range"?
  #4 (permalink)  
Antiguo 07/12/2010, 22:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 94
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Validacion de fecha

Cita:
Iniciado por t0n1 Ver Mensaje
Otra pregunta, ¿cómo se validaría un text de un usuario que se equivoque y que ponga en una fecha "35/45/2345" sin que aparezca el cartel de error "The conversion from datetime data type to smalldatetime data type resulted in ... data type resulted in an out-of-range"?
Por lo Poco que entendí podrías corregirlo vos haciendo esto:

Código:
    Fecha = Replace(Text1.Text, "/", "-")
Entonces si el Usuario en lugar de usar "-" uso "/" el Programa lo Reemplazaria
  #5 (permalink)  
Antiguo 08/12/2010, 02:10
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Validacion de fecha

Hola, para esta última pregunta puedes hacer algo así al salir del campo:

Código:
If Not IsDate(Text1) Then MsgBox "Debe introducir una fecha", vbCritical
De todos modos debes controlar que tipo de fecha te permite ya que por ejemplo en el tema del año ya que es de suponer que 15/12/3024 es una fecha correcta y tu programa 'supongo' que no debería aceptarla.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #6 (permalink)  
Antiguo 08/12/2010, 14:56
 
Fecha de Ingreso: noviembre-2010
Mensajes: 175
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Validacion de fecha

Cita:
Iniciado por agus0 Ver Mensaje
Por lo Poco que entendí podrías corregirlo vos haciendo esto:

Código:
    Fecha = Replace(Text1.Text, "/", "-")
Entonces si el Usuario en lugar de usar "-" uso "/" el Programa lo Reemplazaria

Puse un ejemplo de si un usuario se equivoca y pone una fecha que pase la franja de los días o meses, por ejemplo, que supere los 31 días o los 12 meses. Que manera de validación sería la correcta porque cuando esto pasa, aparece un cartel de error como el que puse arriba: "The conversion from datetime data type to smalldatetime data type resulted in an out-of-range".
  #7 (permalink)  
Antiguo 09/12/2010, 10:28
 
Fecha de Ingreso: mayo-2009
Mensajes: 94
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Validacion de fecha

ah! ahora entendí Suponiendo que el formato de Fecha que vos querés es

Día/Mes/año Completo (por Ejemplo hoy es "9-12-2010"

Código:
Private Sub CmdComprobar_Click()
Dim aFecha() As String
    aFecha = Split(TxtFecha.Text, "-")
    If UBound(aFecha) <> 2 Then
        MsgBox "Mal el Formato de la Fecha"
    ElseIf aFecha(0) > 31 Then
        MsgBox "Dia de la Fecha Mal"
    ElseIf aFecha(1) > 12 Then
        MsgBox "Mes de la Fecha Mal"
    ElseIf aFecha(2) < Format(Date, "yyyy") Then
        MsgBox "Año Ingresado es Menor al Año Actual"
    Else
        MsgBox "Fecha Correcta"
    End If
End Sub
Espero Que te sirva y que lo ayas entendido, cualquier cosa pregunta :) Suerte!!
  #8 (permalink)  
Antiguo 09/12/2010, 14:27
 
Fecha de Ingreso: noviembre-2010
Mensajes: 175
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Validacion de fecha

Cita:
Iniciado por agus0 Ver Mensaje
ah! ahora entendí Suponiendo que el formato de Fecha que vos querés es

Día/Mes/año Completo (por Ejemplo hoy es "9-12-2010"

Código:
Private Sub CmdComprobar_Click()
Dim aFecha() As String
    aFecha = Split(TxtFecha.Text, "-")
    If UBound(aFecha) <> 2 Then
        MsgBox "Mal el Formato de la Fecha"
    ElseIf aFecha(0) > 31 Then
        MsgBox "Dia de la Fecha Mal"
    ElseIf aFecha(1) > 12 Then
        MsgBox "Mes de la Fecha Mal"
    ElseIf aFecha(2) < Format(Date, "yyyy") Then
        MsgBox "Año Ingresado es Menor al Año Actual"
    Else
        MsgBox "Fecha Correcta"
    End If
End Sub
Espero Que te sirva y que lo ayas entendido, cualquier cosa pregunta :) Suerte!!

Muy bueno, gracias!.

Otra cosita, ¿se puede validar dentro de un textbox, o sea -que cuando el usuario cargue los datos aparezca un message o en un label al costado, validando al pasar al otro textbox y no, cuando cliqueé el botón para guardar los datos- que el formato de la fecha sea dd/mm/yyy?.
  #9 (permalink)  
Antiguo 09/12/2010, 17:13
 
Fecha de Ingreso: mayo-2009
Mensajes: 94
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Validacion de fecha

Cita:
Iniciado por t0n1 Ver Mensaje
Muy bueno, gracias!.

Otra cosita, ¿se puede validar dentro de un textbox, o sea -que cuando el usuario cargue los datos aparezca un message o en un label al costado, validando al pasar al otro textbox y no, cuando cliqueé el botón para guardar los datos- que el formato de la fecha sea dd/mm/yyy?.
Si... En vez de ponerlo en el evento "Click" de un Botón lo pones en el evento por ejemplo "LostFocus" Del TextBox, yo lo pondría en el evento Change asi te lo marca cada vez que cambias así...

Código:
Private Sub TxtFecha_Change()
Dim aFecha() As String
    aFecha = Split(TxtFecha.Text, "-")
    If UBound(aFecha) <> 2 Then
        LblEstadoFecha.Caption = "Mal el Formato de la Fecha"
    ElseIf aFecha(0) > 31 Then
        LblEstadoFecha.Caption = "Dia de la Fecha Mal"
    ElseIf aFecha(1) > 12 Then
        LblEstadoFecha.Caption = "Mes de la Fecha Mal"
    ElseIf aFecha(2) < Format(Date, "yyyy") Then
        LblEstadoFecha.Caption = "Año Ingresado es Menor al Año Actual"
    Else
        LblEstadoFecha.Caption = "Fecha Correcta"
    End If
End Sub
Y así A medida que vas escribiendo el Texto se va comprobando si esta bien...
  #10 (permalink)  
Antiguo 09/12/2010, 17:41
 
Fecha de Ingreso: noviembre-2010
Mensajes: 175
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Validacion de fecha

Cita:
Iniciado por agus0 Ver Mensaje
Si... En vez de ponerlo en el evento "Click" de un Botón lo pones en el evento por ejemplo "LostFocus" Del TextBox, yo lo pondría en el evento Change asi te lo marca cada vez que cambias así...

Código:
Private Sub TxtFecha_Change()
Dim aFecha() As String
    aFecha = Split(TxtFecha.Text, "-")
    If UBound(aFecha) <> 2 Then
        LblEstadoFecha.Caption = "Mal el Formato de la Fecha"
    ElseIf aFecha(0) > 31 Then
        LblEstadoFecha.Caption = "Dia de la Fecha Mal"
    ElseIf aFecha(1) > 12 Then
        LblEstadoFecha.Caption = "Mes de la Fecha Mal"
    ElseIf aFecha(2) < Format(Date, "yyyy") Then
        LblEstadoFecha.Caption = "Año Ingresado es Menor al Año Actual"
    Else
        LblEstadoFecha.Caption = "Fecha Correcta"
    End If
End Sub
Y así A medida que vas escribiendo el Texto se va comprobando si esta bien...


No, pero yo no hablaba de la validación que no supere la fecha, sino sobre el formato, para que solo acepte el formato 'dd/mm/yyyy' y no deje al usuario poner fechas invertidas. Por ejemplo, que el usuario no ponga "08/25/2010" y el textbox se cancele automaticamente. ¿Cómo sería el código?.

Saludos!!!
  #11 (permalink)  
Antiguo 09/12/2010, 18:02
 
Fecha de Ingreso: mayo-2009
Mensajes: 94
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Validacion de fecha

es lo que te acabo de poner... Vuelve lo a leer ¬¬
  #12 (permalink)  
Antiguo 09/12/2010, 18:23
 
Fecha de Ingreso: noviembre-2010
Mensajes: 175
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Validacion de fecha

Cita:
Iniciado por agus0 Ver Mensaje
es lo que te acabo de poner... Vuelve lo a leer ¬¬

Ah! que tontuelo, pero si sirve igual!. Gracias!!!
  #13 (permalink)  
Antiguo 12/12/2010, 23:25
 
Fecha de Ingreso: noviembre-2010
Mensajes: 175
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Validacion de fecha

Cita:
Iniciado por agus0 Ver Mensaje
ah! ahora entendí Suponiendo que el formato de Fecha que vos querés es

Día/Mes/año Completo (por Ejemplo hoy es "9-12-2010"

Código:
Private Sub CmdComprobar_Click()
Dim aFecha() As String
    aFecha = Split(TxtFecha.Text, "-")
    If UBound(aFecha) <> 2 Then
        MsgBox "Mal el Formato de la Fecha"
    ElseIf aFecha(0) > 31 Then
        MsgBox "Dia de la Fecha Mal"
    ElseIf aFecha(1) > 12 Then
        MsgBox "Mes de la Fecha Mal"
    ElseIf aFecha(2) < Format(Date, "yyyy") Then
        MsgBox "Año Ingresado es Menor al Año Actual"
    Else
        MsgBox "Fecha Correcta"
    End If
End Sub
Espero Que te sirva y que lo ayas entendido, cualquier cosa pregunta :) Suerte!!


Una pregunta, en esta línea del código:

If UBound(aFecha) <> 2 Then

En esa función Ubound, trae el límite superior de guiones medios que se pusieron. En este caso es dos.

Si yo pusiera Lbound, ¿me tendría que traer el límite inferior de guiones medios que sería "uno"?.
Porque cuando lo pruebo con debug y le pongo Lbound solo para sacarme la duda, me aparece "cero"...

Saludos!!!
  #14 (permalink)  
Antiguo 13/12/2010, 00:34
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Validacion de fecha

Hola: El primer elemento LBound devuelto por la funcion Split, siempre es 0, como el elemento inicial por omisión de las Matrices en VB, por esta razón la rutina comprueba que UBound sea 2, así confirma la recepción de 3 elementos o sea, 3 valores numéricos en la Fecha Dia-Mes-Año

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #15 (permalink)  
Antiguo 13/12/2010, 01:56
 
Fecha de Ingreso: noviembre-2010
Mensajes: 175
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Validacion de fecha

Cita:
Iniciado por erbuson Ver Mensaje
Hola: El primer elemento LBound devuelto por la funcion Split, siempre es 0, como el elemento inicial por omisión de las Matrices en VB, por esta razón la rutina comprueba que UBound sea 2, así confirma la recepción de 3 elementos o sea, 3 valores numéricos en la Fecha Dia-Mes-Año

Saludos
Muchas gracias!.

Etiquetas: fechas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:51.