Access - MOSTRAR REGISTROS RECORDSET EN FORMULARIO

 
Vista:
sin imagen de perfil

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por David (12 intervenciones) el 14/10/2013 17:39:24
Hola a todos, espero que me podáis ayudar. Tengo un formulario de access en el que a través de un textbox ejecuto diversas consultas sobre una tabla de clientes. En ese form puedo seleccionar varios criterios, nombre, apellidos, teléfono, etc. Con el código VB establezco diversas consultas SQL (SELECT) y me devuelve los resultados en una varible de tipo recordset. Hasta ahi todo bien.

Mi problema es que quiero, que en el caso de encontrar registros, me abra otro formulario en el que se muestren los resultados del recordset al igual que los muestra un formulario sobre los registros de una tabla.

He leído la documentación e hice mil búsquedas en internet pero no consigo aclararme. Agradecido a quien pueda ayudarme. Gracias.
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
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por Neckkito (1157 intervenciones) el 15/10/2013 23:42:22
Hola!

No acabo de entender bien tu consulta, sobre todo en lo que hace referencia a la línea "me devuelve los resultados en una variable de tipo recordset".

Sin embargo, te daré una solución un poco general para ver si acierto en mi intuición de lo que debes tener.

Lo que debes hacer es:

- Créate un formulario sobre una tabla o consulta que contenga todos los datos que quieras ver, independientemente de los filtros que puedas aplicar. Supongamos que lo llamas "FResultados"

- Supongamos que los resultados te vienen dados por una SQL del tipo "SELECT * FROM Tabla", y que esta SQL la asignas a una variable String llamada miSql

- Te creas un recordset sobre la variable miSql -Set rst = currentdb.openrecordset(miSql)-

- Compruebas si ese recordset te devuelve registros - rst.recordcount-

- Creas un bloque if, de manera que:

SI (el recordcount>0) ENTONCES
Abres el formulario FResultados en vista diseño y oculto
Le cambias el recordsource por la sql
Cierras guardando los cambios
Abres el formulario FResultados en vista formulario
End SI

Algo parecido a esto:
...
If rst.recordcount>0 then
docmd.openform "FResultados",acDesign,,,,acHidden
Forms!FResultados.recordsource=miSql
docmd.close acform,"FResultados",acSaveYes
docmd.openform "FResultados"
End if
...

Creo que más o menos esto es lo que querías.

Saludos,


http://neckkito.siliconproject.com.ar
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
Imágen de perfil de David

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por David (1 intervención) el 16/10/2013 00:17:21
Hola Neckkito, en primer lugar, gracias por tomarte la molestia de contestar.

Aunque no me explique bien, has cogido la idea. Resumidamente tengo una tabla "CLIENTES" con sus respectivos campos (nombre, apellidos, telefono, etc). Cree un formulario para realizar búsquedas. Ese formulario tiene varias opciones que se seleccionan con radio buttons (buscar por nombre, buscar por apellidos, buscar por telefonos, etc). El sistema, en funcion de las opciones escogidas, crea una SELECT diferente. Es entonces cuando el usuario introduce la cadena a buscar en un textbox, los resultados obtenidos los almacenaba en un recordset.
Y el problema radicaba ahí, que una vez obtenidos los datos resultantes, no sabia como asignarlos para mostrarlos en un segundo formulario, es decir, que al darle al botón de buscar, me tendría que abrir otro formulario con los resultados fuera un cliente o varios.
Acabo de probar tu codigo y funciona, así que doble gracias, me estaba volviendo loco y las búsquedas de google tampoco me resolvían el problema.
Un saludo!!
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

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por David (12 intervenciones) el 28/11/2013 16:34:01
Hola de nuevo Neckkito.

Como ya te comente tu código me fue estupendo. Al seleccionar unos criterios en un formulario que utilizo para consultar la BBDD, me abre el formulario "FRresultados" con el recordsource originado en la consulta sql y visualiza los resultados.

Hasta ahora me iba estupendo, pero desde que puse la BBDD en red para que sea utlizada por varios usuarios, tengo un gravísimo problema. Las consultas no se ejecutan adecuadamente y ofrecen resultados erróneos cuando la utilizamos dos o mas usuarios a la vez.

Despues de ponerme de todos los colores presa del pánico , tengo la sensación que el problema radica en el recordsource, que no se actualiza para cada consulta en red.

Por ejemplo si un usuario realiza una consulta, se abre el formulario "FResultados" con un recordsource determinado por la sentencia SQL que proceda (hasta ahi bien) pero al cerrar el formulario creo que ese origen de datos se mantiene grabado en el "FResultados" y vicia las consultas posteriores que realicen otros usuarios.

Me gustaria conocer tu opinión de experto sobre ello, o la de cualquier otro forero que se preste. Como podría solucionarlo.

Gracias por adelantado. Saludos.

PD: La BBDD esta bien configurada en red, la inserción de otros datos funciona correctamente y la tengo "sin bloqueo de registros" y en modo compartido.
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
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por Neckkito (1157 intervenciones) el 28/11/2013 20:16:20
Hola!

Cuando, por código (como te comentaba en el mensaje anterior), abres el formulario y le asignas un recordsource, ese recordsource queda guardado como origen del formulario. Y queda así por los siglos de los siglos o hasta que se lo vuelves a cambiar (ya sea a mano o de nuevo por código).

No sé cómo estás utilizando ese formulario, pero si lo quieres también abrir de una manera "normal" cada vez tienes que indicarle cuál es su origen del registro. Si no te abrirá con el último origen de registro (la última sql) con que lo manipulaste.

Imaginemos que ese formulario se abre e, inicialmente, su origen del registro debería estar sobre la tabla "TDatos". Entonces, y suponiendo que tienes un formulario menú con un botón para abrirlo, en el código de ese botón deberías hacer cada vez una actualización del origen del registro. Es decir, una cosa así:

...
Private Sub...
docmd.openform "FResultados",acDesign,,,,acHidden
Forms!FResultados.recordsource="TDatos"
docmd.close acform,"FResultados",acSaveYes
docmd.openform "FResultados"
End sub
...

A ver si con lo comentado puedes encontrar alguna solución.

Saludos,

Neckkito
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

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por David (12 intervenciones) el 28/11/2013 20:29:30
Ante todo gracias por contestar.

Me acabas de confirmar lo que sospechaba, el origen de mi problema el el recordsource que se queda grabado (aunque cuando la BBDD la utilizo yo me funciona a la perfeccion, pero bueno).

El formulario del que hablo, se llama "VISUALIZA CLIENTE" y solo lo utilizo para visualizar en detalle los datos de un cliente. Imagina un formulario de consultas para buscar cliente por nombre, telefono, direccion, etc y le damos a un boton para buscar. Es entonces cuando se abre el formulario"visualizacliente" con el recordset asignado a traves de la consulta SQL). Si yo hago una consulta, me la devuelve bien y me la muestra pero luego se queda guardada por lo que si otro usuario realiza una consulta distinta, ya le da error por que el recordsource esta asignado sobre la consulta que realice yo con anterioridad.

Entiendo entonces que la solucion podría venir por "vaciar" (digo vaciar porque ese formulario solo lo utilizo para visualizar en detalle un cliente, no me interesa para nada mas) el recordsource cada vez que se realice una consulta?

Saludos.
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
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por Neckkito (1157 intervenciones) el 28/11/2013 20:45:53
Hola!

Te hablo teóricamente:

Tú realizas una consulta sobre el cliente y se te abre el formulario. Eso implica que has "grabado" la sql1 (llamémosla así) sobre ese formulario. Cuando cierras el formulario sql1 queda "adscrita" al form.

Si otro usuario realiza otra consulta sobre el cliente siguiendo la misma sistemática, teóricamente, generaría la sql2, le cambiaría el origen del registro al formulario y lo abriría en vista formulario. No debería dar ningún error porque ahora al formulario le hemos cambiado el origen del registro y el que tiene adscrito es la sql2, no la sql1.

Daría error en el hipotético caso de que dos o más usuarios intentaran modificar el origen del registro al mismo tiempo, con lo que Access se haría "la picha un lío". Probablemente el primero en operar sería el que se llevaría "el gato al agua", saliéndole el error al segundo.

También, si tienes el formulario abierto, se bloquearía la edición del formulario, con lo que no se puede modificar el origen del registro con el consiguiente error para aquel que lo intentara.

Si tuvieras la BD dividida, como cada usuario tiene su front-end, no deberías tener este error, porque cada usuario utilizaría su propio formulario.

Saludos,

Neckkito
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

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por David (12 intervenciones) el 28/11/2013 20:49:46
El caso es que si que la dividi pero el problema no se soluciono. Mañana hare pruebas a ver si resulta. Gracias por tu tiempo
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
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por Neckkito (1157 intervenciones) el 28/11/2013 20:55:31
Hola!

Si tienes la BD dividida el error que comentas no debería aparecerte. Ten en cuenta que si cada uno tiene su front-end el usuario A podría tener 5 formularios y el usuario B podría tener 15. En una BD dividida lo único que se comparten son las tablas.

La verdad es que no sabría decirte... Lo primero que haría yo sería compactar los front-end para evitar que se haya quedado algo "pillado" en Access, y para asegurarme que no es un problema de código lo depuraría en el VBE.

Espero que consigas solucionarlo.

Saludos,

Neckkito
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

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por David (12 intervenciones) el 28/11/2013 20:57:58
Gracias lo probare a ver si hay 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
sin imagen de perfil

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por David (12 intervenciones) el 29/11/2013 09:33:29
Bueno, ya esta solucionado.

El error efectiva e indudablemente venía originado al compartir la base de datos, pues el formulario graba el recordsource de la primera consulta viciando las siguientes.

Por si a alguien le pasa lo mismo, la solucion consiste en dividir la base de datos utilizando el asistente, por lo que genera dos archivos, uno con las tablas (que se deben compartir en la red) y otro con los formularios. Al principio también me daba error porque como soy un poco cafre, hacía un acceso directo del archivo de formularios a todos los ordenadores, con lo cual, seguíamos compartiendo los mismos formularios, en vez de copiar el archivo que genera access con los formularios, en cada ordenador.

Muchísimas gracias por tu ayuda, me has salvado!
Saludos!
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
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por Neckkito (1157 intervenciones) el 29/11/2013 11:01:25
Me alegro mucho. Ahora, ¡a disfrutar del Access! (Je, je, je...)

Saludos,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por anali (4 intervenciones) el 18/08/2016 19:29:10
yo tengo más o menos el mismo problema, me puedes ayudar, la búsqueda me manda los registros encontrados, pero al momento de pinchar sobre cualquier registro solo me manda el primero. mi código es.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub Lista0_DblClick(Cancel As Integer)
On Error GoTo Err_Salir_Click
Dim rst As Recordset
 
Select Case Me.BUSQUEDA
'Aquí vemos el valor que le hemos indicado según la opción marcada
 
'EMPLEADOS
Case Is = "1"  'Tenemos marcado EMPLEADOS
 
If Me.Lista0.ListCount = 0 Then  'Si no hay registros
MsgBox "No hay Datos para mostrar.", vbCritical, "No Datos"
'Indícamelo con un mensaje
Exit Sub
End If
 
DoCmd.OpenForm "EMPLEADOS"
'Abre el formulario EMPLEADOS
 
Set rst = Forms!empleados.RecordsetClone
rst.findFirst "NUMERO_DE_EMPLEADO = " & Me.Lista0
'Busca el primer registro que la referencia coincida con la que pone el cuadro de lista (creo que es esta linea mi error)
Forms!empleados.Bookmark = rst.Bookmark
'Establece el registro actual en un objeto Recordset al registro identificado por un marcador válido
DoCmd.Close acForm, "BuscadorGeneral"
'Cierra el formulario del buscador

el codigo lo baje de internet y lo adapte a mis necesidades.

espero que me puedas ayudar. Gracias!!!
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
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

MOSTRAR REGISTROS RECORDSET EN FORMULARIO

Publicado por Neckkito (1157 intervenciones) el 18/08/2016 19:41:25
No tengo muy claro qué es lo que necesitas, pero prueba esto:

....
'Tu código hasta End If, y a partir de ahí:

1
2
3
4
5
6
7
Dim miFiltro as string
miFiltro="[NUMERO DE EMPLEADO] = " & Me.Lista0
With Forms!EMPLEADOS
.filter=miFiltro
.filteron=true
end with
DoCmd.Close acForm, "BuscadorGeneral"

Si te funciona, del código original puedes borrar la línea:

1
Dim rst As Recordset

Y como veo que el código utiliza etiquetas, también puedes borrar cualquier referencia que sea haga a rst, si es que existe (por ejemplo, rst.close, Set rst=nothing...)

Hay algunas deficiencias de sintaxis en el código que estás utilizando, pero como no lo has puesto completo pues lo dicho, si te funciona, mejor no meneallo.

Saludos.

Neckkito
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