Hola me llamo Loisy y necesito hacer una macro que se ejecute cada vez que abro la base de datos:

Esto de abrir cada vez que se abre la base de datos, ya se que se hace grabando la macro con autoexec, pero el problema en si es lo que quiero que la macro haga, 1.- busque los registros de pacientes que no tienen ingreso (que no permanecieron en habitación) 2.- si existen, ejecute la consulta de crear pacientes sin ingresos que ya la tengo y eliminar pacientes sin ingreso, que también la tenago y muestre al usuario que existen dichos registros y que fueron eliminados correctamente.

Intenté hacerlo colocando en la acción ejecutar macro, para definir el bucle esta expresión:

Es Nulo ([formularios]![mantenimiento de pacientes]![Nº ingresos], este formulario lo creé con dos tablas puesto que necesitaba los datos de los pacientes de la tabla pacientes y el de ingresos de la tabla ingresos para usarlo como condición y encontrar los pacientes que no tienen ingreso, que son registros nulos en ese campo.

Como no se mucho de esto, supongo que algo en la lógica o estructura debe estar mal, si alguien puede ayudarme con esto.

1 respuesta

Respuesta
2

En Access es más fácil hacer que algo se ejecute al iniciar que tener que programar una macro... permíteme que te explique los pasos que deberías seguir:

1.- Crea una consulta de pacientes que no tienen ingreso.- Esta consulta debería de ser una consulta "de actualización" para guardar estos pacientes en otra tabla para mostrarlos posteriormente como "Pacientes eliminados" en un formulario, que además, servirá como "AutoExec". -Llama a esta consulta "SELECCION"

2.- Crea otra consulta de eliminación de los pacientes sin ingreso.-Llama a esta consulta "BORRADO"

3.- Crea una nueva consulta de selección de la tabla de los pacientes traspasados de la tabla principal a otra tabla en el punto 1.

Cuando lo tengas, crea un nuevo formulario y metes ahí la consulta como si fuese un subformulario (simplemente, arrastra la consulta dentro del formulario)

Escribe algún texto que indique que esos pacientes han sido los eliminados de la tabla principal por no tener ingreso.

Ahora debes abrir la ficha "Propiedades" del formulario (no de la consulta) y en el evento "Al Abrir" le incluyes el siguiente código:

Private Sub Form_Open(Cancel as Integer) 'Esto ya aparece. No lo escribas

DoCmd.SetWarnings False 'Esto hace que no aparezcan avisos

DoCmd. OpenQuery "SELECCCION" 'Esto ejecuta la consulta de selección

DoCmd. OpenQuery "BORRADO" 'Esto ejecuta la consulta de borrado

DoCmd.SetWarnings True 'Esto hace que vuelvan a aparecer avisos

Me. Requery 'Vuelve a consultar para que aparezcan los pacientes eliminados

End Sub

4.- Guarda este formulario como "INICIO"

- Pulsa en el icono de Office (Arriba a la izquierda) y luego buscas "Opciones de Access"

En el menu de la izquierda, elije "BASE DE DATOS ACTUAL" y en la parte derecha, busca pone "Mostrar Formulario" y un cuadrito para elegir el formulario que deseas que aparezca al abrir la base de datos.. Elige INICIO en ese cuadrito y cierra todo guardando los cambios...

Pruébalo y espero que funcione como tu deseas...

Saludos y no olvides finalizar y puntuar mi respuesta si consideras que está todo aclarado...

Hola

la verdad esta excelente esta manera de hacerlo, lo que no manejo mucho es el código visual basic, aun no he trabajado con el, aunque tengo conocimientos básicos.

intentaré hacerlo a ver si me sale, lo que si me gustaría y mas que todo por aprender y no quedarme con la duda, es hacer esa macro para ver como funciona un bucle a partir de un registro nulo, ya que el mio generó error y no me gusta quedar con dudas, si puedes de todas maneras decirme donde esta el error o darme tu lógica en esa macro, excelente, a partir de ahí podría avanzar en conocimiento.

ya te avisaré como salió todo y gracias!!!!

Esa macro es imposible que funcione, puesto que el comando "Esnulo" lo que va a verificar es un campo o un dato, mientras que el formulario lo que devolverá será un "Recordset" vacío...
Los recordset son conjuntos de registros y desde una macro no puedes acceder a ellos.

Para ayudarte a entender la idea de Recordset, imagina una consulta que devuelve 5 o 6 registros.-

Esos registros formarán el Recordset, pero para acceder a ellos, tienes que empezar a definir el conjunto. En VB sería algo así como
MiSeleccion=CurrentDB().OpenRecordset"Consulta de Registros"

Después, necesitarás un cursor (o puntero) para posicionarte en el registro. Esto se hace con

MiSeleccion. MoveNext (o MoveFirst, MoveLast, etc...) donde estás indicando que avance o retroceda registros

Como ves, todas estas funciones no están disponibles desde macros; Solo se pueden definir en VB Script, por lo que tendrás que aprender un poco si quieres manejar registros desde código.

En código VB, para verificar lo que deseas, en vez del comando "EsNulo", tendrías que usar

MiSeleccion. EOF- Este comando devuelve False o True si el cursor está al final de la tabla (o la tabla no tiene registros -esta vacía-)

Un saludo nuevamente, y espero haberte aclarado algo más...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas