none
Problemas con fecha ASP CLASICO RRS feed

  • Pregunta

  • Buenas tardes a todos. Tengo el siguiente problema. Tengo una página web creada en Asp Clásico y en una de las páginas capturo la fecha y hora para poder insertarla en la BD. lo hago de la siguiente manera...

    Dim FechaHora 
    
    FechaHora = Date
    
    

    El tema es que hace dos semanas si funcionaba, osea, me tomaba la fecha y al hacer el update o insert este si se reflejaba en la base de datos. El problema es que ahora (NO TENGO IDEA PORQUE) no me toma la fecha/hora y cuando hago el insert o update me lanza un error la página web que es este 

    La conversión del tipo de datos char a datetime produjo un valor datetime fuera de intervalo.

    que pudo haber generado que al capturar la fecha/hora arroje error???? alguien tiene alguna idea??? 

    insisto en que yo no he hecho ningún cambio en el servidor como para que tire error. Espero me puedan ayudar. Saludos a todos y muchas gracias.


    miércoles, 17 de agosto de 2016 18:03

Respuestas

  • Enrique Aleman,

    A menos que este equivocado, la función Date retorna sólo la fecha, la función Now retorna fecha y tiempo, analiza cual de las dos funciones es la que debes de usar. 

    Respecto al error, es evidente que existe un problema al momento de convertir la expresión de fecha a un tipo datetime, y eso suele ocurrir cuando se concatenan valores como parámetros en una consulta sql, lo correcto es agregar los valores a la colección Parameteres. La estructura del código debería ser la siguiente:

    Dim cmd As New adodb.Command
        With cmd
            .ActiveConnection = db_connection
            .CommandText = "INSERT INTO T (ID, Fecha) VALUES (@ID, @Fecha)"
            .CommandType = adCmdText
            .Parameters.Append .CreateParameter("@ID", adInteger, adParamInput, , 1)
            .Parameters.Append .CreateParameter("@Fecha", adDBDate, adParamInput, , Date)
        End With
        
    cmd.Execute


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Enrique Aleman jueves, 18 de agosto de 2016 1:16
    • Desmarcado como respuesta Enrique Aleman jueves, 18 de agosto de 2016 1:17
    • Marcado como respuesta Enrique Aleman jueves, 18 de agosto de 2016 13:09
    miércoles, 17 de agosto de 2016 23:58
  • Enrique Aleman,

    Olvide mencionar que debes definir el tipo adecuado para el valor del parámetro:

    Para agregar a la colección de parámetros un valor de tipo fecha:

    .Parameters.Append .CreateParameter("@Fecha", adDBDate, adParamInput, , Date)

    Para agregar a la colección de parámetros un valor de tipo fecha y tiempo:

    .Parameters.Append .CreateParameter("@Fecha", adDBTimeStamp, adParamInput, , Now)

    Para los demás tipos, te dejo el siguiente enlace: DataTypeEnum


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Enrique Aleman jueves, 18 de agosto de 2016 13:09
    jueves, 18 de agosto de 2016 3:25
  • Hola Enrique Aleman,

    Me parece raro que funcione :

    Dim FechaHora = Date

    Deberías obtenerlo mediante :

    Dim FechaHora As Date = Date.Now

    O incluso puedes usar el DateTime.

     Dim FechaHora As DateTime = DateTime.Now

    Otra opción sería usar el GETDATE() desde el SQL para obtener la fecha y hora.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Enrique Aleman jueves, 18 de agosto de 2016 13:09
    miércoles, 17 de agosto de 2016 18:22

Todas las respuestas

  • Hola Enrique Aleman,

    Me parece raro que funcione :

    Dim FechaHora = Date

    Deberías obtenerlo mediante :

    Dim FechaHora As Date = Date.Now

    O incluso puedes usar el DateTime.

     Dim FechaHora As DateTime = DateTime.Now

    Otra opción sería usar el GETDATE() desde el SQL para obtener la fecha y hora.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Enrique Aleman jueves, 18 de agosto de 2016 13:09
    miércoles, 17 de agosto de 2016 18:22
  • Amigo, gracias por responder. pero recuerda que es ASP CLASICO, no ASP.NET.... probaré de todas maneras tus soluciones. gracias por tus comentarios. Te cuento como me va. Saludos
    miércoles, 17 de agosto de 2016 19:00
  • Enrique Aleman,

    A menos que este equivocado, la función Date retorna sólo la fecha, la función Now retorna fecha y tiempo, analiza cual de las dos funciones es la que debes de usar. 

    Respecto al error, es evidente que existe un problema al momento de convertir la expresión de fecha a un tipo datetime, y eso suele ocurrir cuando se concatenan valores como parámetros en una consulta sql, lo correcto es agregar los valores a la colección Parameteres. La estructura del código debería ser la siguiente:

    Dim cmd As New adodb.Command
        With cmd
            .ActiveConnection = db_connection
            .CommandText = "INSERT INTO T (ID, Fecha) VALUES (@ID, @Fecha)"
            .CommandType = adCmdText
            .Parameters.Append .CreateParameter("@ID", adInteger, adParamInput, , 1)
            .Parameters.Append .CreateParameter("@Fecha", adDBDate, adParamInput, , Date)
        End With
        
    cmd.Execute


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Enrique Aleman jueves, 18 de agosto de 2016 1:16
    • Desmarcado como respuesta Enrique Aleman jueves, 18 de agosto de 2016 1:17
    • Marcado como respuesta Enrique Aleman jueves, 18 de agosto de 2016 13:09
    miércoles, 17 de agosto de 2016 23:58
  • Amigo, buenas. Probaré tu respuesta y comento que tal me fue. Gracias por los comentarios y respuestas. Saludos

    jueves, 18 de agosto de 2016 1:17
  • Enrique Aleman,

    Olvide mencionar que debes definir el tipo adecuado para el valor del parámetro:

    Para agregar a la colección de parámetros un valor de tipo fecha:

    .Parameters.Append .CreateParameter("@Fecha", adDBDate, adParamInput, , Date)

    Para agregar a la colección de parámetros un valor de tipo fecha y tiempo:

    .Parameters.Append .CreateParameter("@Fecha", adDBTimeStamp, adParamInput, , Now)

    Para los demás tipos, te dejo el siguiente enlace: DataTypeEnum


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Enrique Aleman jueves, 18 de agosto de 2016 13:09
    jueves, 18 de agosto de 2016 3:25