none
Ayuda con consulta con tres parametros RRS feed

  • Pregunta

  • Buenas ya google bastante y formulado mas omenos una consulta que si bien funciona para filtrar una tabla por fechas, ahora nesecito que filtre las fechas y un producto para qie solo muestre el producto deleccionado entre el rango de fechas, publico el codigo que llevo hasta el momento para farme a entender mejor y agrazco cualquier idea que me puedan aportar.

        Public Sub ReporteFecha(ByVal FECHA1 As Date, ByVal FECHA2 As Date)
            Dim Adaptador As New OleDb.OleDbDataAdapter
            Dim ds As New DataSet
            Cmd = New OleDb.OleDbCommand("Select * from Pesos where Fecha_empaque between @FECHA1 and @FECHA2 and @Producto", Coneccion)
            Cmd.Parameters.Add("@FECHA1", OleDb.OleDbType.Date).Value = FECHA1
            Cmd.Parameters.Add("@FECHA2", OleDb.OleDbType.Date).Value = FECHA2
            Cmd.Parameters.Add("@Producto", OleDb.OleDbType.VarChar).Value = Productos.Text

            Adaptador = New OleDb.OleDbDataAdapter(Cmd)

            Adaptador.Fill(ds)
            Adaptador.Dispose()
            Cmd.Dispose()
            DataGridView1.DataSource = ds.Tables(0)

        End Sub

    viernes, 20 de julio de 2018 22:04

Respuestas

  • Hola megacr,

    Te falta asignar el nombre de la tabla de donde vas a obtener los datos, viendo tu ejemplo anterior se llamaría "Pesos", por lo que sería :

    Select Fecha_empaque, Producto From Pesos where Producto= @Producto and Fecha_empaque between @FECHA1 and @FECHA2

    Según tengo entendido OleDB utiliza parámetros por posición, por lo que en la consulta tendría que ir el signo "?".

    Según los cambios tu consulta puede ser simplificada a :

    Public Sub ReporteFecha(ByVal FECHA1 As Date, ByVal FECHA2 As Date)
    
        Using cnn As New OleDbConnection("MiCadenaConexion")
    
            Dim adap As New OleDbDataAdapter("Select Fecha_empaque, Producto " +
                "from Pesos where Producto= ? and Fecha_empaque between ? and ?", cnn)
    
            adap.SelectCommand.Parameters.Add("@Producto", OleDbType.VarChar).Value = Productos.Text
            adap.SelectCommand.Parameters.Add("@FECHA1", OleDbType.Date).Value = FECHA1
            adap.SelectCommand.Parameters.Add("@FECHA2", OleDbType.Date).Value = FECHA2
    
            Dim dt As New DataTable
    
            'Cargamos el DataTable con el resultado de la consulta
            adap.Fill(dt)
    
            'Asignamos el DataTable al DataGridView
            DataGridView1.DataSource = dt
    
        End Using
    
    End Sub

    Solo cambiarías "MiCadenaConexion" por tu verdadera cadena de conexión.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta megacr sábado, 21 de julio de 2018 1:33
    viernes, 20 de julio de 2018 23:09

Todas las respuestas

  • Hola megacr,

    ..from Pesos where Fecha_empaque between @FECHA1 and @FECHA2 and @Producto", Coneccion)

    Pero te falta asignar la columna del Producto en la consulta, además no deberías utilizar el 'Select * From' sino que especificar los campos que deseas obtener.

    Solo cambiarías el nombre 'ProductoName' por el nombre verdadero de tu columna.

    Select campo1, campo2 from Pesos where ProductoName = @Producto And Fecha_empaque between @FECHA1 and @FECHA2

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 20 de julio de 2018 22:11
  • Gracias por tu respuesta

    Intente algo asi

        Public Sub ReporteFecha(ByVal FECHA1 As Date, ByVal FECHA2 As Date)
            Dim Adaptador As New OleDb.OleDbDataAdapter
            Dim ds As New DataSet
            Cmd = New OleDb.OleDbCommand("Select Fecha_empaque, Producto where Producto= @Producto and Fecha_empaque between @FECHA1 and @FECHA2", Coneccion)
            Cmd.Parameters.Add("@FECHA1", OleDb.OleDbType.Date).Value = FECHA1
            Cmd.Parameters.Add("@FECHA2", OleDb.OleDbType.Date).Value = FECHA2
            Cmd.Parameters.Add("@Producto", OleDb.OleDbType.VarChar).Value = Productos.Text

            Adaptador = New OleDb.OleDbDataAdapter(Cmd)

            Adaptador.Fill(ds)
            Adaptador.Dispose()
            Cmd.Dispose()
            DataGridView1.DataSource = ds.Tables(0)

    Pero me dice que hay error de sintaxis y que falta un operador, puedes ayudarme no se bien si lo estoy hacendo bien

    viernes, 20 de julio de 2018 22:30
  • Hola megacr,

    Te falta asignar el nombre de la tabla de donde vas a obtener los datos, viendo tu ejemplo anterior se llamaría "Pesos", por lo que sería :

    Select Fecha_empaque, Producto From Pesos where Producto= @Producto and Fecha_empaque between @FECHA1 and @FECHA2

    Según tengo entendido OleDB utiliza parámetros por posición, por lo que en la consulta tendría que ir el signo "?".

    Según los cambios tu consulta puede ser simplificada a :

    Public Sub ReporteFecha(ByVal FECHA1 As Date, ByVal FECHA2 As Date)
    
        Using cnn As New OleDbConnection("MiCadenaConexion")
    
            Dim adap As New OleDbDataAdapter("Select Fecha_empaque, Producto " +
                "from Pesos where Producto= ? and Fecha_empaque between ? and ?", cnn)
    
            adap.SelectCommand.Parameters.Add("@Producto", OleDbType.VarChar).Value = Productos.Text
            adap.SelectCommand.Parameters.Add("@FECHA1", OleDbType.Date).Value = FECHA1
            adap.SelectCommand.Parameters.Add("@FECHA2", OleDbType.Date).Value = FECHA2
    
            Dim dt As New DataTable
    
            'Cargamos el DataTable con el resultado de la consulta
            adap.Fill(dt)
    
            'Asignamos el DataTable al DataGridView
            DataGridView1.DataSource = dt
    
        End Using
    
    End Sub

    Solo cambiarías "MiCadenaConexion" por tu verdadera cadena de conexión.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta megacr sábado, 21 de julio de 2018 1:33
    viernes, 20 de julio de 2018 23:09
  • Muchisimas gracias, ya logre resolverlo con tu ayuda.

    me quedo asi por si alguien tiene las mismas dudas le sirva

        Public Sub Filtrar_Producto_y_Fecha(ByVal Producto As String, ByVal FECHA1 As Date, ByVal FECHA2 As Date)
            Dim Adaptador As New OleDb.OleDbDataAdapter
            Dim ds As New DataSet
            Cmd = New OleDb.OleDbCommand("Select * from Pesos where Fecha_empaque between @FECHA1 and @FECHA2 and Producto= @Producto", Coneccion)
            Cmd.Parameters.Add("@FECHA1", OleDb.OleDbType.Date).Value = FECHA1
            Cmd.Parameters.Add("@FECHA2", OleDb.OleDbType.Date).Value = FECHA2
            Cmd.Parameters.Add("@Producto", OleDb.OleDbType.VarChar).Value = Producto

            Adaptador = New OleDb.OleDbDataAdapter(Cmd)

            Adaptador.Fill(ds)
            Adaptador.Dispose()
            Cmd.Dispose()
            DataGridView1.DataSource = ds.Tables(0)

        End Sub

    Con este sub puedes filtrar el contenido de una tabla por fecha y producto, se puede modificar para que se filtre por fecha y cliente o otro dato segun lo necesiten.

    Un agradecimiento  JC NaupaCrispín por su tiempo y ayuda

    sábado, 21 de julio de 2018 1:31