Como mostrar registros de un Recordset

Tengo un formulario donde recojo una fecha y cargo los registros de una BBDD que cumplen esa condición en un Recordset (a través de una sentencia Select):

Dim xconexion As New ADODB.Connection
Dim xcomando As New ADODB.Command
Dim rs As New ADODB.Recordset

Set xconexion = CurrentProject.Connection
Set xcomando.ActiveConnection = xconexion
xcomando.CommandText = "SELECT [NIF], [APELLIDOS], [NOMBRE], [fecha] FROM [Todos los datos] WHERE [FECHA]= " & "#" & xfecha & "#"
rs.Open xcomando, , adOpenDynamic, adLockOptimistic

Mi problema es que una vez que tengo ahí los registros no se como mostrarlos todos tipo tabla.. En principio puse un subformulario para mostrarlos, y recorriendo el recordset iba copiando los datos de cada campo en cuadros de texto del subformulario, pero de esta manera solo me mostraba el ultimo registro:

rs.MoveFirst
Do Until rs.EO
subdatos.Form!fdni = rs!NIF
rs.MoveNext
Loop

Luego he visto que se puede asignar un Recordset a un subformulario, pero me da un error "EL OBJETO ESPECIFICADO NO ES UNA PROPIEDAD RECORDSET VALIDA"

Set Me.subdatos.Form.Recordset = rs ("subdatos" es el subformulario y "rs" el recordset)

El Objeto Origen del Subformulario es un formulario que he creado con los textbox independientes.

En fin, a ver si puedes orientarme...

1 Respuesta

Respuesta
1

es mucho mas sencillo que todo eso, simplemente pones me.recordsource="SELECT [NIF], [APELLIDOS], [NOMBRE], [fecha] FROM [Todos los datos] WHERE [FECHA]=#" & xfecha & "#"

Automáticamente hace un requery después de cambiar el recordsource, por lo que no es necesario que actualices.

El formulario lo tendrás que poner en modo de visualización como tabla si lo quieres ver todo como una tabla.

Si lo que quieres es variar el recordsource de un SUBformulario, lo único en vba es que hay que añadirle el form_ delante del nombre del formulario. Vamos, que si el subformulario se llama "paquito", tendrías que poner form_paquito.recordsource="blablabla"

Para que esto funcione, el subformulario paquito tiene que haber sido abierto alguna vez para añadirle código (pon un botón por ejemplo, añade cualquier código al botón, y luego bórralo si quieres)... es una de esas chorradas que tiene la access, que no resuelven en ningún service pack y que te puedes volver loco si no la sabes.

No me funciona :(

Pongo

form_subdatos.RecordSource = "SELECT [NIF], [APELLIDOS], [NOMBRE], [fecha] FROM [Todos los datos] WHERE [FECHA]= " & "#" & xfecha & "#"

y dice: Error "Se requiere un objeto"

Eso es porque no accede a subdatos...

pon un me.recordsource="blablabla"

Gracias, al final he conseguido que me vea el subinforme y visualice el Select, lo que
pasa es que esto no llega a solucionar mi problema.
El diseño de la tabla da datos que tengo es el siguiente: (NIF,NOMBRE,APELLIDOS,FECHA1,HORA1,FECHA2,HORA2....FECHA10,HORA10).Tengo 10 campos de fecha y hora.
Cuando hago el select, saco aquellos registros que tienen la fecha introducida por
teclado en alguno de los 10 campos de fecha, pero no se como visualizar unicamente
los campos fecha y hora que coincidan con esa condición.
Ej.:
Fecha introducida por teclado: 01-01-12
Hago el Select y obtengo 3 registros con esa condición, donde:
EL 1º registro tiene el valor 01-01-12 en el campo "fecha1", y en el campo "hora1" el valor 10:00
EL 2º registro tiene el valor 01-01-12 en el campo "fecha3" y en el campo "hora3" el valor 11:00
EL 3º registro tiene el valor 01-01-12 en el campo "fecha8" y en el campo "hora8" el valor 12:00
Lo que yo quiero visualizar son los campos NIF, NOMBRE Y APELLIDOS de los 3 registros y luego los campos fecha y hora que coincidan con la condición (en el 1º registro mostrar fecha1 y hora1, en el 2º registro fecha3 y hora3 y en el 3º registro fecha8 y hora8).
Por eso mi idea inicial era cargar todos los datos en un recordset, ir recorriendolo y cargando los datos que me interesaran en otro recordset auxiliar y al final visualizar este en un subinforme....
No se si me he explicado claramente... espero que si y puedas darme alguna idea porque estoy atascada...
Gracias.

Ufff... eso ya es un mal diseño de la base de datos...

En lugar de poner hacer un registro (una ficha vamos) donde ponga la fecha no se, de las ultimas 10 consultas, deberías hacer otra tabla nueva donde apuntar estas fechas/horas.

Tabla Clientes, con los campos NUMERO_DE_CLIENTE (una clave única numerica), NIF, Nombre y apellidos)

Tabla Consultas, con los campos Numero_de_consulta (autonumérico - clave única), numero_de_cliente, fecha_consulta, hora_consulta (no llames nunca a los campos "fecha" u "hora" u otras palabras clave, puesto que desde Access te puede dar algún que otro quebradero de cabeza).

Después relacionas esas 2 tablas por el numero de cliente en una relación de 1 a muchos y con integridad referencial (si borras el cliente, borras sus consultas). Si no sabes como crear relaciones, entonces si que te aconsejo que no sigas con la base de datos hasta que te hayas leído cualquier libro de Access o por lo menos de cualquier otra base de datos relacional.

Y entonces si que podrás hacer esa consulta que quieres hacer. En general, siempre que te pongas a diseñar una base de datos, y empieces a poner campos tipo "telefono1","teléfono 2", "fecha 1", "fecha 2", "proveedor 1", "proveedor 2" etc... es que estas diseñando la base de datos mal.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas