Autor Tema: Obtener el ultimo ID autonumerico de una tabla Access  (Leído 24602 veces)

0 Usuarios y 1 Visitante están viendo este tema.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Obtener el ultimo ID autonumerico de una tabla Access
« en: Noviembre 04, 2013, 03:45:56 pm »
Hola este codigo me funciona muy bien para MySQL era que me paso el amigo Seba para access alguien tiene idea de como es.

Código: (VB) [Seleccionar]
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Conectar la Base Datos con ADO
        Call ConectarADO
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
       
        StrSQL = "SELECT AUTO_INCREMENT AS id FROM information_schema.Tables WHERE TABLE_SCHEMA='bodega' AND table_name='articulos'"
        rsADO.Open StrSQL, cnADO, adOpenStatic, adLockOptimistic, adCmdText

        Do Until rsADO.EOF
            With rsADO
                lblFoto.Caption = .Fields("id")
                rsADO.MoveNext
            End With
        Loop
   
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Cerrar la base de datos y liberar la memoria
        Call CerrarADO
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #1 en: Noviembre 05, 2013, 10:11:05 am »
Hola amigo Enter, en teoria deberia funcionar la misma instruccion que se utiliza para SQL Server:
"SELECT @@IDENTITY" devuelve el ultimo autonumerico creado, yo lo quise probar y no me funcionó, debe ser un jet4.0.
Aca hablan un poco el tema:
http://www.xtremevbtalk.com/archive/index.php/t-299232.html

Y sino la otra es hacer directamente un : SELECT MAX(campoID) as ID FROM TuTabla y listo, ahi obtenes el ID mas alto de la tabla

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #2 en: Noviembre 05, 2013, 10:59:04 am »
Con este creo que ya soluciono amigo. Te agradezco.

Código: (SQL) [Seleccionar]
SELECT MAX(campoID) as ID FROM TuTabla
Saludos...
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #3 en: Noviembre 05, 2013, 11:15:43 am »
Un pequeño detalle con lo que me habia pasado el amigo Seba, por ejemplo si el ultimo ID fue 5 el proximo tiene que ser 6 el codigo que mostre arriba ya te trae lo que va a ser el nuevo ID o sea el 6

Pero con el codigo que me pasaste lo solucione asi:

Código: (SQL) [Seleccionar]
SELECT MAX(campoID+1) AS ID FROM TuTabla
Saludos...
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #4 en: Noviembre 05, 2013, 11:53:40 am »
Un pequeño detalle con lo que me habia pasado el amigo Seba, por ejemplo si el ultimo ID fue 5 el proximo tiene que ser 6 el codigo que mostre arriba ya te trae lo que va a ser el nuevo ID o sea el 6

Pero con el codigo que me pasaste lo solucione asi:

Código: (SQL) [Seleccionar]
SELECT MAX(campoID+1) AS ID FROM TuTabla
Saludos...

Buenos días,

Enter esto no es del todo correcto. Te explico la razón:

si creas un registro con el ID 6, el proximo ID debería ser 7, y en teoría es el 7. Pero que pasa si creas el ID 7 y luego lo borras?
Cuando vas a crear el nuevo Registro, el ID que tendrás será el 8 y no el 7. Tendrás un error allí.

Espero me comprendas la idea.

Saludos
Miguel Núñez.

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #5 en: Noviembre 05, 2013, 11:54:41 am »
ah..si claro el MAX justamente obtiene el mas alto, pero pensé que querias saber cual fuel el ultimo ID para usarlo con alguna otra consulta.
Ahora si le sumas uno, como es la cosa? la tabla no es autoincremento y vos elegis el ID "a mano" ?
O es autonumerico e imaginas que el 6 va a ser el proximo? ojo con eso porque si estas insertando un nuevo registro(autonumerico) y da error, el 6 que era el generado, dio error y no se agrego a la tabla, es decir que la tabla te va a quedar 5,7

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #6 en: Noviembre 05, 2013, 12:35:18 pm »
ojo con eso porque si estas insertando un nuevo registro(autonumerico) y da error, el 6 que era el generado, dio error y no se agrego a la tabla, es decir que la tabla te va a quedar 5,7
¿Eso no se soluciona trabajndo con transacciones? Lo que quiero decir es: si abrís una transacción y luego intentás insertar un registro que, como decís, da error, ¿al hacer RollBackTrans (en VB6.0) no anula todo y deja intacto el que sería el siguiente id (en este ejemplo, el 6)?

Jerónimo

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #7 en: Noviembre 05, 2013, 01:12:47 pm »
Tenes razon Miguel, justamente por eso era que me paso ese metodo Seba. Lo que yo quiero hacer "algo que me funciono muy bien en MySQL" saber cual va a ser el nuevo id autonumerico de esa tabla me sirve para nombrar un archivo que va estar relacionado con el articulo.

Asi creo un nuevo registro leo cual va a ser el nuevo ID autonumerico y a la foto lo llamo lo que me devuelve el id autonumerico.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #8 en: Noviembre 05, 2013, 02:54:57 pm »
ojo con eso porque si estas insertando un nuevo registro(autonumerico) y da error, el 6 que era el generado, dio error y no se agrego a la tabla, es decir que la tabla te va a quedar 5,7
¿Eso no se soluciona trabajndo con transacciones? Lo que quiero decir es: si abrís una transacción y luego intentás insertar un registro que, como decís, da error, ¿al hacer RollBackTrans (en VB6.0) no anula todo y deja intacto el que sería el siguiente id (en este ejemplo, el 6)?

Jerónimo

OFF TOPIC:
Hola amigo Jeronimo, no se como es en Access y no lo he probado en otros motores, pero solo por si aca el comentario te sea util, en el caso de Firebird cuando dentro de una transacción tocaste un campo "autonumerico" y luego haces el rollback el "autonumerico" no se revierte porque se realiza fuera de la transacción al llamar a un trigger que hace el incremento. Hace un par de años ese detalle me frego un trabajo pues cuando hacia un rollback y veia el generador este no regresaba al numero anterior, en este caso se utiliza otro metodo que ya no viene a cuento explicarlo en este post, lo que remarco es que chequen si Access (puede que si pq Access perdona mucho lo cual no es serio) tras un rollback recompone el id.

ENTER
El Max devuelve el ultimo registro grabado dentro de la columna a la que le apliques dicho Max, luego, no uses MAX(campoID+1) sino MAX(campoID) + 1, si vas a usar Max entonces mejor gestiona tus propios numéricos con una tabla aparte y solo consultas a esa tabla (que solo seria con un simple select a una tabla pequeña) porque como dice Miguel tienes el problema de los borrados. Mas de Access y su motorcito Jet no se.

:-)
« última modificación: Noviembre 05, 2013, 02:57:09 pm por YAcosta »
Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #9 en: Noviembre 05, 2013, 03:27:05 pm »
Como siempre, Yván, muchas gracias por tu explicación. Desconocía el detalle técnico. Hace mucho tiempo me había pasado lo que contás, pero no recordaba si había trabajado con transacciones, por lo cual no estaba seguro de lo que sucedía en esos casos.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #10 en: Noviembre 05, 2013, 04:29:42 pm »
Ojo, que con la alternativa de una tabla de numéricos si controlas por transacción, es decir, si haces un rollback allí si te retorna el valor previo porque estas gestionando desde la transacción que abrió el aplicativo ademas que estamos con una tabla común y silvestre, en algunos casos esta forma va pero muy bien, en otros no, eso dependerá de las necesidades del amigo ENTER.
Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #11 en: Noviembre 05, 2013, 05:29:05 pm »
Exactamente. ¡Gracias!

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #12 en: Noviembre 05, 2013, 06:26:26 pm »
El tema es que no quiero usar otra tabla, la idea de saber cual va a ser el autonumerico que va a generar es que ese numero uso para nombrar un archivo .jpg que se va a grabar en una carpeta determinada.

Eso me sirve para eliminar, editar, mostrar etc solo con obtener el id del articulo.

Saludos...
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #13 en: Noviembre 06, 2013, 09:36:03 am »
De curioso nomas, y no es mejor una vez que se genere el ID ahi generar el archivo, ya sabiendo que el id se creo en la base?

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #14 en: Noviembre 06, 2013, 09:45:08 am »
Entiendo que ENTER quiere hacer todo en la misma consulta.
Si no fuese ese el caso, yo primero insertaría el registro y luego consultaría qué id se asignó a ese registro y luego lo emplearía para guardar el archivo, etc.
Código: (SQL) [Seleccionar]
SELECT MAX(campoID) AS IDMaximo FROM TuTablaO...
Código: (SQL) [Seleccionar]
SELECT ID FROM TuTabla ORDER BY ID DESC LIMIT 1
« última modificación: Noviembre 06, 2013, 09:46:51 am por Jeronimo »