Consultas en informes

Un saludo:
Estoy buscando la manera de incluir en un informe unas estadísticas con los datos que aparecen en el mismo. Me sería muy útil saber si se puede crear una consulta en el momento de presentar el informe y pasar el resultado de la consulta a una variable array para trabajar con ellos.

1 Respuesta

Respuesta
1
Puedes incluir código VBA en tu informe, cada formulario e informe puede tener un módulo asociado, en ese podrías emplear un código como el que sigue:
Dim conecta As Connection
Dim datos As ADODB.Recordset
Dim strCnn As String
strCnn = "Provider= Microsoft.Jet.OLEDB.4.0; Data Source= c:\Mis Documentos\TuBaseDeDatos.mdb; "
Set conecta = New ADODB.Connection
conecta.Open strCnn
Set datos = New ADODB.Recordset
datos.ActiveConnection = conecta
datos.Open "Instrucción SQL tal como SELECT * FROM CLIENTES", , , , adCmdText
Do While Not datos.EOF
datos.Fields ("NOMBRE DE CAMPO") 'Referencia a un campo
datos.MoveNext
Loop
Datos. Close
Con este obtendrás un objeto llamado datos en el que tendrás tus registros almacenados y puedes moverte a través de el con los método MoveNext como el ejemplo, si quieres a partir de ahí lo puedes vaciar a un array, aunque eso ya no sería necesario.
Si necesitas más avísame.
Lo primero, darte las gracias por tu respuesta.
Estoy trabajando en ese sentido. No se si cambia algo pero la versión que tengo es la 97.
He escrito lo siguiente:
Private Sub PieDelGrupo1_Print(Cancel As Integer, PrintCount As Integer)
Dim dbs As Database
Dim rcdEsta As Recordset
Set dbs = CurrentDb
Set rcdEsta = dbs.OpenRecordset("SELECT * FROM PerDeTodos")
MsgBox rcdEsta.RecordCount
End Sub
Si la tabla PerDeTodos tiene 3597 registros ¿no debería de salir este número en el mensaje? Me sale 1.
Otra cosa: no me acabo de aclarar de la diferencia entre un objeto recordset y un querydef pues parece que los dos se pueden definir como una consulta ¿?
Te recomiendo cambiar tu código por el siguiente:
Private Sub Report_Open(Cancel As Integer)
Dim conecta As Connection
Dim datos As ADODB.Recordset
Dim strCnn As String
strCnn = "Provider= Microsoft.Jet.OLEDB.4.0; Data Source= d:\mis documentes\TuBaseDeDatos.mdb"
Set conecta = New ADODB.Connection
conecta.Open strCnn
Set datos = New ADODB.Recordset
datos.ActiveConnection = conecta
datos.Open "SELECT * FROM tabla1", , , , adCmdText
MsgBox datos.Properties.Count
datos.Close
End Sub
Como puedes ver es algo diferente al tuyo pero más efectivo, además no olvides ponerlo en el evento Open del Informe, de lo contrario no da el resultado esperado.
Por lo de la diferencia entre recordset y querydef observa que un recordset es un objeto que contiene un conjunto de registros que recuperas a través de una consulta, este objeto permite manipular los registros originales; por el contrario QueryDef crea una consulta que se almacena como tal hasta que la borras.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas