Controlar actualizaciones en tabla

Necesito ayuda con una acción que he de definir para un botón que me alterne el contenido de un subformulario.
Tengo la base de datos hecha con Access 2003, y el subformulario se encuentra dentro de un formulario general. A parte, tengo 2 consultas hechas. Este formulario general tendrá 2 botones de comando, y según cual se pulse se cargara una consulta u otra en el subformulario.
Por ejemplo, si en el subformulario se carga por defecto la consulta A, y presionas el botón B, debería cargarse la consulta B. Si en el subformulario esta la consulta A y presionas el botón A, debería cargar la consulta A de nuevo.
Teniendo en cuenta esto, ¿qué código vba debería poner en el evento "Al hacer clic" del botón?
No tengo experiencia en código vba pero creo que viéndolo lo entiendo bastante y parece que para cargar la consulta en el subformulario debería ser con una orden parecida a "DoCmd.OpenQuery(Consulta1)" pero de alguna forma le tendría que decir donde cargarla (en el subformulario), y si esta cargada refrescar la consulta con los datos actuales (no se si con el método Requery, o Repaint...) y en esto estoy más perdido.

1 respuesta

Respuesta
1
Lo que quieres hacer es cambiar el origen del registro del subformulario, para ello debes cambiar el contenido de dicha propiedad en el procedimiento de evento click del botón:
Me![SubFrm].Form.RecordSource = "[Consulta]"
Siendo [SubFrm] el nombre que le has dado al control subformulario y [Consulta] el nombre de la consulta que quieres cargar.
Perdona me he liado al poner el titulo, el correcto es "Alternar contenido de subformulario (botones)".
Creo que lo entiendo pero el tema de Me! Haciendo referencia al objeto me liá bastante la verdad, por eso he mirado la ayuda que me sale del error de vb, y leyendo la parte de hacer referencia a un valor de control de un subformulario, me dice lo siguiente:
Formularios![Pedidos]![Subformulario Pedidos]![Cantidad]
Tal como lo pusiste me da error de no encontrar el campo "Subform1", que es donde me has dicho de poner el subformulario.
Teniendo en cuenta que mi formulario general se llama "Formulario1", mi subform se llama "Subform1" y que el botón se encuentra fuera de él (es decir, en el "Formulario1"), ¿cómo debería ser la linea de código?
Bien ya he buscado un poco y he encontrado como funciona el tema de referenciar a objetos.
http://www.mvps.org/access/forms/frm0031.htm
Lo de "Formularios!" es una traducción literal que hace la ayuda del access, y que me ha liado un poco, y claro eso no lo entiende vb. Al final me ha quedado así (según entiendo son dos opciones validas, digamos que la primera seria como ruta relativa y la segunda como absoluta):
Me!Subform1.RecordSource = "Consulta1"
Forms!Formulario1!Subform1.RecordSource = "Consulta1"
Pero ahora me dice queel objeto no admite esa propiedad o método. ¿Se refiere al RecordSource? ¿Entonces cómo debo ponerlo?
Prueba Me!Subform1.<span style="font-weight: bold;">Form</span>.RecordSource="Consulta1"
RecordSource es una propiedad del objeto formulario contenido en el control subformulario, no una propiedad del control (¿lioso?)
La verdad es que si... lo encuentro un poco lioso. Lo que no entiendo es porque hay que hacer algo diferente cuando queremos asignar el RecordSource a un subform, cuando para el form funciona sin problemas. Y aprovechando esto, ¿no podría poner una tabla en el form general? ¿Quizá la manera de hacerlo unicamente es mediante subform no?
Pero he ejecutao el trozo y me da error de compilación, cuando encuentra "<":
Error de compilación: Se esperaba: identificador o expresión entre paréntesis.
¿Te funciona a ti así tal cual? Bueno cambiando el nombre de los forms claro...
Es la web que mete caracteres raros, tienes que poner:
Me!Subform1.Form.RecordSource="Consulta1"
Dios que burro! Como se me paso por alto lo de "Form." antes del RecordResource!?
Incluso lo vi en la ayuda de windows... bueno ahora funciona perfecto, justo como quería!
Ahora entiendo eso del spam, ya decía yo que eso no pegaba nada...
Lo único que los nombres de las columnas no las refresca, sino que coge lo que tenia el formulario por defecto. En mi caso no me importa ya que alterno entre dos consultas que tienen los mismos nombres de columna, pero si lo necesitase ya me comeré un poco el coco antes de preguntar, ¿ok? Imagino que sera porque cargo como recordsource una query o tabla en lugar de un form que contiene la estructura.
Bueno muchas gracias por tu ayuda!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas