Que no se genere autonumérico

Nuevamente solicitando su asesoría.

En un subformulario tengo los campos IdPago (autonumeración), FechaPago (TipoFecha), Mes (Número), Año (numero), MontoPagado (moneda) y Pagado (Si/No).

En ocasiones oprimo el campo Pagado (Si/No), sin haber ingresado datos en los campos antes mencionados, con lo que se genera el siguiente IdPago(autonumeración), como podría evitar que en caso de no haber ingresado datos en los otros campos me salga un mensaje, de que no se ingresaron los datos y a su vez no se genere un nuevo autonumérico, o sea se cancele.

Y que se posicione en el último registro.

2 respuestas

Respuesta
2

En principio bastaría con decirle a la casilla de verificación, en sus propiedades-eventos-Antes de actualizar

If isnull([fechapago]) then

Msgbox" Nenico, tienes que rellenar los controles", vbokonly, "Señor, señor"

Docmd. Cancelevent

end if

O si quieres que sí o sí, se rellenen todos

For each control in form.controls

If control.controltype=actextbox then

if isnull([control]) then

msgbox....

docmd.cancelevent

end if

next

En el primer caso, si te dejas fecha pago en blanco, aunque "marques" la casilla, antes comprueba si hay algo escrito en fechapago. Si no lo hay no hace nada. Podrías encadenar condiciones para varios cuadros de texto.

En el segundo caso, comprueba que estén todos rellenos. Si alguno no está te sale el mensaje y el cursor se queda. Si intentaras cerrar el formulario te avisará de que ese registro no se guardará.

Otra forma, sería poner los campos de la tabla origen del subformulario como Requerido=Sí.

Buenas tardes ICUE.

Lo que requiero cuando es NUEVO REGISTRO, si seleccionó por error o por lo que sea el campo Pagado (Si / No). Salga un mensaje “Es nuevo registro, Fíjate cuate”

Y se cancele todo para que no genere un nuevo autonumérico. Y que se posicione en el último registro ingresado.

Probé la instrucción que me mandaste.

If isnull([fechapago]) then

Msgbox" Nenico, tienes que rellenar los controles", vbokonly, "Señor, señor"

Docmd. Cancelevent

end if

 Si trato de ingresar un dato en cualquier campo faltante, me sale el mensaje Nenico, tienes que rellenar los controles,  y se repite una y otra vez el mensaje, y tengo que forzar el cierre, pero se generan los autonuméricos, y eso es lo que quiero evitar.

Saludos Raul

Lo puedes hacer de mil formas distintas. Realmente en el subformulario, los único valores que se introducen es FechaPago y MontoPagado,, ya que mes y año, se obtienen del primero. Vamos primero con la que dices

Observa que el registro activo está en blanco, pero cuando le pongo el cursor en la casilla Pagado me aparece lo del mensaje. En este caso el código de la casilla es

Private Sub Pagado_BeforeUpdate(Cancel As Integer)
If Me.NewRecord And IsNull([FechaPago]) Then
MsgBox "Es nuevo registro, fíjate cuate", vbOKOnly + vbInformation, "No hay nada que hacer"
DoCmd.CancelEvent
End If
End Sub

Pero también lo podrías poner en el evento Al recibir el enfoque( esto me parece más natural)

If isnull([fechapago]) or isnull([montopagado]) then

pagado.locked=true

end if

Es decir, que si pone el cursor el la casilla Pagado, como Fechapago ó Montopagado son nulos, la casilla queda bloqueada. Y no te tienes que preocupar de si es un registro nuevo.

Por cierto ayer se celebro el día de la raza, un fuerte abrazo por ello.

Icue, probé los dos y opte por la segunda opción (al recibir el enfoque.)

Muchas gracias ICUE, te agradezco tu paciencia y ayuda.

Respuesta
2

Si tu autonumérico es de los de access (campo de tipo autonumérico), da igual lo que hagas, al colocarte en un registro nuevo se te va a generar automáticamente un nuevo número y al cancelar el registro, ese número lo "pierdes" (el siguiente registro no lo repetirá aunque no esté en la tabla, pasará al siguiente), por mucho código que le pongas. Y ahí no tienes nada que hacer.

Yo solo veo dos soluciones:

1º/ Eliminar el campo autonumérico nativo de access y sustituirlo por un autonumérico "manual", que se cree al entrar a un registro nuevo (lo puedes programar en el evento "al activar registro), una vez que has completado todos los campos(en el evento "después de actualizar" del último campo que se rellene, tras comprobar que están los datos correctos), o en el momento de guardar el registro. Si optas por la primera, los códigos que te propone Icue te servirán para "deshacer" el registro y por tanto el autonumérico, y cuando vuelvas a un registro nuevo, te volverá a generar el número "eliminado". Con las otras dos opciones, no sería necesario poner el CancelEvent, porque supuestamente el registro sería correcto.

Puedes ver un ejemplo de cómo crear un autonumérico en la web de Neckkito (http://neckkito.xyz/nck/index.php/ejemplos/13-formularios/58-autonumerico-manual) o buscando en esta web también te salen muchos ejemplos (https://www.todoexpertos.com/s?query=autonumerico

2º/ Hacer el subformulario independiente de la tabla, y guardar los datos a través de una SQL e inserción o de un recordset, pero eso es algo bastante más complejo de hacer, sobre todo por tratarse de un subformulario.

En resumen, que necesitas, además de los códigos de Icue para comprobar que los campos no quedan en blanco y deshacer el registro, un código para generarte tu propio autonumérico.

Un saludo.


Por cierto ayer se celebro el día de la raza, un fuerte abrazo por ello.

SVEINBJORN, para quitarme problemas voy a usar el autonumérico manual de NECKKITO

Muchas gracias SVEINBJORN, te agradezco tus consejos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas