¿Cómo podría tener en una tabla de access dos campos autonuméricos?

Necesito tener en una tabla dos autonuméricos, veo que no se puede pero crear un campo en la misma tabla que gener números automáticos, ¿se podría?.

2 Respuestas

Respuesta
1

Dos autonuméricos como tal no puedes, al menos yo no lo sé, solo permite 1 por tabla. Pero puedes hacer que "parezca". Le añades un campo Entero largo, llamado por ejemplo Loquesea. Y en el formulario que uses para meter los datos a esa tabla, en sus propiedades-eventos-al activar el registro crea un procedimiento de evento y entre Private Sub y End sub puedes poner

If isnull([loquesea]) then

loquesea=Idcliente(este es el autonumérico)

end if

Así, cuando vayas a un registro, como Loquesea la primera vez está en blanco, te copiará el valor de Idcliente.

Si la tabla ya tuviera datos, en un formulario podrías poner, en cualquier evento, por ejemplo Al hacer clic de un botón

docmd.setwarnings false

docm.runsql"update clientes set loquesea=idcliente"

Así te pondría en el campo Loquesea los mismo valores que hay en IdCliente

De todas formas, es difícil ver la necesidad de dos autonuméricos exactamente iguales en una misma tabla, habiendo como hay la posibilidad(hablo en formularios) de poner

loquesea=me.currentrecord

El inconveniente de los autonuméricos es que si en un determinado momento, eliminas, por ejemplo, el registro con idCliente=15 la secuencia numérica es per sécula

13

14

16

Cuando en realidad ya no tienes 16 registros, sino 15

Hola, ¿me podrías mandar algún ejemplo en fopto o archivo?, gracias

Si tengo una tabla Copia, con el diseño que ves, con un campo OtroId numérico

Y tengo el formulario, lo pongo continuo que se ve mejor

A medida que voy poniendo registros, tanto en Idcliente como en OtroId, va poniendo los números.

En este caso, le tengo puesto en el evento Al activar el registro( pero se puede hacer de mil formas)

If isnull([otroid]) then

otroid=idcliente

Endif

Pero que pasa si por necesidad "liquido" a Antonio, eliminando su registro

El idcliente me dice que son 7, lo que no es cierto y como es autonumérico, no tengo control sobre él. Pero si pulso el botón

El OtroId los ha "renumerado" de forma que hasta Adrián realmente hay 6 mientras que el Idcliente dice que hay 7.

El código del botón es

Private Sub Comando11_Click()
DoCmd.GoToRecord , , acFirst
Dim i As Integer
For i = 1 To Me.Recordset.RecordCount
OtroId = Me.CurrentRecord
DoCmd.GoToRecord , , acNext
Next
End Sub

Pero, como te decía, se puede hacer de muchas formas, todo depende de como lo quieras tú.

Si quieres, repito, si quieres, mándame un mensaje, sólo el mensaje, a [email protected] y te mando algún ejemplo.

Si lo haces, en el asunto del mensaje por tu alias Jorga NA, ya que si no sé quien me escribe ni los abro.

Exacto más o menos es eso, pero el campo otroid, quiero que sea autonumérico, aunque sea borre el cliente siga corriendo los números correlativos del campo otroid, no se si me explico.

En ese caso no hay nada que hacer, no puede haber dos autonuméricos en una misma tabla.

Respuesta
1

Una tabla solo puede tener un campo autonumérico, pero puede simularlo, algo como:

Observe hay 2 columnas con numeración consecutiva, nro_factura y nro_remision, cuando hago clic en la opción Factura obtengo el siguiente número de factura, igualmente, si hago clic en Remisión. Obtengo el número de la siguiente remisión Esto lo hago con la llamada a esta función:

Function sgte(ntipo As Integer) As Long
If ntipo = 1 Then ' siguiente factura
sgte = Nz(DMax("[nro_factura]", "tblventas"), 0) + 1
Else
sgte = Nz(DMax("[nro_remision]", "tblventas"), 0) + 1
End If
End Function

Si en ell parámetro ntipo el valor es 1 si quiero obtener el número para la siguiente factura y 2 para el número de la siguiente remisión.

Este es el código para el evento Al hacer clic del marco de opciones:

Private Sub numerar_Click()
  If numerar = 1 Then ' Factura

  Me.ctlfactura = sgte(1)
 Elsev ' Remisión
  Me.ctlremision = sgte(2)
 End If
End Sub

Bueno esto es solo una idea para simular campos autonumérico, hay mucho por hacer.

Bueno ma so menos lo entiendo, soy muy amateur aún, jejej si me podrías mandar un ejemplo en un archivo, si se puede claro.

Gracias

Puede solicitar el ejemplo a [email protected] 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas