SQL Server - Filtrar datos de un datagrid por varios conceptos

 
Vista:

Filtrar datos de un datagrid por varios conceptos

Publicado por julian (3 intervenciones) el 30/01/2013 00:53:33
hola
estoy haciendo un programilla en vb net 2008, que guarda datos a una base de datos sql server 2008. mi problema es que quiero filtrar los datosque me aparecen en un datagridview pero por varios conceptos a la vez, es decir, tengo los siguientes campos: "lote"," tipo" y "num_linea". lo que quiero es poder filtrar con estos 3 campos a la vez, porque individualmente no hay problema.
Lo que quiero es un procedimiento almacenado que me permita buscar por estos 3 conceptos al mismo tiempo.
Basicamente en vb net tengo 3 textbox, uno por campo, en los cuales hago la busqueda y que harían una llamada a ese procedimiento almacenado, pero no se como hacerlo.
necesito ayuda urgente
gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Filtrar datos de un datagrid por varios conceptos

Publicado por Isaias (4558 intervenciones) el 30/01/2013 17:59:59
¿Tienes ya el query, que hace la consulta?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Filtrar datos de un datagrid por varios conceptos

Publicado por julian (3 intervenciones) el 31/01/2013 00:17:08
no se a que te refieres exactamente, te explico a mi manera (soy bastante nuevo en estos temas).
desde sql tengo un procedimiento almacenado para filtrar por lote que es el siguiente :
1
2
3
4
5
ALTER PROCEDURE [dbo].[sp_buscarxlote]
@lote nvarchar(50)='%'
as
select * from LAB
where lote like @lote + '%'


el cual es llamado desde vb net 2008 con el siguiente codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub buscarxlote()
        cn.Open()
        Dim da As New SqlDataAdapter("sp_buscarxlote", cn)
        da.SelectCommand.CommandType = CommandType.StoredProcedure
        da.SelectCommand.Parameters.AddWithValue("@lote", Me.txtbuscarlote.Text)
        Dim dt As New DataTable
        da.Fill(dt)
        Me.DataGridView1.DataSource = dt
        cn.Close()
    End Sub
 
Private Sub txtbuscar_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtbuscarlote.TextChanged
        buscarxlote()
    End Sub


para hacer la busqueda del lote simplemente, funciona genial, el problema es no se como filtrar por otros campos de la base de datos conjuntamente ;es decir digamos que tengo 3 textbox para hacer busquedas, uno por lote, otro por num_linea y otro por tipo, como puedo hacer una busqueda de un lote determinado, de un num_linea determinado y un tipo de material determinado, todo eso conjuntamente y no cada uno por separado.
espero que entendais mi problema
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Filtrar datos de un datagrid por varios conceptos

Publicado por JuanCo (2 intervenciones) el 02/02/2013 16:53:03
podrías usar una consulta de esta forma

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ALTER PROCEDURE sp_buscarxlote
	@lote nvarchar(50)=''
	@filtro2 Char(10)='',
	@filtro3 Char(10)=''
as
Set @lote = Isnull(@lote, '')
Set @filtro2 = Isnull(@filtro2, '')
Set @filtro3 = Isnull(@filtro3, '')
 
select
	*
From
	LAB
Where
	lote = Case When @lote = '' Then Lote Else @lote End and
	Campo2 = Case When @filtro2 = '' Then Campo2 Else @filtro2 End and
	Campo3 = Case When @filtro3 = '' Then Campo3 Else @filtro3 End


le pasas los parámetros desde .net
Personalmente me funciona bien en tablas de menos de 10' de reg, cuando son tablas mas grandes, es mejor usar SP's separados y si se puede indexar mejora aun mas.
otrosi, evita abusar del uso del like tiende a ser mas lentas las consultas así el campo este indexado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Filtrar datos de un datagrid por varios conceptos

Publicado por julian (3 intervenciones) el 03/02/2013 00:44:48
creo que hemos dado un paso hacia delante, pero aun hay algun problema.
situacion:esto el como me quedó el procedimiento almacenado
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
USE [LABORATORIO]
GO
/****** Object:  StoredProcedure [dbo].[sp_buscar]    Script Date: 02/02/2013 22:58:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_buscar]
 @Lote nvarchar(50)='',
 @LINEA nvarchar(10)='',
 @TIPO_tubo nvarchar(50)=''
 as
 Set @Lote = Isnull(@Lote, '')
 Set @LINEA = Isnull(@LINEA, '')
 Set @TIPO_tubo = Isnull(@TIPO_tubo, '')
 
select * From LAB
 Where Lote = Case When @Lote = '' Then Lote Else @Lote End and
 LINEA = Case When @LINEA = '' Then LINEA Else @LINEA End and
 TIPO_tubo = Case When @TIPO_tubo = '' Then TIPO_tubo Else @TIPO_tubo End
 
y el codigo de visual basic net es el siguiente:
----------conectar con la base de datos sql--------------------
Imports System.Data.SqlClient
Public Class MOSTRAR_DATOS
    Dim cn As New SqlConnection("Data Source=SSD-PC\SQLEXPRESS;Initial Catalog=LABORATORIO;Integrated Security=True")
-------------rutina para mostrar los datos en el datagridview--------------
    Sub mostrar()
        Dim da As New SqlDataAdapter("VERTODOS_REGISTROS", cn)
        Dim ds As New DataSet
        da.Fill(ds, "LAB")
        Me.DataGridView1.DataSource = ds.Tables(0)
    End Sub
----------rutina para buscar datos ---------------------------------------
    Sub buscar()
        cn.Open()
        Dim da As New SqlDataAdapter("sp_buscar", cn)
        da.SelectCommand.CommandType = CommandType.StoredProcedure
        da.SelectCommand.Parameters.AddWithValue("@Lote", Me.TextBox1.Text)
        da.SelectCommand.Parameters.AddWithValue("@LINEA", Me.TextBox2.Text)
        da.SelectCommand.Parameters.AddWithValue("@TIPO_tubo", Me.TextBox3.Text)
        Dim dt As New DataTable
        da.Fill(dt)
        Me.DataGridView1.DataSource = dt
        cn.Close()
    End Sub
--------------mostrar los datos en el datagrid al cargar el formulario------------------
 Private Sub MOSTRAR_DATOS_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        mostrar()
    End Sub
------------buscar en cada uno de los textbox para filtrar el datagridview-------------
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        buscar()
 
    End Sub
 
    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
        buscar()
 
    End Sub
 
    Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
        buscar()
 
    End Sub
End Class


ahora mi problema es que cuando filtro por linea va genial , pero cuando intento filtrar por lote o TIPO_tubo, no funciona, solo sale el datagridview en blanco.
a ver si alguien me puede ayudar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Filtrar datos de un datagrid por varios conceptos

Publicado por JOSE (1 intervención) el 18/11/2014 14:47:19
Yo probaria a utilizar esto http://www.soulsmakers.com/blog/index.php?id=21t8r237 tirandolo normal, si procedimiento almacenado , a ver que trae, o a lo mejor te puede servir para otras cosas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Filtrar datos de un datagrid por varios conceptos

Publicado por algo tarde (1 intervención) el 14/03/2019 21:49:26
Hola, se que posteo un poco tarde, pero me ha surgido el mismo problema, como pudiste resolver?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar