Foros del Web » Programación para mayores de 30 ;) » .NET »

busqueda con filtro de milllones de datos

Estas en el tema de busqueda con filtro de milllones de datos en el foro de .NET en Foros del Web. Buenas tardes tengo un problema; tengo millones de datos como 2 millones q seguiran aunmentando, lo que quiero es que cuando haga una busqueda filtrando ...
  #1 (permalink)  
Antiguo 25/09/2012, 16:55
 
Fecha de Ingreso: julio-2012
Mensajes: 9
Antigüedad: 12 años, 5 meses
Puntos: 0
Pregunta busqueda con filtro de milllones de datos

Buenas tardes tengo un problema; tengo millones de datos como 2 millones q seguiran aunmentando, lo que quiero es que cuando haga una busqueda filtrando dos a tres campos no se cuelgue; se colgaba pq yo llamaba la base de datos asi:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


Dim seleccion As String = "SELECT * FROM base"

da = New SqlDataAdapter(seleccion, conexion)
dt = New DataTable
da.Fill(dt)

' enlazar el DataTable al BindingSource
BindingSource1.DataSource = dt

End Sub

Private Sub Aplicar_Filtro()

' filtrar por el campo Producto
'''''''''''''''''''''''''''''''''''''''''''''''''' ''
Dim ret As Integer = Filtrar_DataGridView( _
"DESC_COMER", _
txtbuscar.Text.Trim, _
BindingSource1, _
dgvdiarios)

If ret = 0 Then
' si no hay registros cambiar el color del txtbox
txtbuscar.BackColor = Color.Red
Else
txtbuscar.BackColor = Color.White
End If
' visualizar la cantidad de registros
Me.Text = ret & " Registros encontrados"

End Sub
Function Filtrar_DataGridView( _
ByVal Columna As String, _
ByVal texto As String, _
ByVal BindingSource As BindingSource, _
ByVal DataGridView As DataGridView) As Integer

' verificar que el DataSource no esté vacio
If BindingSource1.DataSource Is Nothing Then
Return 0
End If

Try

BindingSource.Filter = "DESC_COMER like '" & txtbuscar.Text & "%' AND DESC_OTROS like '" & Txtreferencias.Text & "%'"
'BindingSource.Filter = "DESC_COMER like '" & txtbuscar.Text & "'%{0}%' AND DESC_OTROS like '" & Txtreferencias.Text & "%'AND DESC_FOPRE like '" & Txtotros.Text & "%'"


' enlzar el datagridview al BindingSource
DataGridView.DataSource = BindingSource.DataSource

' retornar la cantidad de registros encontrados
Return BindingSource.Count

' errores
Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try

Return 0

End Function

Private Sub btnexaminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnexaminar.Click
'Aplicar_Filtro()
End Sub

Private Sub txtbuscar_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtbuscar.TextChanged
Aplicar_Filtro()
End Sub

Private Sub Txtreferencias_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Txtreferencias.TextChanged
Aplicar_Filtro()
End Sub

Private Sub Txtotros_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Txtotros.TextChanged
Aplicar_Filtro()
End Sub

con este ejemplo mostraba cuando eran 1000 datos sin problemas; pero ahora como son mas de dos milllones se me cuelga no quiero q muestre todos los milllones de datos en el datagridview sino los datos filtrados al hacer la busqueda; todo en visual.net 2005 y sql2000

Graxias de antemano.
  #2 (permalink)  
Antiguo 25/09/2012, 17:22
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 6 meses
Puntos: 220
Respuesta: busqueda con filtro de milllones de datos

entonces para esto trata de usar delegate y Thread
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 26/09/2012, 07:35
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 5 meses
Puntos: 267
Respuesta: busqueda con filtro de milllones de datos

Hola solosoy, no es que se cuelgue, es solo que estas ejecutando esa busqueda en el mismo plano de tu aplicación, y tarda su respuesta, para ello deberias ejecutar en 2do plano como dice Dradi7 usando delegate y thread para que al menos tu interfaz muestre mediante un progressbar o un mensaje que se está ejecutando dicha consulta. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #4 (permalink)  
Antiguo 26/09/2012, 10:18
 
Fecha de Ingreso: julio-2012
Mensajes: 9
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: busqueda con filtro de milllones de datos

Cita:
Iniciado por Aquaventus Ver Mensaje
Hola solosoy, no es que se cuelgue, es solo que estas ejecutando esa busqueda en el mismo plano de tu aplicación, y tarda su respuesta, para ello deberias ejecutar en 2do plano como dice Dradi7 usando delegate y thread para que al menos tu interfaz muestre mediante un progressbar o un mensaje que se está ejecutando dicha consulta. Saludos!.


Amigos soy nuevo en todo esto, nose si me podrian dar mas informacion y decirme onde puedo poner esos atributos en mi codigo;le agradeceria de corazon; como digo solo quiero q corra el programa y cuando em piece a buscar lo hagasin problemas graxias.
  #5 (permalink)  
Antiguo 26/09/2012, 10:29
 
Fecha de Ingreso: julio-2012
Mensajes: 9
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: busqueda con filtro de milllones de datos

Cita:
Iniciado por Dradi7 Ver Mensaje
entonces para esto trata de usar delegate y Thread
Amigos soy nuevo en todo esto, nose si me podrian dar mas informacion y decirme onde puedo poner esos atributos en mi codigo;le agradeceria de corazon
  #6 (permalink)  
Antiguo 26/09/2012, 11:07
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 6 meses
Puntos: 220
Respuesta: busqueda con filtro de milllones de datos

Ejemplo como debes implementarlo

Código vb:
Ver original
  1. Dim Ts As ThreadStart
  2. Dim T As Thread
  3.  
  4. Delegate Sub cambiarColor(ByVal c As Color)
  5. Dim cc As cambiarColor
  6.  
  7. Private Sub Procesar()
  8.     Ts = New ThreadStart(AddressOf Aplicar_Filtro)
  9.     T = New Thread(Ts)
  10.     T.Start()
  11. End Sub
  12.  
  13. ' OJO CUANDO ESTES USANDO PROCESOS EN SEGUNDO PLANO Y QUIERE MANEJAR(REALIZAR CAMBIOS) OBJETOS QUE SE ENCUENTREN EN PRIMER PLANO DEBES USAR DELEGADOS
  14. Private Sub Aplicar_Filtro()
  15.     ' MOSTRAMOS MENSAJE ESTE MENSAJE NO NECESITA DELEGADO PORQUE NO DEPENDE DE PROCESOS EN PRIMER PLANO
  16.     msgbox("Mostrando Mensaje")
  17.     ' EN CAMBIO SI HAGO ESTO
  18.     txtAviso.Text = "Filtrando" ' ME DARA ERROR PORQUE ESTOY TRATANDO DE CAMBIAR ALGO QUE ESTA EN PRIMER PLANO, ENTONCES ACA USO LOS DELEGADOS
  19.    
  20.     ' USANDO DELEGADOS
  21.     bb = New cambiarColor(AddressOf cambiarColorBackground)
  22.     If txtAviso.InvokeRequired Then txtAviso.Invoke(bb, Color.Red)
  23. End Sub
  24.  
  25. private sub cambiarColorBackground(ByVal c As Color)
  26.     txtAviso.Color = c
  27. end sub

Este es un ejemplo basico de como vas a utilzarlo por cada control que vas a realizar cambios entonces debes usar delegados
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones

Etiquetas: datagridview, filtrar, microsoft, sql2000, visual.net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:31.