Autor Tema: Obtener el ultimo ID autonumerico de una tabla Access  (Leído 24608 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
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #15 en: Noviembre 06, 2013, 11:38:19 am »
El tema de insertar primero el registro no me vale por que de repente podes cancelar el nuevo registro. Por ejemplo apretas el boton nuevo y despues cancelar entonces tengo que estar eliminando otra ves ese registro.

Ya me resigne que no se puede en access, por que formule en otro foros la misma pregunta y la verdad esta luego mal planteado como yo quiero. aunque en access iva a funcionar por que no va a ser multiusuario.

Lo que me explicaron en otro foro es que si yo ya se el id autonumerico que va a tener si en otra maquina esta registrando otro articulo puede que haya un duplicado pero eso solo pasaria en un multi usuario.
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 #16 en: Noviembre 06, 2013, 12:27:58 pm »
Pero amigo, apretan el boton nuevo registro... mostras el form de carga (seguramente modal), pero hasta que el tipo no le da click al OK, no se agrega el registro, y si le da cancelar, simplemente cerras el form, pero no hiciste ningun cambio en la base. resumiendo el INSERT recien se aplica cuando el tipo da OK, ahi ya no puede cancelar nada

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 #17 en: Noviembre 06, 2013, 01:12:17 pm »
Claro primero hay un formulario donde muestra la lista de articulos, se aprieta un boton NUEVO abre otro form (al apretar el boton nuevo capturo el nuevo id autonumerico anoto en un label)

Después al pulsar el Boton GUARDAR se guarda el registro mas el archivo .jpg con el id que capture.

Si presiono cancelar no pasa nada. Siempre al pulsar nuevo capturo el ID.
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 #18 en: Noviembre 06, 2013, 01:46:50 pm »
cada uno tiene sus criterios, pero yo haria que cuando el tipo le da guardar, recien ahi hago el INSERT, busco cual fue el ultimo ID creado en la tabla, y ahi mismo con ese ID creo el jpg

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 #19 en: Noviembre 06, 2013, 03:14:59 pm »
El tema es ahi SI ES multiusuario al mismo tiempo si se guardo 2 registro el sistema va estirar lo que el otro usuario ha creado, por eso decia que este metodo no es tan confiable aunque de mil en 1 puede pasar eso pero puede pasar, por eso dije que estaba mal planteado usar esta forma.

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 #20 en: Noviembre 06, 2013, 04:07:09 pm »
Bueno, creo que ahi lo pude hacer con el SELECT @@IDENTITY
Corri dos exe´s, hice INSERT en los dos, deje un msgbox en c/u en espera de aceptacion, luego consulte el ID, y cada exe devolvio el ID correcto.

Aca prepare un ejemplo
https://drive.google.com/file/d/0B5r4oJfTy3JLZ3BEWl9HZ3JoaDg/edit?usp=sharing


Código: [Seleccionar]

Option Explicit
Dim cn As Connection

Private Sub Command1_Click()
    Dim recAf As Integer
    Dim rs As Recordset
   
    cn.Execute "INSERT INTO Tabla1 (campo1) VALUES ('" & Format(Now) & "')", recAf, adCmdText + adExecuteNoRecords
    MsgBox "Reg. Insertado: " & recAf
   
    Set rs = cn.Execute("SELECT @@IDENTITY", , adCmdText)
    MsgBox "ID=" & rs(0)
   
    rs.Close
    Set rs = Nothing
   
End Sub

Private Sub Form_Load()
   
    Set cn = New Connection
    cn.Open CnnString_JET40(App.Path & "\bd1.mdb")
   
   
End Sub

Private Sub Form_Unload(Cancel As Integer)
   
    cn.Close
    Set cn = Nothing
   
End Sub

Public Function CnnString_JET40(ByVal sPath_con_MDB As String, Optional sPassword As String = "") As String

    Dim strTmp As String
   
    If sPassword <> vbNullString Then
        strTmp = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPath_con_MDB & ";" & _
                "Jet OLEDB:Database Password=" & sPassword & ";"
    Else
        strTmp = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=" & sPath_con_MDB & ";" & _
                "User Id=admin;Password=;"
    End If
   
    Debug.Print strTmp
   
    CnnString_JET40 = strTmp
   
End Function






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 #21 en: Noviembre 06, 2013, 07:11:54 pm »
El tema es ahi SI ES multiusuario al mismo tiempo si se guardo 2 registro el sistema va estirar lo que el otro usuario ha creado, por eso decia que este metodo no es tan confiable aunque de mil en 1 puede pasar eso pero puede pasar, por eso dije que estaba mal planteado usar esta forma.

Saludos...

El código de Waldo es tu solución.

Comentario aparte:
Papa, es que tu no usas transacciones (begin/commit/roll) y si vas a estar en red debes usar ello para que no tengas ese temor de si otro usuario toma el id ya tomado, incluso con Access se puede aplicar el begin/commit.

Al margen de lo anterior y dado que comentas sobre una tabla maestra, quizás debas revisar la usabilidad puesto que no todos los módulos debieran estar a la mano de usuarios que lo usen a la vez desde dos o mas pcs, considero que los maestros de artículos no debe operarse en mas de un terminal a la vez, "que se pueda no implica que se deba", eso ya pasa por un tema de seguir procedimientos, y la posibilidad de que alguien rompa el procedimiento mas la posibilidad de que lo hagan a la vez a la misma tabla es tan ínfima que no vale la pena ningún esfuerzo, bien por hacerlo y lograr cubrir todas las excepciones posibles pero te cuento que con mas de 5 años de rigor con programas que corren en red en varias empresas, con un batallón de usuarios salvajes y con el único mandato verbal a dichos usuarios de que ciertos módulos se operan SOLO en administración, NUNCA se me presentó un inconveniente así. ¿Que es posible que ocurra? SI, ¿Que es probable? lo veo muy improbable.
Fin del margen.

Checa trabajar con transacciones con mas razon si sera en red, acabo de probar con Access y efectivamente te perdona el autonumerico, o sea te lo devuelve y si dentro de esa transacción metes la consulta de recuperacion del ID ya tendrías un problema menos que abordar.

SAludos
 


   
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #22 en: Noviembre 07, 2013, 12:41:32 am »
El tema es ahi SI ES multiusuario al mismo tiempo si se guardo 2 registro el sistema va estirar lo que el otro usuario ha creado, por eso decia que este metodo no es tan confiable aunque de mil en 1 puede pasar eso pero puede pasar, por eso dije que estaba mal planteado usar esta forma.

Saludos...

Si es en red y usas access vas un poco limitado.

En MySQL puedes usar Locks de usuarios para saber si alguien esta insertando/editando un registro o ALGO en particular y así informar al usuario de esperar

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 #23 en: Noviembre 07, 2013, 10:40:52 am »
Solucionado con el code que paso el amigo Waldo. Lo de transacción si uso amigo Yban yo decia que se podia duplicar con el metodo que yo hacia por que al apretar nuevo leo el id y justo otro usuario puede apretar también nuevo y va a leer el mismo id.

Y lo ideal seria usar como paso Waldo insertar primero el registro leer el id y nombrar así a la foto.

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

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #24 en: Noviembre 11, 2013, 03:50:43 pm »
a ver si queda claro, el codigo usando la funcion MAX() es para "simular" un autonumerico, no es un autonumerico creado por la base de datos, es simplemente un campo entero que cuadno uno inserta, lo va incrementando manualmente + 1, sino no tendria sentido hacer el MAX(), ya que el campo sube automaticamente.

para obtener el codigo insertado de un campo "realmente autonumerico", hay que ejecutar "SELECT SCOPE_IDENTITY() AS id" luego de hacer el insert, esto en SQL Server.

wolf_kof

  • Visitante
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #25 en: Noviembre 14, 2013, 11:05:44 pm »
Estan perdiendo el tiempo, es sencillo dentro de la base de datos creas un campo temporal y lo pones como clave secundaria y guardas una variable, despues buscas el registro por esta variable y despues eliminas la variable dentro del campo para dejarlo nulo.

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 #26 en: Noviembre 15, 2013, 11:33:29 am »
El tema es ahi SI ES multiusuario al mismo tiempo si se guardo 2 registro el sistema va estirar lo que el otro usuario ha creado, por eso decia que este metodo no es tan confiable aunque de mil en 1 puede pasar eso pero puede pasar, por eso dije que estaba mal planteado usar esta forma.

Saludos...

Permiteme aclararte algo...!

Si el software es MULTIUSUARIO, dificilmente y estadisticamente es imposible que 2 usuarios al mismo tiempo, es decir en el MISMO SEGUNDO:MILISEGUNDO, hagan click...! Por tal motivo al momento de hacer el insert y consultar, es tan rapido, que no tendrías problemas..!

Yo ya he pasado por esto, y creeme no he tenido problemas..!

Saludos...!
Miguel Núñez.

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 #27 en: Noviembre 15, 2013, 12:03:34 pm »
Estan perdiendo el tiempo, es sencillo dentro de la base de datos creas un campo temporal y lo pones como clave secundaria y guardas una variable, despues buscas el registro por esta variable y despues eliminas la variable dentro del campo para dejarlo nulo.

No es perdida de tiempo papa, estamos dando diferentes opciones y puntos de vista, no creo que pienses que la solución que planteas sea la mejor para todos los escenarios. Ya el amigo Enter con toda esta buena info podra elegir la que mejor se adapte a resolver su problema.

Saludos
Me encuentras en YAcosta.com

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 #28 en: Noviembre 15, 2013, 12:05:35 pm »
El tema es ahi SI ES multiusuario al mismo tiempo si se guardo 2 registro el sistema va estirar lo que el otro usuario ha creado, por eso decia que este metodo no es tan confiable aunque de mil en 1 puede pasar eso pero puede pasar, por eso dije que estaba mal planteado usar esta forma.

Saludos...

Permiteme aclararte algo...!

Si el software es MULTIUSUARIO, dificilmente y estadisticamente es imposible que 2 usuarios al mismo tiempo, es decir en el MISMO SEGUNDO:MILISEGUNDO, hagan click...! Por tal motivo al momento de hacer el insert y consultar, es tan rapido, que no tendrías problemas..!

Yo ya he pasado por esto, y creeme no he tenido problemas..!

Saludos...!

Mas aun si usa transacciones (Begin/Commit) que hasta ahora no le creo a mi amigo Enter que las use jeje, lo digo porque en en ninguno de los codigos que publico he visto esa linea, mas bien siempre veo que por cada transacción abre la conexión, registra y la cierra como si trabajara en web.
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Obtener el ultimo ID autonumerico de una tabla Access
« Respuesta #29 en: Noviembre 15, 2013, 08:40:17 pm »
Permiteme aclararte algo...!

Si el software es MULTIUSUARIO, dificilmente y estadisticamente es imposible que 2 usuarios al mismo tiempo, es decir en el MISMO SEGUNDO:MILISEGUNDO, hagan click...! Por tal motivo al momento de hacer el insert y consultar, es tan rapido, que no tendrías problemas..!

Yo ya he pasado por esto, y creeme no he tenido problemas..!

Si pero hay mas factores a tener en cuenta. Se mandan consultas por separado, si la red es lenta (o por pura casualidad el programa se "cuelga"  ::) ) puede que se intercalen las consultas y salga mal, pero bueno, el margen existe :P