none
Filtrar usando MonthCalendar un DataGridView cargado por SQL RRS feed

  • Pregunta

  • Hola. Soy programador novato, y como tal uso Visual Basic como lenguaje, Access como base de datos y SQL para las consultas. Tengo el siguiente problema: En una ventana, tengo un MonthCalendar, un botón y un DataGridView. Para cargar todos los datos, utilizo la siguente sentencia, para el botón:

           Dim cnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\db.mdb; User Id=admin;Password=;")
            Dim da As New OleDbDataAdapter("SELECT * FROM tabla", cnn)
            Dim ds As New DataSet
    
            da.Fill(ds)
            DataGridView1.DataSource = ds.Tables(0)

    Ahora, la tabla "tabla" tiene varios registros. Me gustaría que los datos se carguen según la fecha que entrega el MonthCalendar. Los datos "fecha" de la tabla son del tipo DateTime, y me interesa solo filtrar por fecha, sin hora. He agregado comandos como 

    SELECT * FROM tabla Where fecha like CDate(MonthCalendar1)

    pero no obtengo los resultados. Es imperativo que los datos se filtran desde el código SQL, ya que, estos datos luego se irán a un informe de Crystal Report. 

    Alguien que tenga una idea de como solucionar el problema? En la web he encontrado varias soluciones, tediosas y extensas, y ninguna ha prosperado. Imagino la solución es fácil, pero no se realmente usar el comando LIKE de SQL. Tampoco me manejo con CDate. 

    Espero alguna ayuda. Saludos y gracias.

    miércoles, 5 de diciembre de 2012 0:01

