Problemas al generar numexpte automático dependiendo del año en curso.

Tengo este código de vb6 en un formulario para la introducción de artículos. El problema es que en un momento indeterminado deja de generar el número de expediente automático (e.j. 009/2017) y a partir de ese momento siempre que se intenta registrar un artículo nuevo dá el mismo número de expediente y no lo graba en la base de datos, y no hay forma de que asigne el siguiente al que ya existe en la base.

¿Podríais decirme como solucionarlo?.

Case "Guardar"

            Dim vAutonum As Variant

            Dim vUltimo As Variant

            Dim db As DAO.Database

            Dim rst As DAO.Recordset

            Dim miSQL As String

                        Set db = OpenDatabase(App.Path & "\BD\Productos.mdb")

             miSQL = "SELECT NUMEXPTE FROM ARTICULOS WHERE Right (NUMEXPTE,4)=" & Year(Me.DTPicker2.Value)

            Set rst = db.OpenRecordset(miSQL)

                If rst.RecordCount = 0 Then

                    vUltimo = 0

                Else

                    rst.MoveLast

                    vUltimo = Left(rst("NUMEXPTE"), 3)

                End If

            rst.Close

            Set rst = Nothing

            Set rst = db.OpenRecordset("ARTICULOS")

            vAutonum = vUltimo + 1

            Me.EXPTE = Format(vAutonum, "000") & "/" & Year(Me.DTPicker2.Value)

            rst.AddNew

                rst("NUMEXPTE") = Me.EXPTE

                rst("ORIGEN") = Me.Combo1

                rst("DESTINO") = Me.Text1

                rst("CANTIDAD") = Me.Text2

                rst("PRECIO") = Me.Text3

                rst("NOMBRE") = Me.Combo2

                If Text4.Text = "" Or Null Then

                    rst("TIPO") = "0"

                Else

                    rst("TIPO") = Me.Text4

                End If

                rst("FECHA") = Me.DTPicker2

                 rst.Update

            Me.Text13 = rst("ID")

            MsgBox "Registro Guardado"

            rst.Close

            Set rst = Nothing

            db.Close

            Set db = Nothing

1 Respuesta

Respuesta
1

Por un lado me he perdido con tanto código, por otro lado te contestará desde lo mío, que es Access. Para hacerlo de una forma sencilla

En el formulario crea un botón y en el evento al hacer clic pon

docmd.setwarnings false

dim i as integer

for i=form.currentrecord to form.recordset.recordcount

numexpte=format(form.currentrecord,"000")&""&year(date()

docmd.gotorecord,,acnext

next

Luego en vista formulario posiciona el cursor en el primer registro en que Numexpte esté vacío y pulsa el botón. Irá recorriendo los registro poniéndole el numexpte que le corresponda

Por las prisas. Sería &"/"&

Gracias por contestarme, Icue.

Si el código es de Access no me sirve. Este programa esta en vb6 y aunque es parecido no funciona. En Access tengo un código parecido y nunca me falló, pero lo traslade a vb6 y me daba errores. 

Este código funciona hasta que en un momento indeterminado me da un numero de expediente que ya existe, siempre el mismo, y de hay no pasa. No tiene por que ser el ultimo que exista en la base de datos con ese año, sino que sale uno aleatorio.

Este código en teoría al darle al boton guardar debería recorrer la tabla en busca del ultimo número de expte/año y asignarle el siguiente y funciona bien hasta que le pasa eso. Puede ser después de haber grabado 70 como al haber grabado 10-

De todas forma intentare adaptar el código que me has enviado haber que pasa.

Ya te dije que lo mío es el Access. Siento no poder ayudarte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas