Actualizar registros tabla con autonumérico access

Estoy modificando mi base de datos de facturación y me ha surgido un problema

Resulta que quiero copiar los registros de una tabla a otra, pero al copiarlos me gustaría que en la tabla donde se van a copiar me actualice el campo Id por un autonumérico creado.

Los demás campos me los copia sin problemas pero al quere actualizar el autonumérico me copia el mismo registro.

Este es el código que estoy utilizando:


Private Function crearAlbaránMO() As String
Dim vAlbaránMO As Variant
Dim vUltimo As Variant

Dim año As Integer
año = Format(Date, "yy")
vUltimo = Right(DMax("IdAlbaránMO", "Albaranes Mano de obra"), 3)
If IsNull(vUltimo) Then vUltimo = 0
vUltimo = vUltimo + 1
vAlbaránMO = (DLast("IdAlbarán", "Albaranes") & "/" & "MO" & "00" & vUltimo)
crearAlbaránMO = vAlbaránMO
End Function

Private Sub Comando44_Click()
DoCmd.RunSQL "insert into Albaranes (IdAlbarán,IdOT,IdVehículo) values ('" & crearAlbarán & "','" & Me.IdOT & "','" & Me.IdVehículo & "')"
DoCmd.RunSQL "insert into [Albaranes Mano de obra] select Descripción,Ctd from [OT Mano de obra] where IdOT='" & Me.IdOT & "'"
DoCmd.RunSQL "update [Albaranes Mano de obra] set IdAlbarán = dlast(""IdAlbarán"",""Albaranes"") where IdAlbarán is null"

DoCmd.RunSQL "update [Albaranes Mano de obra] set IdAlbaránMO ='" & crearAlbaránMO & "' where IdAlbarán = dlast(""IdAlbarán"",""Albaranes"")"
DoCmd.OpenForm "Albarán", , , "IdOT ='" & Me.IdOT & "'"
End If
End Sub

Gracias por la ayuda

Respuesta
2

Por hacerlo puedes, aunque lo normal es poner un campo como autonumérico para no "tocarlo", dejarle a Access la "gestión", pero, la verdad, no le veo sentido. Si vas a introducir algún valor en el campo Id ¿para qué hacerlo autonumérico? Por ejemplo, si tengo la tabla Tabla1

En vista hoja de datos

Y en el formulario Clientes le digo que me guarde los valores en la tabla

Cuando pulso el botón

Me guarda el valor que le diga

Gracias Julián González Cabarcos por responder. El caso es que tengo un autonumérico personalizado, ejemplo: AL19-0001, y me gustaría que copiara los registros pero con el autonumérico diferente por registro

Vamos a ver si me aclaro, supongo que ese autonumérico estará en la tabla destino.

Si tengo la tabla Tabla1, con este diseño

En el formulario, me voy a un registro cualquiera

Y pulso el botón. Luego me voy a otro registro y pulso el botón

Y me voy a otro y pulso el botón

Con lo que la tabla me queda

El código del botón es

Private Sub Comando7_Click()
Dim i As Integer
i = Val(Right(Nz(DLast("id", "tabla1")), 4))
DoCmd.RunSQL "insert into tabla1(id,campoa,campob)values(""AL19""&""-""&format((" & i & " + 1),""0000""),nombrecliente,nombrecontacto)"
End Sub

En caso de que el 19 corresponda al año en curso podrías usar format(date(),"yy")

Perdona Julián González Cabarcos pero me he explicado mal

Al pulsar "Crear Albarán" me crea un nuevo Albarán copiando todos los datos de este formulario.

El problema viene al querer poner el autonumérico en el formulario "Albarán". Pongo en el botón este código:

Private Function crearAlbaránMO() As String
Dim vAlbaránMO As Variant
Dim vUltimo As Variant

Dim año As Integer
año = Format(Date, "yy")
vUltimo = Right(DMax("IdAlbaránMO", "Albaranes Mano de obra"), 3)
If IsNull(vUltimo) Then vUltimo = 0
vUltimo = vUltimo + 1
vAlbaránMO = (DLast("IdAlbarán", "Albaranes") & "/" & "MO" & "00" & vUltimo)
crearAlbaránMO = vAlbaránMO
End Function

Private Sub Comando44_Click()

DoCmd.RunSQL "update [Albaranes Mano de obra] set IdAlbaránMO ='" & crearAlbaránMO & "' where IdAlbarán = dlast(""IdAlbarán"",""Albaranes"")"

Me crea autonuméricos y me los inserta en la tabla (como en el cuadro naranja), todos iguales, pero yo los quisiera como el cuadro verde (consecutivos)

Es que en la instrucción que le das de Update no diferencias registros, por eso te pone en todos los mismo.

Me imagino que la instrucción que usas para "crear" los registros en la tabla Albarán será más o menos, algo así,

docmd.runsql"insert into Albarán(campoa, campoB,....select ....from.... 

Pues es esa misma instrucción la que tendrías que poner como te indiqué arriba.

Por cierto, lo de

If IsNull(vUltimo) Then vUltimo = 0
vUltimo = vUltimo + 1

No es necesario, para eso está la función Nz que transforma los nulos en ceros( o en el valor que quieras). Si yo pongo Nz(dlast(... si el último fuera nulo me transforma su valor en 0.

Recuperada la conexión a Internet. Si quieres, repito, si quieres, mándame un mensaje, sólo el mensaje a [email protected] y te mando un par de ejemplos de como lo haría. Si lo haces, en el asunto del mensaje pon tu alias A. Sanc ya que si no sé quien me escribe ni los abro.

Hola @icue. Me hace lo mismo que me hacía antes. Me inserta el mismo registro

Lo inserta así:

AL19-0001/001

AL19-0001/001

AL19-0001/001

Y me gustaría así:

AL19-0001/001

AL19-0001/002

AL19-0001/003

Siendo "19" el año, "0001" el IdAlbarán" y "001" el autonumérico

No entiendo nada. ¿Tiene qué pasar al subformulario de la derecha los mismos registros que hay a la izquierda? ¿El Id de la derecha sólo se diferencia en la letra del final? ¿Para qué poner el valor del año, si está en el Id de la izquierda?

Si tengo el formulario1 con los dos subformularios

El botón lo paso al subformulario Albaran. En cuanto lo pulso

El código del botón es

Private Sub Comando8_Click()
DoCmd.GoToRecord , , acFirst
Dim i As Byte
For i = 1 To Me.Recordset.RecordCount
DoCmd. RunSQL "insert into loquesea(idloquesea, otrafecha, concepto, costo) values(idalbaran, fecha, producto, precio)"
DoCmd.RunSQL "update loquesea set idloquesea=replace(idloquesea,""M"",""R"")"
DoCmd.GoToRecord , , acNext
Next
Forms!formulario1!LoQueSea.Form.Requery
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas