none
Generar consecutivo evitando que se duplique RRS feed

  • Pregunta

  • Hola

    Estoy generando un número consecutivo consultando el último registro de la tabla y sumandole 1 desde el Load, el problema es el siguiente:

    Cuando abro un formulario el codigo se ejecuta en el Load y genera el Consecutivo trayendo el último y sumandole 1 sin problema

    Pero si abro una segunda ventana obviamente me genera el mismo Consecutivo por que el último registro en la DB es el mismo para las dos peticiones.

    El código que uso es el siguiente:

    Dim ULTIMO As Integer, CONT As Integer, ID_GENERADO As Integer
            Dim conexion As String = ConfigurationManager.ConnectionStrings("PSMVSConnectionFinal").ConnectionString
            Using con As New SqlConnection(conexion)
                con.Open()
                Dim consulta As String = "Select TOP 1 ID_MANTENIMIENTO From MANTENIMIENTO Order By ID_MANTENIMIENTO DESC"
                Dim comando As New SqlCommand(consulta, con)
                Dim leer As SqlDataReader = comando.ExecuteReader()
                If leer.Read() = True Then
                    txtGet_ID.Text = leer("ID_MANTENIMIENTO").ToString()
                End If
            End Using
            ULTIMO = Integer.Parse(txtGet_ID.Text)
            CONT = 1
            ID_GENERADO = ULTIMO + CONT
            txtSet_ID.Text = ID_GENERADO


    Respuesta de foro Microsoft


    • Editado yulfredy viernes, 7 de julio de 2017 21:42
    viernes, 7 de julio de 2017 21:41

Respuestas

Todas las respuestas

  • Hola, haz considerado utilizar un campo identity, es autoincremental y automático en sql

    IDENTITY (propiedad de Transact-SQL)


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala.Solo dejo mis respuestas en el foro si son votadas o respuesta, de lo contrario por mantener el orden las borro.Saludos. Lima-Perú.

    sábado, 8 de julio de 2017 0:47
  • Hola

    Creo que no fuí lo sufucientemente claro con mi consulta.

    El inconveniente es al momento de hacer la peticion al servidor en simultaneo con varias páginas.

    con el campo IDENTITY consigo que cada registro tenga un ID consecutivo cada vez que se guarda un nuevo registro por tanto  ese no es el problema.

    Lo que necesito es abrir un formulario y que me muestre un Código unico, para eso lo que hago es que traigo el ultimo ID y le sumo 1 y de esta manera muestro y guardo el codigo consecutivo correspondiente.

    El problema es que si abro el formulario en varias pestañas me va a generar el mismo consecutivo ya que al momento de hacer la consulta en cada formulario el ultimo ID será el mismo.

    Realmente el problema es cuando se abre la pagina mas de una vez al tiempo ya que se duplica el codigo.

    gracias


    Respuesta de foro Microsoft


    • Editado yulfredy lunes, 10 de julio de 2017 19:17
    lunes, 10 de julio de 2017 19:14
  • Hola

    Creo que no fuí lo sufucientemente claro con mi consulta.

    El inconveniente es al momento de hacer la peticion al servidor en simultaneo con varias páginas.

    con el campo IDENTITY consigo que cada registro tenga un ID consecutivo cada vez que se guarda un nuevo registro por tanto  ese no es el problema.

    Lo que necesito es abrir un formulario y que me muestre un Código unico, para eso lo que hago es que traigo el ultimo ID y le sumo 1 y de esta manera muestro y guardo el codigo consecutivo correspondiente.

    El problema es que si abro el formulario en varias pestañas me va a generar el mismo consecutivo ya que al momento de hacer la consulta en cada formulario el ultimo ID será el mismo.

    Realmente el problema es cuando se abre la pagina mas de una vez al tiempo ya que se duplica el codigo.

    gracias


    Respuesta de foro Microsoft


    Hola, si entendí tu problemática , pero como lo quieres manejar siempre obtendrás id duplicados, entiendo que generas ese consecutivo para guardar un registro.la idea es que lo genere al momento de guardar y no antes o necesitas ver el consecutivo desde antes por alguna razon?

    Depndiendo de la versión de sql que utilzias podrías usar secuencias


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala.Solo dejo mis respuestas en el foro si son votadas o respuesta, de lo contrario por mantener el orden las borro.Saludos. Lima-Perú.

    lunes, 10 de julio de 2017 19:28
  • Hola Augusto1982

    Gracias por tu atensión.

    Efectivamente es necesario mostrar el Código generado, además hay una tabla que depende del código que se genere.

    Muchas gracias..


    Respuesta de foro Microsoft

    lunes, 10 de julio de 2017 19:42

  • Lo que necesito es abrir un formulario y que me muestre un Código unico, para eso lo que hago es que traigo el ultimo ID y le sumo 1 y de esta manera muestro y guardo el codigo consecutivo correspondiente.

    El problema es que si abro el formulario en varias pestañas me va a generar el mismo consecutivo ya que al momento de hacer la consulta en cada formulario el ultimo ID será el mismo.

    Realmente el problema es cuando se abre la pagina mas de una vez al tiempo ya que se duplica el codigo.

    gracias




    Lo que puedes realizar es crear una variable donde asignas el codigo de la base de datos solo si tu variable esta vacia y le vas sumando 1 cada vez que abra un formulario y tu variable ya no este vacia asi en tu formulario no se repetiran, lo pones a 0 al cerrar los formularios y en la base de datos para que no se dupliquen colocas la columna codigo como Unique asi no tendras repetidos.

    Espero te sirva de ayuda.

    Saludos.




    • Editado osrol lunes, 10 de julio de 2017 20:01
    lunes, 10 de julio de 2017 19:52
  • Hola Augusto1982

    Gracias por tu atensión.

    Efectivamente es necesario mostrar el Código generado, además hay una tabla que depende del código que se genere.

    Muchas gracias..


    Respuesta de foro Microsoft

    Hola, segun tu version de sql podrías crear secuencias, ademas, y menos recomendable puedes crear una tabla auxiliar que tenga el identity y cada vez qeu ingreses al load te genere el correlativo y lo muestras con la funcion select scope_identity y lo isnertas en la otra tabla , eso garantizará distintos correlativos mas no saltos en la secuencia.

    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala.Solo dejo mis respuestas en el foro si son votadas o respuesta, de lo contrario por mantener el orden las borro.Saludos. Lima-Perú.

    lunes, 10 de julio de 2017 20:33