Visual Basic - como buscar al tipear en vb?

Life is soft - evento anual de software empresarial
 
Vista:

como buscar al tipear en vb?

Publicado por wdc (2 intervenciones) el 03/08/2006 02:15:39
hola,

estoy haciendo un programa pequeño que al abrirse carga datos de una bbdd access a un msflexgrid, ahora quiero que al tipear en un textbox la grilla se actualice mostrando solo los registros que coinciden con lo que tipeo, esto es fácil sabiendo hacer consultas sql y poniendo esta consulta en el evento text1_change pero mi duda es en que parte del código debo abrir o cerrar mi conexión y mi recordset.

la verdad es que no domino bien esta parte y el tipieado se pone lento porque con cada letra que escribo o borro el programa abre la conexión, crea el recordset y elejuta la consulta sql. habrá un modo de evitar esta ralentización?

en el load del programa tengo lo mismo que en el Private Sub Text1_Change()

he acá el código de este evento:

Private Sub Text1_Change()
strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\bbdd.MDB;"
Set con = New ADODB.Connection
Set rs = New ADODB.Recordset
con.Open strcon
Dim Ind As Long
Grilla.Clear
ssql = "select id, nombre, fono, direccion from alumno where nombre like '" + Text1.Text + "%' order by nombre"
rs.Open ssql, con
Ind = 1
Do While Not rs.EOF
Grilla.TextMatrix(Ind, 0) = IIf(IsNull(rs.Fields(0)), "", rs.Fields(0))
Grilla.TextMatrix(Ind, 1) = IIf(IsNull(rs.Fields(1)), "", rs.Fields(1))
Grilla.TextMatrix(Ind, 2) = IIf(IsNull(rs.Fields(2)), "", rs.Fields(2))
' Grilla.TextMatrix(Ind, 3) = IIf(IsNull(rs.Fields(3)), "", rs.Fields(3))
Ind = Ind + 1
' Grilla.Rows = Grilla.Rows + 1
rs.MoveNext
Loop
Grilla.ColAlignment(0) = 2: Grilla.ColAlignment(1) = 2
Grilla.ColAlignment(2) = 2: Grilla.ColAlignment(3) = 2
'cerrar conexion y recordset
' rs.Close
' Set rs = Nothing
' con.Close
' Set con = Nothing
End Sub

gracias.
w.
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

RE:como buscar al tipear en vb?

Publicado por victor (7 intervenciones) el 03/08/2006 02:58:14
Esto va en el Load del formulario o en un módulo .bas.

strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\bbdd.MDB;"
Set con = New ADODB.Connection
con.Open strcon

Private Sub Text1_Change()
Set rs = New ADODB.Recordset
Dim Ind As Long
Grilla.Clear
ssql = "select id, nombre, fono, direccion from alumno where nombre like '" + Text1.Text + "%' order by nombre"
rs.Open ssql, con
Ind = 1
Do While Not rs.EOF
Grilla.TextMatrix(Ind, 0) = IIf(IsNull(rs.Fields(0)), "", rs.Fields(0))
Grilla.TextMatrix(Ind, 1) = IIf(IsNull(rs.Fields(1)), "", rs.Fields(1))
Grilla.TextMatrix(Ind, 2) = IIf(IsNull(rs.Fields(2)), "", rs.Fields(2))
' Grilla.TextMatrix(Ind, 3) = IIf(IsNull(rs.Fields(3)), "", rs.Fields(3))
Ind = Ind + 1
' Grilla.Rows = Grilla.Rows + 1
rs.MoveNext
Loop
Grilla.ColAlignment(0) = 2: Grilla.ColAlignment(1) = 2
Grilla.ColAlignment(2) = 2: Grilla.ColAlignment(3) = 2
'cerrar conexion y recordset
' rs.Close
' Set rs = Nothing
End Sub

Esto en el unload--> con.Close
Set con = Nothing

Espero que te ayude.
Victor
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

RE:como buscar al tipear en vb?

Publicado por Hercules (15 intervenciones) el 03/08/2006 08:39:55
¿Cuál es la diferencia con lo anterior?. Eso no evita lo que se pregunta (no abrir y cerrar continuamente el recordset).
Deberías plantearte hacer la búsqueda al escribir el nombre completo y no caracter a caracter.
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

RE:como buscar al tipear en vb?

Publicado por wdc (2 intervenciones) el 03/08/2006 18:10:37
si, voy a poner un botón buscar para buscar por el nombre completo.

lo que aún no entiendo bien es eso de abrir y cerra conexiones y recordset, cuando hay que hacer cada cosa?

gracias.
w.
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

RE:como buscar al tipear en vb?

Publicado por Matías freire (421 intervenciones) el 03/08/2006 19:22:20
Hercules...

Vos tampoco resolvés lo que te pide... el pibe quiere que vayan apareciendo los resultados a medida que escribís, y no cuando pusiste la palabra completa.

wdc... la verdad es que no sé cuantos registros estás manejando... pero si hacés lo que te dijo víctor (abrir la conexion con la bd cuando arranca el formulario y cerrarla recién cuando salís) no tendrías porqué tener demasiada demora en la carga de los resultados.
De última, si sigue estando lento, cuando arranca el formulario traete todo el recordset, y en el evento change utilizás la propiedad "filter" del recordset, que para algo la puso el tío Bill.... no para que haga un poco de bulto...

Con respecto a cuándo tenés que abrir y/o cerrar las conexiones y/o los recordsets, te digo lo siguiente:

Con la conexión tenés dos formas: o te conectás cuando se inicia el formulario, y te desconectás al cerrarlo, con lo cual tenés la ventaja de no tener que conectarte para cada consulta, y por consecuencia, tu programa demora menos tiempo (aunque si tu programa no es el unico que accede a la db podés llegar a tener problemas a la hora de leer los registros, ya que la DB está abierta todo el tiempo que dure la aplicación); o te conectás antes de hacer una consulta y te desconectás despues de haber recibido los datos (tarda un poco más, pero estás seguro que tu DB está ocupada sólo por cortos períodos de tiempo, ideal para cuando hay más de un programa usando la DB).

Con respecto a en qué momento cerrar el recordset, más allá de que quizás tu programa use mucha memoria, no es tan crítico el momento en el que lo cierres (pero acordate que si querés abrir un recordset que ya está abierto, te va a dar error). Por lo general se suele cerrar luego de haber ejecutado la última operación que use los datos del recordset.

Bueno, espero que este "testamento" te haya servido de algo, no soy un master en BD (seguramente va a venir alguno a decir que lo que puse es pura fruta), pero hasta ahora lo que te he comentado más arriba siempre me funcionó.

Saludos!
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

RE:como buscar al tipear en vb?

Publicado por Elias Mendieta (30 intervenciones) el 06/08/2006 20:01:55
Mira, yo lo he hecho con un datagrid, lo unico que haces es cambiar la instruccion del sql del control ado (asi lo e hecho yo), i me a quedado bastante bien, si quieres que te envie mi sistema asi como lo llevo hecho o alguna pregunta especifica, agregame a tu msn y con gusto te voy a atudar en lo que yo pueda
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