Access - numero automatico.....

   
Vista:

numero automatico.....

Publicado por carlos jimenez (41 intervenciones) el 10/06/2008 19:27:50
quien sabe . . . . .

necesito hacer un un campo llave que me de el munero consecutivo del siguiente registro, es decir que si mi numero de "folio" anterior era el 100, automaticamente me de el 1001.

hay alguna funcion que me de el valor del ultimo registro de su campo llave?

no uso el campo autonumerico, por que si borran 1 registro mal capturado el siguiente se salta y al final tengo en mi tabla asi:
1,2,3,4,5,8,9,11,12,15 ect......

por su ayuda gracias....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:numero automatico.....

Publicado por pacopaz (50 intervenciones) el 10/06/2008 23:42:05
Como no mencionas si es el un comando insert u otra cosa, propondré la solución para un formulario ligado a tu tabla (es decir, que el recordset se refiera a la tabla que estás queriendo modificar).
Supongamos que el cuadro de texto del campo llave se llama Id y que el campo en la tabla también se llama Id. Y supongamos que guardas el registro a traves del click de un botón.
Busca el código que ejecuta el botón (normalmente puedes acceder a él en la vista de diseño del formulario, haciendo click con el botón derecho sobre el botón de guardado y escogiendo 'Generar evento...')
Antes de que ejecute cualquier cosa y luego del último dim, puedes insertar esto:

Dim rst As Recordset
Dim nId As Long
Set rst = Me.Recordset
rst.MoveFirst
nId = 1
While Not rst.EOF
If nId < rst.Fields(0).Value Then nId = rst.Fields(0).Value
rst.MoveNext
Wend
nIdContacto.Text = CStr(nId + 1)
rst.Close
Set rst = Nothing

Con esto, te evitas hacer un query a la tabla para poder saber el siguiente valor, aunque será más tardada según crezca la tabla.
La opción con query, sería esta:

Dim rst As Recordset
Dim cmd As Command

Set cmd = New Command
cmd.ActiveConnection = CurrentDb.Connection
cmd.CommandText = "select max(Id)+1 from Tabla"
Set rst = cmd.Execute
rst.MoveFirst
Id.Text = CStr(rst.Fields(0).Value)
Set cmd = Nothing
rst.Close
Set rst = Nothing

Con esto, la ejecución es mucho más rápida, aunque ocupará algo más de memoria.

Te recomiendo que sea justo antes de la inserción, por que así evitarías estar bloqueando y quizás duplicando Id's en un sistema distribuido.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:numero automatico.....

Publicado por mi menda (1111 intervenciones) el 11/06/2008 13:41:54
Hola Carlos:
Pues tienes la función DMáx() en access o DMax() en VBA.
CampoLLave = DMax("CampoLLave","NombreTabla")+1

Esta es una pregunta tipica del foro, sí búscas en él, encontrarás muchas respuestas.

Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar