Access - Abrir consulta mediante ADO

 
Vista:

Abrir consulta mediante ADO

Publicado por CyRuS (127 intervenciones) el 12/12/2006 16:56:19
Abro una consulta que ya tengo hecha y me cuenta el nº de regristros. Bien,
ningún problema.

Dim db As DAO.Database, rs As DAO.Recordset, qd As DAO.QueryDef

Function hola()

Set db = CurrentDb
Set qd = db.QueryDefs("Consulta")
Set rs = qd.OpenRecordset()
MsgBox " el recordset contiene" & rs.RecordCount & "registros"
rs.Close
db.Close

End Function

PERO cuando la consulta tiene un campo que me lo pregunta por medio de un
InputBox entonces esa función se me para en la línea de Set rs =
qd.OpenRecordset() y me da el error " Pocos parámetros. Se esperaba 1 "

¿Por qué no me abre la consulta como si la ejecutara con DoCmd.OpenQuery
("Consulta") ? porque si la ejecuto así, entonces sí que me pregunta el
valor del campo por el que quiero filtrar.
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:Abrir consulta mediante ADO

Publicado por Enrique (1299 intervenciones) el 12/12/2006 19:06:32
En primer lugar estás utilizando DAO no ADO. Ese error te ocurre porque cuando trabajamos con los Recordset de DAO, el parámetro por el que queremos filtrar tenemos que dárselo de antemano en lugar de esperar a que nos lo pregunte por medio de la Ventana "Introduzca el valor de parámetro" que se abre cuando ejecutamos una consulta con criterio. DAO no ejecuta las consulta sino que "maneja" sus registros para extraer o grabar datos en o desde la tabla o tablas que componen esa consulta.

Prueba poniendo un Campo de Texto "Independiente" en el mismo formulario desde donde estás actuando, de nombre por ejemplo "txtFiltro", escribes el texto por el que vas a filtrar en ese campo y luego llamas a la función. En la consulta tendrás un campo al cual deberás de quitarle el criterio. Observa que en el Select del OpenRecordset yo lo llamo "CampoCriterio" (cambialo por el nombre correcto que tiene en la consulta).

Dim rs As DAO.Recordset

Function hola()
Set rs = CurrentDb.OpenRecordset("Select * From Consulta Where CampoCriterio = '" & Me.txtFiltro & "'")
MsgBox " el recordset contiene " & rs.RecordCount & " registros"
rs.Close
Set rs = Nothing
End Function

Así te debería de funcionar, aunque he podido comprobar que DAO a veces no cuenta bien el número de registros, para eso ADO va mejor.

Ya nos dirás. Saludos
Enrique
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:Abrir consulta mediante ADO

Publicado por CyRuS (127 intervenciones) el 13/12/2006 16:52:44
Excelente. Me funciona perfecto. Lo que no entiendo es porqué se pone
SELECT * , ya que si pongo SELECT "otrocampodelaconsulta" me sale el mismo
resultado.

y por cierto, me he fijado que tu pones, set rs = Nothing mientras que yo
pongo rs.Close . ¿hay alguna diferencia?
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:Abrir consulta mediante ADO

Publicado por Enrique (1299 intervenciones) el 14/12/2006 18:28:38
El asterisco significa coger todos los campos de la Tabla o Consulta. Tambien puedes ponerlos uno a uno y funcion igual. Si tienes una tabla o consulta con muchos campos y necesitas tomar un gran número de ellos, es más rápido poner * en vez del nombre de cada uno.

Select * From NombreTabla Where........ es igual que:
Select Codigo, Nombre, Direccion, CPostal, Ciudad From NombreTabla Where....

En cuanto a lo del Nothing, es conveniente poner las dos cosas:
rs.Close cierra el objeto Recorset y Set rs = Nothing elimina la conexión con la tabla/consulta. Además, si has establecido conexión con una tabla de una mdb externa con:
Dim db as DAO.Database
db = "C:\Bases de Datos\Aplicacion.mdb"
Set rs = db.OpenRecordset("Select........ ), tambien es necesario cerrar y eliminar la conexión externa con:
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing

Un saludo
Enrique
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