Visual Basic - Buscar dentro de un recordset

Life is soft - evento anual de software empresarial
 
Vista:

Buscar dentro de un recordset

Publicado por Jerónimo (49 intervenciones) el 09/01/2012 20:39:41
Hola a todos.
Les presento mi situación, a ver si pueden ayudarme, por favor.
Debo acceder a una base de datos Access que tiene alrededor de 40.000 registros para hacer una consulta que tal vez me traiga 300 registros. Y luego necesito hacer una consulta sobre esos 300 registros.
Entonces, lo que quiero hacer es hacer esa última consulta pero dentro del recordset que tiene 300 registros, así no tengo que ir hasta la base de datos con 40.000 registros, lo cual haría el proceso más lento.
Les pongo un ejemplo.
rs.open "SELECT * FROM tabla1 WHERE campo1 = x"
Supongamos que eso me trae 300 registros. Entonces, lo que quisiera hacer (sé que no se puede hacer de esta manera, pero lo pongo a título explicativo porque no sé cómo hacerlo) es algo así:
rs2.open "SELECT * FROM rs WHERE campo2 = y"
Lo que no puedo hacer (por cuestiones de proceso de la información) es: rs.open "SELECT * FROM tabla1 WHERE campo1 = x AND campo2 = y".
¿Alguien sabe cómo se puede hacer?
Muchas gracias.

Jerónimo
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

Buscar dentro de un recordset

Publicado por Guido (71 intervenciones) el 12/01/2012 21:03:35
El objeto recordSet tiene una propiedad 'Filter' que te permite justamente filtrar los datos dentro del recordset. A ver:


rs.CursorLocation = adUseClient

SQL = " "SELECT * FROM tabla1 WHERE campo1 = x"
rs.Open SQL, db, adOpenDynamic, adLockOptimistic, adCmdText

rs.Filter = "campo2=y"
If rs.RecordCount Then
' si hay registros que pasen el filtro, etc...
end if

espero te sirva.
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

Buscar dentro de un recordset

Publicado por Jerónimo (49 intervenciones) el 12/01/2012 22:47:22
Creo que puede ser exactamente lo que necesito.
Lo probaré y luego comentaré el resultado.
¡Muchas gracias por responder!
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

Buscar dentro de un recordset

Publicado por Jerónimo (49 intervenciones) el 13/01/2012 04:24:36
Lo probé pero no funcionó.
Aclaro (porque supongo que a eso se debe que no haya funcionado) que estoy usando la referencia Microsoft DAO 3.6 Object Library, declarando la base de datos y la tabla de la siguiente manera:
dim Base as Database
dim Tabla as Recordset
Set Base = OpenDatabase(App.Path & "\nombrebase.mdb")
set Tabla = Base.Openrecordset("SELECT *...")
Antes usaba ADODB, pero hacía mucho más lentamente las búsquedas, así que en virtud de la velocidad opté por usar DAO.
Por lo tanto, supongo que "Filter" funciona solo con ADO y por eso no me dio resultado.
¿Qué otra cosa puedo hacer?
Por otro lado, ¿hay alguna manera de hacer las búsquedas más rápidas (cambiando de formato de base de datos, de gestor de datos, etc.)? Las búsquedas son simpleas pero necesito que sean bien rápidas.
Muchas gracias.

Jerónimo
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

Buscar dentro de un recordset

Publicado por Marcos (2 intervenciones) el 20/01/2012 21:19:58
Para hacer las consultas mas rápidas crea indices por los campos que pones en el where, los indices penalizan el tiempo de inserción.
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

Buscar dentro de un recordset

Publicado por Jerónimo (49 intervenciones) el 21/01/2012 05:05:27
Hola, Marcos.
Eso suena muy interesante. Pero nunca lo hice. Voy a buscar información acerca de los índices y luego comento si pude acelerar los tiempos de búsqueda.
¿Esto andaría tanto con DAO como con ADODB?
Muchas gracias.

Jerónimo
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

Buscar dentro de un recordset

Publicado por Jerónimo (49 intervenciones) el 23/01/2012 06:16:49
Hola, Marcos.
Abrí Access y resulta que ya estaba creado el índice (debe haberse creado automáticamente, porque yo no lo hice).
Así que sigo sin poder acelerar los tiempos de búsqueda.
Muchas gracias.

Jreónimo
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

Buscar dentro de un recordset

Publicado por Marcos (2 intervenciones) el 23/01/2012 10:22:40
¿Tienes índices por cada uno de los campos? ¿uno para el campo1 y otro para el campo2?
40.000 registros no son muchos¿?.
Prueba a hacer la consulta dentro del access a ver cuanto tarda, si tarda poco, el problema puede ser otro (... por probar...).
Un saludo
Marcos
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

Buscar dentro de un recordset

Publicado por Jerónimo (49 intervenciones) el 23/01/2012 18:19:37
No me daría cuenta. Te explico porqué.
No es que tarde mucho en hacer una sola consulta. Sucede que tengo que hacer muchas consultas casi seguidas de acuerdo a información que voy tomando de un vector muy grande. Por cada dato que obtengo del vector debo hacer una consulta. Entonces a lo mejor son mil consultas, o más.
Para que te des una idea, un proceso entero de estos tardaba alrededor de 50 segundos si lo hacía con ADODB. Con DAO tarda alrededor de 10 segundos. Entonces por eso quiero saber si hay alguna manera de seguir bajando el tiempo.
El proceso es algo así:
Hago una búsqueda con un criterio determinado ("campo = x", por ejemplo). De acuerdo a un proceso que corro una vez obtenido el resultado de la búsqueda, tengo que hacer otra consulta sobre ese resultado. Y así tal vez deba hacerlo otra vez. En teoría, cada consulta me traería menos registros que la anterior. Por eso quiero encontrar la manera de hacer una consulta sobre el resultado de la anterior, que son menos registros que si tuviera que hacerla en los 50000 que tiene la base.
Me parece que me enrosqué mucho. ¿Me expliqué bien?
Muchas gracias.
Saludos.

Jerónimo
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