¿Cómo hacer un código autonumérico en access?

Soy nueva en esta página, estudie access hace 4 años atrás, y ayer mi jefa me pidió que me encargara del área de los clientes... Entonces
Para ayudarme a mi mista decidí hacer una base de datos en acess. La cual me ayude a buscar ... Imprimir ... Hacer reportes... Etc... Y lo hice todo muy bien...
Mi problem es que NO RECUERDO EN ABSOLUTO como hacer un código que se autogenere.. Lo que quiero hacer es esto
"CLI00001"..."CLI0002"... ETC
Pero que al borrar un registro .. Por ejemplo si borro el registro con el código "CLI0002" no me autogenere CLI0003 SI NO VUELVA A GENERAR CLI0002...
Mi problema es peor aun no recuerdo que atributos se le pone al campo del código en la base de datos y que código ponerle en el depurador de visual. Lo intento pero simplemente no me sale estoy al borde de la locura y se que no es tan complicado pero no no me sale :(
Y lo peor es que mi jefa ya me vio haciéndolo y lo queré para mañana a primera hora...
Por el momento lo único que hace mi generador de código es darme 1,2,3,4,5,6... 15...
Borre los 15 rgistros y agrego 1 nuevo y me autogenera 16 lo borro y me autogenera 17... Ay :(

1 Respuesta

Respuesta
No utilices un autonumérico: crealo tu.
Imaginemos que tu código va a estar compuesto de 3 letras fijas (CLI) y 4 números, que debe ser secuenciales.
En el eventro Current del formulario dónde das de alta los clientes, y verificando que te encuentras en un nuevo registro, debes buscar el máximo y sumarle 1. Ese valor lo metes en lña propiedad Valor predeterminado del control dónde se muestra el código de cliente.
Dado que tu código es 'compuesto', el tema se complica un pelín.
If Me.NewRecord Then
  Dim strSQL As String, Dim rst As DAO.Recordset, myNumber As Integer
  strSQL = "SELECT Max(Val(Mid([CodCliente],4))) AS LastNum FROM tblClientes;"
  Set rst = CurrentDb.OpenRecordset(strSQL)
  If rst.EOF Then
        myNumber = 1
       Else
        myNumber = Nz(rst!LastNum, 0) + 1
  End If
  rst.Close
  Set rst = Nothing
  Me!CodCLiente.DefaultValue = "CLI" & Format(myNumber, "0000") 
End If
Escrito del tirón...
Ok
Entiendo muchas gracias...
Mira este es el código que tenia en el evento antes de insertar del formulario de clientes
Me.IdCliente = "CLI" & Format(1 + Val(Mid(Nz(DMax("IdCliente", "Clientes", "true"), "CLI000"), 2)), "CLI000")
Funciona pero cuando elimino un registro, no, si elminio el registro cli0004 y creo uno nuevo lo crea con cli0005 ay... ¿qué mal bueno pero en mi base de datos mi campo idcliente esta con autonumérico
entonces me indicas que debo cambiarlo a texto verdad?
muchas gracias... besos
Yo lo cambiaría a texto... aunque no acabo de ver la lógica en eso de que eliminas uno y se crea el nuevo como si aun existiera el viejo..
Xavi:
Cambien mi autonumérico a texto.
Me fui al formulario, click derecho
Evento
current
Y copie tu codigoa comodandolo a los nombres de mis campos
y me sale error en esa linea a la vez que se pone de color rojo.
Dim strSQL As String, Dim rst As DAO.Recordset, myNumber As Integer
Este es el código completo
If Me.NewRecord Then
  Dim strSQL As String, Dim rst As DAO.Recordset, myNumber As Integer
  strSQL = "SELECT Max(Val(Mid([IdCliente],4))) AS LastNum FROM tblClientes;"
  Set rst = CurrentDb.OpenRecordset(strSQL)
  If rst.EOF Then
        myNumber = 1
       Else
        myNumber = Nz(rst!LastNum, 0) + 1
  End If
  rst.Close
  Set rst = Nothing
  Me!IdCliente.DefaultValue = "CLI" & Format(myNumber, "0000")
End If
¿Lo qué creo es que coloque el código en el lugar equivocado
tengo un cmd nuevo debería de cololarlo ahí pero como si no ahí un evento current para los cmds?
:S
No, no está en el lugar equivocado. Lo que ocurre es que teclee demasiado deprisa. Si te fijas, esa linea dice 2 veces la palabra Dim. Quita la segunda y prueba.
Si! Tenias razón!...
¿Ahora el código no muestra ningún error pero al momento que corro el programa y lo ejecuto el el txt del código idcliente ni bien abro el formulario sale #numero?
Repasando hice esto
clicl derecho en formulario
Propriedades, busque el formulario, luego hice clicl en el evento antes de insertar, que me llevo al editor de visual y luego busque el evento current del formulario.
¿Ahí fue donde puse el código abre cometido algún error?
Deberías ejecutar paso a paso la función para ver dónde está fallando. Pones un punto de interrupción (pulsas F9) en la línea If Me. NewRecord. Cuando se ejecute la función se detendrá el código en esa linea y la puedes ejecutar paso a paso pulsando F8. Incluso puedes añadir inspecciones para ver que valores van tomando las variables de la función.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas