Visual Basic ADO - Recordset dentro de recordset
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
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)
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
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!
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 coneccion ado sentencia sql para conectar base externa con contraseña |