Access - Problema al compartir

   
Vista:

Problema al compartir

Publicado por kikemata (4 intervenciones) el 06/09/2007 16:12:27
Hola.
Tengo un formulario con un campo numérico que se incrementa en uno cada vez que se añade un registro. El problema que se me plantea es que si dos usuarios añaden un registro simulatánemente, a los dos registros les da el mismo número. No sé cómo solucionarlo. (el campo en cuestión es indexado sin duplicados, pero eso no es suficiente)
Gracias de antemano.
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:Problema al compartir

Publicado por Jordi (226 intervenciones) el 06/09/2007 17:33:59
En el evento donde se te incrementa el campo numérico en uno añade:
me.refresh
Así actualiza el registro que se está editando y si alguien abre otra vez el form el numero ya estará ocupado y cogerá el siguiente.
Suerte
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:Problema al compartir

Publicado por Enrique (1299 intervenciones) el 06/09/2007 18:26:32
El problema es que dos usuarios tengan ya abierto el Formulario al mismo tiempo, el primero que termine de introducir datos y cambie de registro o pulse un botón grabar, no tendrá problema pués grabará sus datos con el número que tiene, pero el otro usuario que tambien tiene el mismo número y que termina después, se encontrará con el error nº 3022 (No se permiten registros con NroReg duplicado). Este mismo caso se me presentó y más o menos lo solucioné de esta forma:

Pongo un botón Grabar y en su Evento Click

Private Sub Grabar_Click()
On Error GoTo NroExiste
'Si estamos en Reg. nuevo, o Reg. existente < = que el último, lo graba en la Tabla
If Me.NewRecord Or NroReg <= DMax("NroReg", "Tabla") Then DoCmd.RunCommand acCmdSaveRecord
End If
Exit Sub

'Si estamos en Nuevo Registro pero su número ya existe (caso del 2º usuario)
NroExiste:
If Err.Number = 3022 Then
Me.NroReg = DMax("NroReg", "Tabla") + 1
DoCmd.RunCommand acCmdSaveRecord
Else
Resume Next
End If
End Sub

El usuario que termine el último de introducir datos, provocará el error y se grabará el siguiente número al existente en la Tabla limpiamente sin mensaje de error.

Espero que te sirva. Saludos
Enrique
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:Problema al compartir

Publicado por Enrique (1299 intervenciones) el 06/09/2007 18:30:25
Esta parte ha salido mal en el mensaje, es así:

If Me.NewRecord Or NroReg <= DMax("NroReg", "Tabla") Then
DoCmd.RunCommand acCmdSaveRecord
End If
Exit Sub
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:Problema al compartir

Publicado por kikemata (4 intervenciones) el 06/09/2007 19:24:56
Hola Enrique:
Lo primero darte las gracias por tu ayuda.
Lo segundo darte la vara otra vez.
¿Este mismo código lo puedo situar en el evento al salir de otro campo del mismo formulario?
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:Problema al compartir

Publicado por Enrique (1299 intervenciones) el 06/09/2007 20:02:49
Por supuesto, lo puedes poner en cualquier Evento que quieras, pero observa que al ejecutarse, se graba en la tabla el registro que acabas de editar o crear sin cambiar de registro en el formulario y posiblemente se haga antes de terminar de crearlo. Además ya no habrá posibilidad de Deshacerlo.

Tambien tienes la opción de eliminar la línea del DoCmd.RunCommand..... pero entonces el registro solo se grabará al cerrar el Formulario o cambiar de registro. En cualquier caso, mientras el registro no se grabe en la Tabla, otro usuario puede coger el número sin problemas.

Fíjate que el código NO bloquea el número de registro hasta el final (cuando ya lo grabas definitivamente), porque si un usuario decide Cancelar la creación del registro en edición, no se producirá un salto de numeración en la Tabla si otro usuario mientras tanto, lo encontró ocupado y coge el siguiente. No se si me explico.

Prueba a ver que pasa y si te surge aguna duda me lo dices.

Saludos
Enrique
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:Problema al compartir

Publicado por kikemata (4 intervenciones) el 06/09/2007 21:32:48
Como es una cosa del curre hasta mañana no puedo probarlo.
Mañana te cuento.
Muchas gracias por tu atención.
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:Problema al compartir

Publicado por kikemata (4 intervenciones) el 07/09/2007 18:13:35
Funciona estupendamente. Muchas gracias por el cable Enrique.
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