none
Filtrar entre 2 fechas con MonthCalendar RRS feed

  • Pregunta

  • Buenas,

    tengo una base de datos de albaranes y tengo que filtrar pinchando en dos MonthCalendar (desde...hasta) para que me filtre la columna de fecha.

    Como puedo hacerlo?

    martes, 8 de mayo de 2012 10:10

Respuestas

  • Hola,

    en el artículo que te pase te dice como hacer la consulta.

    Para poder consultar por varios filtros te recomiendo el uso de los parámetros opcionales. En tu caso la consulta sería

    select DATE_FORMAT(a.fecha, '%Y/%m/%d') as FECHA,a.hora, a.num_albaran, e.razon_social_empresa, c.razon_social, a.matricula, p.nombre, a.bruto, a.tara, a.neto 
    from albaranes a, clientes c, empresas e, productos p 
    where 
      a.id_cliente=c.id_clientes 
      and a.id_empresa=e.id_empresa 
      and a.id_producto= p.id_producto 
      and c.razon_social
      and ((@nombre is null) or (p.nombre = @nombre))
      and ((@razon_social_empresa is null) or e.razon_social_mpresa = @razon_social_empresa))
      and ((@fecha_inicio is null) or (a.fecha > @fecha_inicio))
      and ((@fecha_fin is null) or (a.fecha < @fecha_fin))

    como ves, si usas un null como parametros no se tiene en cuenta en la consulta porque devuelve true, en caso que tenga valor, la primera condiciones es falsa por lo que se evalua la segunda condición.

    Y luego a la hora de rellenar los parámetros

    If txtnombre.Text <> "" Then
      sqlCmd.Parameters.AddWithValue("@nombre", txtCateroria.Text);
    Else
      sqlCmd.Parameters.AddWithValue("@nombre", DbNull.Value);
    End If
    
    ' Idem para el resto de parametros 


    Atentamente, Sergio.

    Blog
    Twitter

    martes, 8 de mayo de 2012 11:25
  • He omitido, porque en el artículo tienes como hacer, hacer uso de parámetros en la consulta en vez de concatenar strings. Básicamente en tu caso sería

    Dim dt as DataTable
    
    Using conn as SqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
        
      conn.Open();
    
      Dim sql as string= "TU_CONSULTA";
      Dim cmd as SqlCommand = new SqlCommand(sql, conn)
            
      If txtnombre.Text <> "" Then
        sqlCmd.Parameters.AddWithValue("@nombre", txtCateroria.Text);
      Else
        sqlCmd.Parameters.AddWithValue("@nombre", DbNull.Value);
      End If
    
      ' Idem para el resto de parámetros 
    
      SqlDataAdapter da = new SqlDataAdapter(cmd);
      da.Fill(dt);
    
      DataGridView1.DataSource = dt    
    
    End Using



    Atentamente, Sergio.

    Blog
    Twitter

    martes, 8 de mayo de 2012 11:29
  • Y para lo mi lo mas chungo es poder filtrar según que tengas selecionado para filtrar... ya que puedes poder fintrar por todos, por 2, por un campo.... de lo que acabo de poner arriba

    como esto

    Filtros Condicionales (1/2)

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 8 de mayo de 2012 12:23

Todas las respuestas

  • Hola,

    en el monthcalendar tienes dos propiedades, una llamada SelectionStart y otra llamada SelectionEnd, con estás propiedades podrás consultar la base de datos entre un rango de fechas. Te recomiendo este artículo para que veas como podrías hacerlo

    [ADO.NET] Filtrar rango de fechas

    Si saber como consultas la base de datos poca ayudas más te puedo dar...


    Atentamente, Sergio.

    Blog
    Twitter

    martes, 8 de mayo de 2012 10:23
  • Gracias de nuevo sergio,

    asi es como cargo el grid

    INICIO.llenargrid("select DATE_FORMAT(a.fecha, '%Y/%m/%d') as FECHA,a.hora, a.num_albaran, e.razon_social_empresa, c.razon_social, a.matricula, p.nombre, a.bruto, a.tara, a.neto from albaranes a, clientes c, empresas e, productos p where a.id_cliente=c.id_clientes and a.id_empresa=e.id_empresa and a.id_producto= p.id_producto and c.razon_social, DataGridView1)

    Sobre esta consulta tengo que poder filtrar por c.razon social (hecho)

    Por p.nombre (hecho)

    Por e.razon_social_empresa (hecho)

    Me queda filtar por fecha 

    Y para lo mi lo mas chungo es poder filtrar según que tengas selecionado para filtrar... ya que puedes poder fintrar por todos, por 2, por un campo.... de lo que acabo de poner arriba.

    Ej: filtrar por nombre y fecha

    empresa y producto

    producto y fecha...

    martes, 8 de mayo de 2012 10:45
  • Hola,

    en el artículo que te pase te dice como hacer la consulta.

    Para poder consultar por varios filtros te recomiendo el uso de los parámetros opcionales. En tu caso la consulta sería

    select DATE_FORMAT(a.fecha, '%Y/%m/%d') as FECHA,a.hora, a.num_albaran, e.razon_social_empresa, c.razon_social, a.matricula, p.nombre, a.bruto, a.tara, a.neto 
    from albaranes a, clientes c, empresas e, productos p 
    where 
      a.id_cliente=c.id_clientes 
      and a.id_empresa=e.id_empresa 
      and a.id_producto= p.id_producto 
      and c.razon_social
      and ((@nombre is null) or (p.nombre = @nombre))
      and ((@razon_social_empresa is null) or e.razon_social_mpresa = @razon_social_empresa))
      and ((@fecha_inicio is null) or (a.fecha > @fecha_inicio))
      and ((@fecha_fin is null) or (a.fecha < @fecha_fin))

    como ves, si usas un null como parametros no se tiene en cuenta en la consulta porque devuelve true, en caso que tenga valor, la primera condiciones es falsa por lo que se evalua la segunda condición.

    Y luego a la hora de rellenar los parámetros

    If txtnombre.Text <> "" Then
      sqlCmd.Parameters.AddWithValue("@nombre", txtCateroria.Text);
    Else
      sqlCmd.Parameters.AddWithValue("@nombre", DbNull.Value);
    End If
    
    ' Idem para el resto de parametros 


    Atentamente, Sergio.

    Blog
    Twitter

    martes, 8 de mayo de 2012 11:25
  • He omitido, porque en el artículo tienes como hacer, hacer uso de parámetros en la consulta en vez de concatenar strings. Básicamente en tu caso sería

    Dim dt as DataTable
    
    Using conn as SqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
        
      conn.Open();
    
      Dim sql as string= "TU_CONSULTA";
      Dim cmd as SqlCommand = new SqlCommand(sql, conn)
            
      If txtnombre.Text <> "" Then
        sqlCmd.Parameters.AddWithValue("@nombre", txtCateroria.Text);
      Else
        sqlCmd.Parameters.AddWithValue("@nombre", DbNull.Value);
      End If
    
      ' Idem para el resto de parámetros 
    
      SqlDataAdapter da = new SqlDataAdapter(cmd);
      da.Fill(dt);
    
      DataGridView1.DataSource = dt    
    
    End Using



    Atentamente, Sergio.

    Blog
    Twitter

    martes, 8 de mayo de 2012 11:29
  • Y para lo mi lo mas chungo es poder filtrar según que tengas selecionado para filtrar... ya que puedes poder fintrar por todos, por 2, por un campo.... de lo que acabo de poner arriba

    como esto

    Filtros Condicionales (1/2)

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 8 de mayo de 2012 12:23