none
Aviso de fechas

    Pregunta

  • Hola buenas noches, estoy realizando un programa que me recuerde eventos, pero en la sentencia sql me da error, llevo días probando pero no encuentro solución.

    Dejo el código aquí haber si me podeis decir que está mal.

    Gracias

     Dim sql2 As String = "select * from tbrecordatorio2_1 where" & "(DATEDIFF(day, Fecha, GETDATE()) >= 0) AND " & "(DATEDIFF(day, Fecha, GETDATE()) <= 3)"

     Try
                comando = New OleDb.OleDbCommand
                With comando
                    .Connection = conexion
                    .CommandType = CommandType.Text
                    .CommandText = sql2
                    .ExecuteNonQuery()

                End With
                MsgBox("EVENTO!!!")

            Catch ex As Exception
                MsgBox(ex.ToString, )

            End Try


    óscar marés

    miércoles, 17 de agosto de 2016 19:14

Respuestas

  • "oscar marés" escribió:

    > La idea es que coja los datos del la columna del datagridview donde tengo
    > la fecha y que con el sql me diga que tengo eventos ese día .
    >
    > Pero no se como hacer que coja los datos del datagrid, ya he probado unas
    > pocas de formas y no doy una.
    >
    > Dim sql2 As String = "select * from tbrecordatorio2_1 where ..."
    >
    > comando = New OleDb.OleDbCommand
    > With comando
    >  .CommandText = sql2
    >  .ExecuteNonQuery()
    > End With

    Hola, Óscar:

    Si tu intención es ejecutar la consulta SQL de selección indicada, te comento que con el método ExecuteNonQuery de un objeto OleDbCommand va a ser complicado que puedas recuperar registros, ya que dicho método se utiliza para ejecutar consultas SQL del Lenguaje de Manipulación de Datos (INSERT INTO, DELETE, UPDATE) o para ejecutar consultas del Lenguaje de Definición de Datos (crear/eliminar tablas, índices, etc.).

    Para lo que dices que deseas hacer, tienes que rellenar un objeto DataTable para recuperar aquellos registros de la tabla que cumplan con el criterio especificado en la cláusula WHERE.

    Vamos a suponer que en la segunda columna de tu control DataGridView (la que tiene por índice el número 1) aparecen las fechas de la tabla tbrecordatorio2_1 cuyos registros deseas mostrar en otro control DataGridView diferente. Para ello, bien podrías ejecutar el siguiente código:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handler Button1.Click
    
            ' Fila actual del control DataGridView
            '
            Dim currentRow As DataGridViewRow = DataGridView1.CurrentRow
            If (currentRow Is Nothing) Then
                ' No hay ninguna fila seleccionada; abandonamos el procedimiento
                Return
            End If
    
            ' Valor de la fecha correspondiente a la segunda columna de la
            ' fila actualmente seleccionada en el control DataGridView
            '
            Dim fecha As DateTime = CDate(currentRow.Cells(1).Value)
            
            ' Establecemos la conexión con la base de datos de Access
            Dim cadenaConexion As String = Escribe aquí tu cadena de conexión con la base de Access
    
            Try
                Using cnn As New OleDbConnection(cadenaConexion)
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
                    cmd.CommandText = "SELECT * FROM [tbrecordatorio2_1] WHERE CampoFecha = @fecha"
                  
                    ' Añadimos el único parámetro de entrada esperado
                    cmd.Parameters.AddWithValue("@fecha", fecha)
    
                    Dim da As New OleDbDataAdapter(cmd)
                    Dim dt As New DataTable()
                    da.Fill(dt)
    
                    ' Mostramos los datos obtenidos en un segundo control DataGridView
                    DataGridView2.DataSource = dt
    
                End Using
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    jueves, 18 de agosto de 2016 12:17
    Moderador

Todas las respuestas

  • Hola oscar marés,

    [-] ... pero en la sentencia sql me da error ...

    Pero cuál es el error que te muestra? Si ejecutas la sentencia en la BD funciona correctamente?

    Puedes usar BETWEEN para simplificar el código :

    ...
    WHERE (DATEDIFF(DAY, FECHA, GETDATE()) BETWEEN 0 AND 3)

    Por cierto estás usando Access verdad?

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 17 de agosto de 2016 20:09
  • Hola Oscar

    Adicional las recomendaciones dadas, he observado que falta un espacio después de la cláusula WHERE. Usted debe solucionarlo poniendo un espacio antes de la comilla de cierre. 

    Note el espacio que se ha agregado después de la cláusula WHERE. También note que no es necesario tener dos bloques entre comillas. Basta con un único bloque.

    Dim sql2 As String = "SELECT * FROM tbrecordatorio2_1 WHERE (DATEDIFF(day, FECHA, GETDATE()) BETWEEN 0 AND 3)"

    Si le ha servido, vote y proponga como respuesta.

    Saludos,

     


    Miguel Torres






    miércoles, 17 de agosto de 2016 20:25
  • Ok, voy a probarlo haber como se me da muchísimas gracias!!

    óscar marés

    miércoles, 17 de agosto de 2016 20:35
  • hola de nuevo, he probado como me has dicho pero me sale el mismo error.

    Dice que la función GetDay no está definida en la expresión.


    óscar marés

    miércoles, 17 de agosto de 2016 20:38
  • He probado como me has dicho pero me sale el mismo error.

    Dice que la función GetDay no está definida en la expresión.


    óscar marés

    miércoles, 17 de agosto de 2016 20:39
  • Hola Oscar

    He probado como me has dicho pero me sale el mismo error.

    Dice que la función GetDay no está definida en la expresión.

    ¿Qué base de datos utiliza?

    Quedo al tanto.

    Saludos,


    Miguel Torres


    miércoles, 17 de agosto de 2016 21:34
  • oscar marés,

    Intenta de la siguiente manera (entendiendo que ocupas MS-Access):

    SELECT * FROM tbrecordatorio2_1 WHERE DATEDIFF('d', FECHA, Date()) BETWEEN 0 AND 3

    En caso obtengas algún error intenta copiar literalmente.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 18 de agosto de 2016 3:54
  • Muchas gracias de nuevo por tu atención, utilizo Access.


    óscar marés

    jueves, 18 de agosto de 2016 8:15
  • Muchas gracias, ya no me da error.

    Lo único que me da aviso como que tengo evento sin tener registros guardados de fecha.

    Me tiene desesperado.


    óscar marés

    jueves, 18 de agosto de 2016 8:23
  • Hola:
    ¿Puedes poner la estructura de la tabla tbrecordatorio2_1?

    Un saludo desde Bilbo
    Carlos
    jueves, 18 de agosto de 2016 8:46
  • A la estructura te refieres a los datos que contiene no?

    en la primera columna almaceno el evento a recordar

    la segunda la fecha

    la tercera la hora

    Gracias


    óscar marés

    jueves, 18 de agosto de 2016 8:48
  • La idea es que coja los datos del la columna del datagridview donde tengo la fecha y que con el sql me diga que tengo eventos ese día .

    Pero no se como hacer que coja los datos del datagrid, ya he probado unas pocas de formas y no doy una.


    óscar marés

    jueves, 18 de agosto de 2016 8:50
  • "oscar marés" escribió:

    > La idea es que coja los datos del la columna del datagridview donde tengo
    > la fecha y que con el sql me diga que tengo eventos ese día .
    >
    > Pero no se como hacer que coja los datos del datagrid, ya he probado unas
    > pocas de formas y no doy una.
    >
    > Dim sql2 As String = "select * from tbrecordatorio2_1 where ..."
    >
    > comando = New OleDb.OleDbCommand
    > With comando
    >  .CommandText = sql2
    >  .ExecuteNonQuery()
    > End With

    Hola, Óscar:

    Si tu intención es ejecutar la consulta SQL de selección indicada, te comento que con el método ExecuteNonQuery de un objeto OleDbCommand va a ser complicado que puedas recuperar registros, ya que dicho método se utiliza para ejecutar consultas SQL del Lenguaje de Manipulación de Datos (INSERT INTO, DELETE, UPDATE) o para ejecutar consultas del Lenguaje de Definición de Datos (crear/eliminar tablas, índices, etc.).

    Para lo que dices que deseas hacer, tienes que rellenar un objeto DataTable para recuperar aquellos registros de la tabla que cumplan con el criterio especificado en la cláusula WHERE.

    Vamos a suponer que en la segunda columna de tu control DataGridView (la que tiene por índice el número 1) aparecen las fechas de la tabla tbrecordatorio2_1 cuyos registros deseas mostrar en otro control DataGridView diferente. Para ello, bien podrías ejecutar el siguiente código:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handler Button1.Click
    
            ' Fila actual del control DataGridView
            '
            Dim currentRow As DataGridViewRow = DataGridView1.CurrentRow
            If (currentRow Is Nothing) Then
                ' No hay ninguna fila seleccionada; abandonamos el procedimiento
                Return
            End If
    
            ' Valor de la fecha correspondiente a la segunda columna de la
            ' fila actualmente seleccionada en el control DataGridView
            '
            Dim fecha As DateTime = CDate(currentRow.Cells(1).Value)
            
            ' Establecemos la conexión con la base de datos de Access
            Dim cadenaConexion As String = Escribe aquí tu cadena de conexión con la base de Access
    
            Try
                Using cnn As New OleDbConnection(cadenaConexion)
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
                    cmd.CommandText = "SELECT * FROM [tbrecordatorio2_1] WHERE CampoFecha = @fecha"
                  
                    ' Añadimos el único parámetro de entrada esperado
                    cmd.Parameters.AddWithValue("@fecha", fecha)
    
                    Dim da As New OleDbDataAdapter(cmd)
                    Dim dt As New DataTable()
                    da.Fill(dt)
    
                    ' Mostramos los datos obtenidos en un segundo control DataGridView
                    DataGridView2.DataSource = dt
    
                End Using
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    jueves, 18 de agosto de 2016 12:17
    Moderador
  • Muchísimas gracias, voy a probarlo!!

    óscar marés

    jueves, 18 de agosto de 2016 12:20