Campo contador

Tengo otro cuestionamiento para ver si me puedes ayudar, en una tabla llamada SOAT tengo un campo numérico de formato entero largo, con el formato 0000, identificado con el nombre No, en este campo se debe reflejar el consecutivo numérico (contador) de una cuenta de cobro; mi deseo es que al abrirse el formulario de captura de datos del mismo nombre (SOAT), entre directamente al nuevo registro y me muestre en el campo No el numero inmediatamente siguiente a la CTadecobro anterior.
Es necesario mantener el formato de cuatro dígito, y la numeración consecutiva ascendente.
Le puse un autonumérico pero se me pierden muchos números como si fuesen anulados.

1 Respuesta

Respuesta
1
Una opción es utilizar una función agregada de dominio, combinada con el formato adecuado y preveyendo los nulos para utilizarla en la propiedad Valor predeterminado del control en cuestión. Es decir, algo así:
=Formato(Nz(DMax("No";"SOAT");0) + 1; "0000")
Tambien lo puedes hacer mediante VBA en el evento Current:
If Me.NewRecord Then
  Me!No.DefaultValue = Format(Nz(DMax("No", "SOAT"), 0) + 1), "0000")
End If
Hola Xavy
Aplique con vb, quitándole la parte de formato por que el campo ya lo tiene, quedando
If Me.NewRecord Then
    Me!No.DefaultValue = Format(Nz(DMax("No", "SOAT"), 0) + 1)
End If
No que no entiendo es que al generar o tra cuenta de cobro vuelve y me sale 0001 como si no estuviese tomando el incremento.
Nose si es por que le tengo un Me.AllowEdits = False despues ya que tengo bloqueado el formulario para  NO PERMITIR EDISIONES... NO.
También no se si es necesario que tenga al menos un registro, ¿anterior al evento que se coloca...?
Agradecería tu orientación ya que no he intentado de varias formas ..
Atentamente.
Marcopolo
Si no permites ediciones, el usuario no puede realizar ninguna edición (aunque Access si puede editar el registro mediante código). Lo que me parece es que no puedes añadir un nuevo registro (o al menos no lo podrás editar) con lo que no entiendo el porqué del valor de esa propiedad.
El código que te propongo ya tiene en cuenta la inexistencia de un registro previo. Por eso se utiliza la función Nz.
Xavi
El valor de la propiedad se la doy para evitar modificaciones a los datos, cuando se realice una consulta, por error.
Si puedo adicionar registros, pero para modificarlos coloque un botón (Modificar) que me permite hacer las correcciones necesarias y volver a guardar con los arreglos ya realizados por medio de otro botón (Guardar).
Los datos del formulario SOAT se componen de dos tablas, una llamada soat, que es donde se encuentra el campo número (No) y otra Clientes que es de donde se toma los datos personales.
No se si por ser "Un Formulario único" o por la combinación de las tablas es que no me permita crear el campo contador o la función contador que requiero para el campo No.
Le modifique las condiciones al campo para tomar la función VB pero siempre me muestra para cada nuevo registro 1 y no se va incrementando a medida que voy digitando nuevos registros..
Bueno agradezco tu colaboración y orientaciíon al respecto..
Atentamente.
Marcopolo
Hola nuevamente Xavi
Encontré un ejemplo que me pareció muy practico sin embargo al cambiarle los nombres de los campos para adicionarlos a mi requerimiento, me encuentro que no funciona, no se que estoy haciendo mal, la función es:
General Autonumérico
Public Function AutoNumerico(strTabla As String, strCampo As String) As Integer
Dim dbs As Database, _
    rst As Recordset, _
    strMaximo As String
strMaximo = "SELECT Max(" & strCampo & ") as Mayor FROM " & strTabla
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(strMaximo)
If IsNull(rst!Mayor) Then
    AutoNumerico = 1
Else
    AutoNumerico = rst!Mayor + 1
End If
' cierro el recordset
rst.Close
Set rst = Nothing
Set dbs = Nothing
End Function
Este ejemplo tiene una tabla con los campo numero y otro y lo que hace es que al momento de digitar en el campo otro me aparece en el campo numero un registro consecutivo numérico que es el que requiero para mi campo No.
Tambien tiene en la funcion
Form                                                        BeforeInsert
Private Sub Form_BeforeInsert(Cancel As Integer)
Numero = AutoNumerico("Tabla1", "Numero")
End Sub
En el formulario del ejemplo esta en el evento antes de insertar.
Como ves es muy practico pero no logro aplicarlo a mi tabla SOAT y al campo No.
Te agradecería tu colaboración sobre el particular para ver si puedo arreglar el campo No
Gracias
Marcopolo
La verdad es que la función es muy explicita. Está pidiendo 2 argumentos: el nombre de la tabla y el nombre del campo. Bastaría con cambiar los nombres adecuados:
Me!No = AutoNUmerico("SOAT", "No")
Xavi

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas