Rellenar campos en formulario Access

Tengo una base de datos para controlar alquileres de pisos.

Cada vez que se inicia un mes, los inmuebles con una estado: "EN GESTIÓN" tienen una obligación de pago. Hay una tabla donde se ubican los datos de los inmuebles y otra donde se ubican los datos de los pagos, con un campo que indica "FECHA PAGO".

La idea es que cada vez que inicie un mes, en un formulario se muestren los inmuebles que están en gestión con un campo de "FECHA PAGO" vacío y que con un botón se puedan rellenar de forma automatizada.

No sé si he sabido explicarme bien.

1 respuesta

Respuesta
2

He de decirte que yo lo haría de otra forma, pero... si tengo la tabla Pisos

Y una tabla Cobros

Con esta última hago un formulario( da igual único o continuo, pero se ve mejor de ésta forma)

En el evento al cargar del formulario le pongo

Private Sub Form_Load()
If Nz(DCount("*", "cobros", "format([fechacobro],""mm/yyyy"") like format(date(),""mm/yyyy"")")) >= 1 Then
MsgBox "Ese mes ya está contabilizado", vbOKOnly, "Otra vez será"
Exit Sub
Else
DoCmd.RunSQL "insert into cobros select piso from pisos where estado like ""En gestion"""
DoCmd.RunSQL "update cobros set fechacobro=date() where fechacobro is null"
Me.Requery
End If
End Sub

Me explico. Cuando vas a abrir el formulario comprueba que no se haya contabilizado ya ese mes. En caso de que así fuera, te aparecería un mensaje de que ya ha sido contabilizado y no hace nada. En caso de que no sea así te introduce en la tabla Cobros los pisos que están en gestión y la fecha del día(yo lo dejaría en blanco para poder poner la fecha efectiva en que le he cobrado). De forma que

En caso de que ese mismo día u otro del mismo mes, abrieras el formulario, para evitar que se repitiera lo de insertar registros te aparecería

Cuando llegaras a un mes nuevo, la primera vez que lo abrieras, haría la comprobación y como no hay registros de ese mes

Personalmente le diría que me mostrara sólo aquellos registros en que Cobrado=False

Y mejor todavía, lo haría todo desde un formulario Principal, desde donde le diría que insertara registros, que me mostrara los cobros de un mes, los que están sin cobrar, etc.

Muchas gracias, implementaré tu propuesta y te cuento. 

Muchas gracias de nuevo.

Después de intentar implementarlo en mi propia base, con nombres de tablas y campos distintos y no obtener buen resultado he comenzado una base de cero con los mismos campos y todo funciona ok, pero con un resultado algo distinto del que yo esperaba, ya que la línea de código:

DoCmd.RunSQL "insert into pisos select piso from pisos where Estado like ""EN GESTIÓN"""

(modificado el "Estado"), me crea un registro nuevo. Es decir, si tengo 4 registros, que son con los que he hecho la prueba, y esta línea está en el código, me inserta un registro más, cuando no debería ser así. He probado a quitarla y funciona a la perfección.

Una vez más, gracias!

En mi propia base de datos, además, las tablas tienen nombre separada por un espacio, y los campos igual. Cómo se expresa en SQL cuando tienes una tabla que se llama por ejemplo "tabla inmuebles"?

Haciendo más pruebas, no consigo que ejecute la acción de introducir la fecha solo a los registros que cumplen la condición de estar en estado "En gestión", me lo aplica a todos los registros.

Por partes. Siempre aconsejo que todos los nombres, sea de campos, tablas, formularios, controles, etc. se pongan todo junto. Ya pondrás bien el nombre en las etiquetas. Los inconvenientes de ponerlos separados son

1º Tanto en código como en sql tienes que estar encerrándolos entre corchetes

2º Y más importante. Puede darse el caso, que por error pongas, por ejemplo Nombre Cliente y te puedes volver loco al ver que no funciona y es que entre Nombre y Cliente hay dos espacios. Mientras que si lo pones todo junto no te equivocas.

A lo otro. Al final no sé que has hecho, porque la instrucción que te puse no crea más registros que pisos hay en la tabla Pisos y que estén En Gestión.

Por otro lado, en el ejemplo que te puse, ponía las fechas acto seguido a introducir los pisos. No puedes decirle que te actualice a la fecha que sea aquellos registros que estén en gestión porque te actualizaría todos. Por eso, una vez que ha introducido los pisos le digo que actualice sólo los registros en que Fecha Cobro sea nulo.

Hola de nuevo.

Tras varias pruebas y haber rediseñado algunos aspectos de la base vuelvo a tocar esta función, pero tengo algunos problemillas.

La tabla "pisos" en tu ejemplo se denomina "ALQUILER" en la base.

La tabla "cobros" se denomina "CONTROL RENTAS".

El campo "fechacobro" es "FECHA PAGO".

El campo "piso" es "DIRECCION".

El campo "estado" es "ESTADO GESTION".

Una vez sustituidos los campos por los de mi base tengo el siguiente procedimiento:

Private Sub Form_Load()
If Nz(DCount("*", "CONTROL RENTAS", "format([FECHA PAGO],""mm/yyyy"") like format(date(),""mm/yyyy"")")) >= 1 Then
MsgBox "Ese mes ya está contabilizado", vbOKOnly, "Otra vez será"
Exit Sub
Else
DoCmd.RunSQL "insert into CONTROL RENTAS select DIRECCION from ALQUILER where ESTADO GESTION like ""EN GESTIÓN"""
DoCmd.RunSQL "update CONTROL RENTAS set FECHA PAGO=date() where FECHA PAGO is null"
Me.Requery
End If
End Sub

Pero lanza un error de sintaxis y la línea

DoCmd.RunSQL "insert into CONTROL RENTAS select DIRECCION from ALQUILER where ESTADO GESTION like ""EN GESTIÓN"""

Te agradecería ayuda.

Gracias de antemano.

Un saludo.

Ya te dije que si pones los nombres separados, tanto en SQL como en código tienes que encerrarlo entre corchetes o, dependiendo donde, entre comillas.

DoCmd.RunSQL "insert into [CONTROL RENTAS] select DIRECCION from ALQUILER where [ESTADO GESTION] like ""EN GESTIÓN"""

Gracias por tu rápida respuesta. Debo estar indicando algo mal en la base porque al pegar la línea de código tal y como me indicas y ejecutar el código me abre un cuadro de macro para que elija una...

Me lanza antes un mensaje donde me dice que el campo DIRECCIÓN es desconocido

Indicar que el campo DIRECCIÓN de la tabla ALQUILER lo obtiene del campo DIRECCIÓN de la tabla INMUEBLES, no sé si puede ser el motivo del error

En la instrucción tuya Direccion va sin acento. Comprueba como se llama el campo en la tabla.

Siempre aconsejo, o poner el acento siempre o, mejor, no ponerlo nunca, ya pondrás el nombre correcto en las etiquetas. Personalmente no lo pongo nunca, así no tengo que estar pensando si se lo puse o no, o estar mirando si en una tabla se lo puse y en otro objeto no.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas