Visual Basic - Recordset dentro de recordset

Life is soft - evento anual de software empresarial
 
Vista:

Recordset dentro de recordset

Publicado por Jerónimo (49 intervenciones) el 06/01/2012 06:26:45
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
sin imagen de perfil

Recordset dentro de recordset

Publicado por kdlc (226 intervenciones) el 13/01/2012 19:30:25
Hay diferentes formas de hacerlo, pero para saber el que mas te conviene se necesita mas informacion, por ejemplo:

Que base de datos estas utilizando?
En que forma estas utilizando estos recordsets? (Reporte, Grilla, etc)
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

Recordset dentro de recordset

Publicado por Jerónimo (49 intervenciones) el 13/01/2012 20:18:08
Gracias por responder.
Estoy usando una base de datos Access 2000 y me conecto a través de DAO 3.6. Antes lo hacía con ADODB, pero las búsquedas se hacían mucho más lentamente. Así que para conseguir más velocidad lo hice con DAO.
Te pongo un ejemplo de lo que hago.
Dim Base as Database
Dim Tabla as Recordset
Set Base = OpenDatabase(App.Path & "\basededatos.mdb")
Set Tabla = Base.OpenRecordset("SELECT * FROM tabla1 WHERE campo1 LIKE 'a*')
Luego, únicamente sobre los registros producto de esa búsqueda debiera realizar otra. Quiero hacerla tomando en cuenta solo esos registros para no volver a buscar en toda la base de datos, que tiene 55.000 registros aproximadamente. Entonces, si la primera consulta me trae 300, buscar sobre esos 300 es más rápido que buscar sobre los 55.000 en la base de datos.
Todo esto es para ganar velocidad. Si se te ocurre otra forma de hacerlo (con otra base de datos, por ejemplo) sería lo mismo.
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
sin imagen de perfil

Recordset dentro de recordset

Publicado por kdlc (226 intervenciones) el 13/01/2012 21:14:35
Jeronimo,
Sin saber muchos detalles de como piensas utilizar esto, te dejo la siguiente idea:

Set TablaPadres = Base.OpenRecordset("SELECT * FROM TablaPadres WHERE campo1 LIKE 'a*')

Set TablaHijos = Base.OpenRecordset('Select * from TablaHijos Where TablaHijos.PadreID in (Select TablaPadres.PadreID from TablaPadre Where Campo1 Like 'a*')

Notese que en las dos tablas necesitas tener identificadores unicos para los registros. En otras palabras:

Tabla Padres:
PadreID autonumber
...
...
...otros campos
etc

Tabla Hijos
HijoID AutoNumber
PadreID numeric
...
...


A ver si te ayuda...
Suerte!
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

Recordset dentro de recordset

Publicado por Jerónimo (49 intervenciones) el 16/01/2012 04:35:20
Hola, kdlc.
Había pensado en eso, pero como la consulta la tengo que hacer en dos tiempos (por cuestiones del proceso) no creo que me sirva. Es decir, ahora lo que hago es algo muy parecido a eso, pero lo que quiero es no tener que volver a la base de datos en la segunda consulta, sino buscar solo en los registros que me devuelva el primer recordset, dado que entiendo que sería más rápido que consultar la base de datos.
De todas formas, estoy replanteando el desarrollo de ese proceso, así que a lo mejor lo modifique.
Cuando lo termine volveré para avisarte si lo cambié o para consultarte si sigo en la misma situación.
¡Muchas gracias por tu tiempo y voluntad de ayudarme!

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