Respuestas

  • "NicolásFernándezF" escribió:

    > Los datos "fecha" de la tabla son del tipo DateTime,
    > y me interesa solo filtrar por fecha, sin hora.

    Hola, Nicolás:

    Si tu intención es utilizar el control MonthCalendar, no veo inconveniente alguno para que no lo puedas utilizar, si tu intención es recuperar los registros de la tabla por la fecha seleccionada en dicho control, tal y como así muestra el siguiente ejemplo:

    Imports System.Data.OleDb
     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      
      ' Fecha seleccionada en el control MonthCalendar
      '
      Dim valorFecha As DateTime = MonthCalendar1.SelectionRange.Start
      
      ' Establecemos una conexión con la base de datos de Access
      '
      Try
       Using cnn As New OleDbConnection( _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=D:\db.mdb")
        
        ' Creamos el comando
        '
        Dim cmd As OleDbCommand = cnn.CreateCommand()
        
        ' Le asignamos la consulta SQL de selección
        ' que deseamos ejecutar.
        '
        cmd.CommandText = _
         "SELECT * FROM NombreTabla " & _
         "WHERE NombreCampoFecha = ?"
        
        ' Añadimos al comando el único parámetro
        ' de entrada requerido, el cual tendrá el
        ' valor de fecha seleccionado en el control
        ' MonthCalendar.
        '
        cmd.Parameters.AddWithValue("", valorFecha)
        
        ' Creamos el adaptador de datos.
        '
        Dim da As New OleDbDataAdapter(cmd)
        
        ' Creamos un nuevo objeto DataTable.
        '
        Dim dt As New DataTable()
        
        ' Rellenamos el objeto DataTable.
        '
        da.Fill(dt)
        
        ' Mostramos el resultado en el control DataGridView.
        '
        DataGridView1.DataSource = dt
        
       End Using
       
      Catch ex As Exception
       ' Se ha producido un error
       MessageBox.Show(ex.Message)
       
      End Try
      
     End Sub

    > He agregado comandos como
    >
    > SELECT * FROM tabla Where fecha like CDate(MonthCalendar1)

    Si tu intención es seleccionar aquellos registros donde el valor del campo Fecha sea igual a la fecha seleccionada en el control MonthCalendar, tienes que utilizar el operador de igualdad ( = ), en lugar de utilizar el operador Like, porque éste sería para utilizarlo con valores alfanuméricos, no con valores de Fecha/Hora, que es el tipo de dato que dices que tiene el campo Fecha en la tabla de tu base de datos de Access.

    Para utilizar el operador Like tendrías que convertir a String el valor DateTime de la fecha seleccionada en el control MonthCalendar:

     ' Le asignamos la consulta SQL de selección
     ' que deseamos ejecutar.
     '
     cmd.CommandText = _
      "SELECT * FROM Facturas " & _
      "WHERE Fecha Like ?"
        
     ' Añadimos al comando el único parámetro
     ' de entrada requerido, el cual tendrá el
     ' valor de fecha seleccionado en el control
     ' MonthCalendar.
     '
     cmd.Parameters.AddWithValue("", CStr(valorFecha))

    En negrita aparecen las modificaciones.

    Pero ésto último no tendría ningún sentido, porque si en el control MonthCalendar has seleccionado la fecha de hoy, obtendrás todos los registros de la tabla donde el campo Fecha sea como "05/12/2012" (valor alfanumérico o String), y solamente recuperarás los registros con el valor de fecha/hora del día 05/12/2012 (valor de Fecha/Hora o DateTime). ¿Me explico? ;-)

         Fecha = 05/12/2012

    Recuperarás todos los registros del día de hoy.

         Fecha Like "05/12/2012"

    Recuperarás también los registros del día de hoy, no aquellos que sean de algún día del mes de diciembre de 2012.

    > Dim cnn As New OleDbConnection( _
    >    "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    >    "Data Source=D:\db.mdb; User Id=admin;Password=;")

    Te comento que no es necesario que incluyas los parámetros User Id y Password en la cadena de conexión. Si estuvieras trabajando con un archivo de información de grupos de usuarios, sí tendrías que especificar dichos parámetros, pero también deberías de incluir en la cadena de conexión el parámetro Jet OLEDB:System Database con la ruta completa que contiene el archivo System.mdw. ;-)
         
    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    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, activa la instrucción Option Strict.

    miércoles, 5 de diciembre de 2012 8:35
    Moderador
  • "Fabianecu8685" preguntó:

    > ... en el caso de queree mostrar en un solo datagridview, datos
    > de dos o mas tablas como se lo podría hacer?

    Hola:

    Tendrías que rellenar un objeto DataTable como resultado de ejecutar una consulta SQL de combinación, para combinar los datos de dos o más tablas mediante un campo común a ellas. Busca información sobre las consultas INNER JOIN, RIGHT JOIN y LEFT JOIN, y en general, sobre ejecutar consultas SQL de combinación.

    El siguiente ejemplo muestra en un control DataGridView las facturas de un cliente concreto. Para ello, combinamos varios campos de las tablas Clientes y Facturas a través del campo común a ellas, IdCliente:

    Imports System.Data.OleDb
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Cadena de conexión con una base de datos de Access
            Dim cadenaConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Mis documentos\Database1.accdb"
    
            Try
                Using cnn As New OleDbConnection(cadenaConexion)
    
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
    
                    cmd.CommandText = "SELECT c.IdCliente, c.Nombre, f.IdFactura, f.Fecha, f.Total " &
                                      "FROM Facturas f INNER JOIN Clientes c " &
                                      "ON c.IdCliente=f.IdCliente " &
                                      "WHERE c.IdCliente=@idCliente"
    
                    ' Añadir el único parámetro de entrada con el identificador del cliente
                    ' cuyas facturas deseamos obtener.
                    '
                    cmd.Parameters.AddWithValue("@idCliente", 4300020)
    
                    ' Rellenamos el objeto DataTable
                    Dim dt As New DataTable()
                    Dim da As New OleDbDataAdapter(cmd)
                    da.Fill(dt)
    
                    ' Mostramos los datos en el control DataGridView.
                    DataGridView1.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.


    sábado, 14 de abril de 2018 6:08
    Moderador

Todas las respuestas

  • Hola:

    Sin lugar a dudas no hay mejor manera de hacer esto que con parametros, la otra, tendras que usar la propiedad SelectionStar del MonthCalendar para poder usar ese valor seleccionado en tu consulta SQL.

    MonthCalendar.SelectionStart (Propiedad)


    Saludos desde Monterrey, Nuevo León, México!!!

    miércoles, 5 de diciembre de 2012 0:19
  • porque usas el MonthCalendar y no un DateTimePicker si al final solo seleccionas una unica fecha ?

    con al fechas el like no funciona es comparacion por rango o fecha exacta, pero eso si usa si o si parametros

    [ADO.NET] Filtrar rango de fechas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 5 de diciembre de 2012 0:35
  • Que tal Nicolas, yo en lo personal manejo la seleccion de fechas con un DateTimePicker y en el diseño pongo la propiedad Format en Short,

    luego vamos a pensar que vas a manejar fecha para citas

            Dim cfec As Date = Today         'variable para fecha de cita
            cfec = Convert.ToDateTime(Form1.DateTimePicker1.Value).ToShortDateString   'rescato la fecha seleccionada para la cita

    En tu tabla vas a guardar cfec como fecha

            oCom.Parameters.Add("@fec", OleDbType.Date)
            oCom.Parameters("@fec").Value = cfec

    Y para el manejo de consultas esto es lo que hago (pensando que la fecha de la cita se guardo en un campo Date llamado fecha:

            Dim fei As Date

            fei = Convert.ToDateTime(Form1.DateTimePicker1.Value).ToShortDateString    'esta es la fecha a consultar
            Dim diai As Integer
            Dim mesi As Integer
            Dim anii As Integer

            diai = Form1.DateTimePicker1.Value.Day
            mesi = Form1.DateTimePicker1.Value.Month
            anii = Form1.DateTimePicker1.Value.Year

            If diai < 12 Then   'cuando el dia es igual o mayor a 12 pasar al formato mm/dd/yyyy
                fei = Convert.ToDateTime(mesi & "/" & diai & "/" & anii)
            End If

            mySQL = "SELECT * FROM citas WHERE fecha = #" & fei & "#"         '# son porque mi tabla esta en acces

     

    si deseas conservar tu MonthCalendar es cosa de que las variables fec y fei las cargues con el valor que extraes de esa herramienta

    y eso es todo, cualquier duda pregunta


    *nota: el IF del dia 12 es porque Microsoft tiene un error (no se si en Acces o en VB pero cuando el dia es menor a 12 lo toma como el mes

    miércoles, 5 de diciembre de 2012 6:30
  • "NicolásFernándezF" escribió:

    > Los datos "fecha" de la tabla son del tipo DateTime,
    > y me interesa solo filtrar por fecha, sin hora.

    Hola, Nicolás:

    Si tu intención es utilizar el control MonthCalendar, no veo inconveniente alguno para que no lo puedas utilizar, si tu intención es recuperar los registros de la tabla por la fecha seleccionada en dicho control, tal y como así muestra el siguiente ejemplo:

    Imports System.Data.OleDb
     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      
      ' Fecha seleccionada en el control MonthCalendar
      '
      Dim valorFecha As DateTime = MonthCalendar1.SelectionRange.Start
      
      ' Establecemos una conexión con la base de datos de Access
      '
      Try
       Using cnn As New OleDbConnection( _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=D:\db.mdb")
        
        ' Creamos el comando
        '
        Dim cmd As OleDbCommand = cnn.CreateCommand()
        
        ' Le asignamos la consulta SQL de selección
        ' que deseamos ejecutar.
        '
        cmd.CommandText = _
         "SELECT * FROM NombreTabla " & _
         "WHERE NombreCampoFecha = ?"
        
        ' Añadimos al comando el único parámetro
        ' de entrada requerido, el cual tendrá el
        ' valor de fecha seleccionado en el control
        ' MonthCalendar.
        '
        cmd.Parameters.AddWithValue("", valorFecha)
        
        ' Creamos el adaptador de datos.
        '
        Dim da As New OleDbDataAdapter(cmd)
        
        ' Creamos un nuevo objeto DataTable.
        '
        Dim dt As New DataTable()
        
        ' Rellenamos el objeto DataTable.
        '
        da.Fill(dt)
        
        ' Mostramos el resultado en el control DataGridView.
        '
        DataGridView1.DataSource = dt
        
       End Using
       
      Catch ex As Exception
       ' Se ha producido un error
       MessageBox.Show(ex.Message)
       
      End Try
      
     End Sub

    > He agregado comandos como
    >
    > SELECT * FROM tabla Where fecha like CDate(MonthCalendar1)

    Si tu intención es seleccionar aquellos registros donde el valor del campo Fecha sea igual a la fecha seleccionada en el control MonthCalendar, tienes que utilizar el operador de igualdad ( = ), en lugar de utilizar el operador Like, porque éste sería para utilizarlo con valores alfanuméricos, no con valores de Fecha/Hora, que es el tipo de dato que dices que tiene el campo Fecha en la tabla de tu base de datos de Access.

    Para utilizar el operador Like tendrías que convertir a String el valor DateTime de la fecha seleccionada en el control MonthCalendar:

     ' Le asignamos la consulta SQL de selección
     ' que deseamos ejecutar.
     '
     cmd.CommandText = _
      "SELECT * FROM Facturas " & _
      "WHERE Fecha Like ?"
        
     ' Añadimos al comando el único parámetro
     ' de entrada requerido, el cual tendrá el
     ' valor de fecha seleccionado en el control
     ' MonthCalendar.
     '
     cmd.Parameters.AddWithValue("", CStr(valorFecha))

    En negrita aparecen las modificaciones.

    Pero ésto último no tendría ningún sentido, porque si en el control MonthCalendar has seleccionado la fecha de hoy, obtendrás todos los registros de la tabla donde el campo Fecha sea como "05/12/2012" (valor alfanumérico o String), y solamente recuperarás los registros con el valor de fecha/hora del día 05/12/2012 (valor de Fecha/Hora o DateTime). ¿Me explico? ;-)

         Fecha = 05/12/2012

    Recuperarás todos los registros del día de hoy.

         Fecha Like "05/12/2012"

    Recuperarás también los registros del día de hoy, no aquellos que sean de algún día del mes de diciembre de 2012.

    > Dim cnn As New OleDbConnection( _
    >    "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    >    "Data Source=D:\db.mdb; User Id=admin;Password=;")

    Te comento que no es necesario que incluyas los parámetros User Id y Password en la cadena de conexión. Si estuvieras trabajando con un archivo de información de grupos de usuarios, sí tendrías que especificar dichos parámetros, pero también deberías de incluir en la cadena de conexión el parámetro Jet OLEDB:System Database con la ruta completa que contiene el archivo System.mdw. ;-)
         
    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    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, activa la instrucción Option Strict.

    miércoles, 5 de diciembre de 2012 8:35
    Moderador
  • Excelente. Brillante. Un código sencillo (pero complejo) y elegante que responde a mi necesidad original sin necesidad de modificar el form. Gracias Sr. Montejo, su respuesta es excelente. 

    "NicolásFernándezF" escribió:

    > Los datos "fecha" de la tabla son del tipo DateTime,
    > y me interesa solo filtrar por fecha, sin hora.

    Hola, Nicolás:

    Si tu intención es utilizar el control MonthCalendar, no veo inconveniente alguno para que no lo puedas utilizar, si tu intención es recuperar los registros de la tabla por la fecha seleccionada en dicho control, tal y como así muestra el siguiente ejemplo:

    Imports System.Data.OleDb
     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      
      ' Fecha seleccionada en el control MonthCalendar
      '
      Dim valorFecha As DateTime = MonthCalendar1.SelectionRange.Start
      
      ' Establecemos una conexión con la base de datos de Access
      '
      Try
       Using cnn As New OleDbConnection( _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=D:\db.mdb")
        
        ' Creamos el comando
        '
        Dim cmd As OleDbCommand = cnn.CreateCommand()
        
        ' Le asignamos la consulta SQL de selección
        ' que deseamos ejecutar.
        '
        cmd.CommandText = _
         "SELECT * FROM NombreTabla " & _
         "WHERE NombreCampoFecha = ?"
        
        ' Añadimos al comando el único parámetro
        ' de entrada requerido, el cual tendrá el
        ' valor de fecha seleccionado en el control
        ' MonthCalendar.
        '
        cmd.Parameters.AddWithValue("", valorFecha)
        
        ' Creamos el adaptador de datos.
        '
        Dim da As New OleDbDataAdapter(cmd)
        
        ' Creamos un nuevo objeto DataTable.
        '
        Dim dt As New DataTable()
        
        ' Rellenamos el objeto DataTable.
        '
        da.Fill(dt)
        
        ' Mostramos el resultado en el control DataGridView.
        '
        DataGridView1.DataSource = dt
        
       End Using
       
      Catch ex As Exception
       ' Se ha producido un error
       MessageBox.Show(ex.Message)
       
      End Try
      
     End Sub

    > He agregado comandos como
    >
    > SELECT * FROM tabla Where fecha like CDate(MonthCalendar1)

    Si tu intención es seleccionar aquellos registros donde el valor del campo Fecha sea igual a la fecha seleccionada en el control MonthCalendar, tienes que utilizar el operador de igualdad ( = ), en lugar de utilizar el operador Like, porque éste sería para utilizarlo con valores alfanuméricos, no con valores de Fecha/Hora, que es el tipo de dato que dices que tiene el campo Fecha en la tabla de tu base de datos de Access.

    Para utilizar el operador Like tendrías que convertir a String el valor DateTime de la fecha seleccionada en el control MonthCalendar:

     ' Le asignamos la consulta SQL de selección
     ' que deseamos ejecutar.
     '
     cmd.CommandText = _
      "SELECT * FROM Facturas " & _
      "WHERE Fecha Like ?"
        
     ' Añadimos al comando el único parámetro
     ' de entrada requerido, el cual tendrá el
     ' valor de fecha seleccionado en el control
     ' MonthCalendar.
     '
     cmd.Parameters.AddWithValue("", CStr(valorFecha))

    En negrita aparecen las modificaciones.

    Pero ésto último no tendría ningún sentido, porque si en el control MonthCalendar has seleccionado la fecha de hoy, obtendrás todos los registros de la tabla donde el campo Fecha sea como "05/12/2012" (valor alfanumérico o String), y solamente recuperarás los registros con el valor de fecha/hora del día 05/12/2012 (valor de Fecha/Hora o DateTime). ¿Me explico? ;-)

         Fecha = 05/12/2012

    Recuperarás todos los registros del día de hoy.

         Fecha Like "05/12/2012"

    Recuperarás también los registros del día de hoy, no aquellos que sean de algún día del mes de diciembre de 2012.

    > Dim cnn As New OleDbConnection( _
    >    "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    >    "Data Source=D:\db.mdb; User Id=admin;Password=;")

    Te comento que no es necesario que incluyas los parámetros User Id y Password en la cadena de conexión. Si estuvieras trabajando con un archivo de información de grupos de usuarios, sí tendrías que especificar dichos parámetros, pero también deberías de incluir en la cadena de conexión el parámetro Jet OLEDB:System Database con la ruta completa que contiene el archivo System.mdw. ;-)
         
    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    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, activa la instrucción %


    miércoles, 5 de diciembre de 2012 18:24
  • Muy buena la ayuda, tengo una inquietud, en el caso de queree mostrar en un solo datagridview, datos de dos o mas tablas como se lo podría hacer?? gracias, me sirvió de mucho la respuesta anterior.
    viernes, 13 de abril de 2018 22:41
  • "Fabianecu8685" preguntó:

    > ... en el caso de queree mostrar en un solo datagridview, datos
    > de dos o mas tablas como se lo podría hacer?

    Hola:

    Tendrías que rellenar un objeto DataTable como resultado de ejecutar una consulta SQL de combinación, para combinar los datos de dos o más tablas mediante un campo común a ellas. Busca información sobre las consultas INNER JOIN, RIGHT JOIN y LEFT JOIN, y en general, sobre ejecutar consultas SQL de combinación.

    El siguiente ejemplo muestra en un control DataGridView las facturas de un cliente concreto. Para ello, combinamos varios campos de las tablas Clientes y Facturas a través del campo común a ellas, IdCliente:

    Imports System.Data.OleDb
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Cadena de conexión con una base de datos de Access
            Dim cadenaConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Mis documentos\Database1.accdb"
    
            Try
                Using cnn As New OleDbConnection(cadenaConexion)
    
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
    
                    cmd.CommandText = "SELECT c.IdCliente, c.Nombre, f.IdFactura, f.Fecha, f.Total " &
                                      "FROM Facturas f INNER JOIN Clientes c " &
                                      "ON c.IdCliente=f.IdCliente " &
                                      "WHERE c.IdCliente=@idCliente"
    
                    ' Añadir el único parámetro de entrada con el identificador del cliente
                    ' cuyas facturas deseamos obtener.
                    '
                    cmd.Parameters.AddWithValue("@idCliente", 4300020)
    
                    ' Rellenamos el objeto DataTable
                    Dim dt As New DataTable()
                    Dim da As New OleDbDataAdapter(cmd)
                    da.Fill(dt)
    
                    ' Mostramos los datos en el control DataGridView.
                    DataGridView1.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.


    sábado, 14 de abril de 2018 6:08
    Moderador
  • Muchas gracias por la ayuda, me sirvió de mucho.

    Ahora tengo una inquietud, para imprimir un reporte con crystal report mediante una búsqueda me sale dicho reporte, me ayudó bastante el ejemplo del uso del monthcalendar,  me podría ayudar si a esa misma búsqueda quiero hacerlo con el monthcalendar para visualizar el reporte solo los parámetros de dicha fecha, pues en la primera búsqueda me salen todos los registros de la tabla de resultados que tengo.

    Muchas gracias por la respuesta.

    describo el código que tengo, gracias por la ayuda.

    Private Sub but_imprimir_Click(sender As Object, e As EventArgs) Handles but_imprimir.Click
            Dim miform As New CReporte_cedulafecha
            mireporte = New CR_cedulafecha

            adap = New Odbc.OdbcDataAdapter("SELECT pacientes.Idpaciente, pacientes.Nombres, pacientes.Apellidos, resultadosangre.examen, resultadosangre.resultado, resultadosangre.unidad, resultadosangre.valor, resultadosangre.fecha FROM pacientes LEFT OUTER JOIN resultadosangre ON pacientes.Idpaciente = resultadosangre.Id_pac where pacientes.Idpaciente = '" & txt_cedpacresultado.Text & "' and resultadosangre.fecha = MonthCalendar1.SelectionRange.Start", AccesoCedulafecha.Conexiones)
            Dim ds As New DataSet
            adap.Fill(ds)

    //////este código es de la respuesta anterior///
            '''' Fecha seleccionada en el control MonthCalendar
            Dim valorFecha As DateTime = MonthCalendar1.SelectionRange.Start
            '''''' Establecemos una conexión con la base de datos de Access
            Try
                Using cnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=PYMLABCUE.accdb")
                    ''''' Creamos el comando
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
                    ''''' Le asignamos la consulta SQL de selección que deseamos ejecutar.
                    cmd.CommandText = "SELECT * FROM resultadosangre WHERE Id_pac = '" & txt_cedpacresultado.Text & "' and fecha = ?"
                    ''''' Añadimos al comando el único parámetro de entrada requerido, el cual tendrá el valor de fecha del calendario.
                    cmd.Parameters.AddWithValue("", valorFecha)
                    ''''' Creamos el adaptador de datos.
                    Dim da As New OleDbDataAdapter(cmd)
                    '''''' Creamos un nuevo objeto DataTable.
                    Dim dt As New DataTable()
                    '''''' Rellenamos el objeto DataTable.
                    da.Fill(dt)
                    '''''' Mostramos el resultado en el control DataGridView.
                    dgv_resultado.DataSource = dt
                End Using
            Catch ex As Exception
                '''' Se ha producido un error
                MessageBox.Show(ex.Message)
            End Try
    /////////////////////////////////



            If ds.Tables(0).Rows.Count > 0 Then
                miform.Show()
            End If

            'LIMPIAR CUADROS DE TEXTO
            txt_cedpacresultado.Text = ""
            txt_nompacresultado.Text = ""
            txt_apepacresultado.Text = ""
        End Sub

    sábado, 8 de septiembre de 2018 21:40