Actualización tabla con datos de otra tabla con SQL

Tengo dos tablas LISTADO ALMACEN y PEDIDOS_REC

En la tabla LISTADO ALMACEN tengo varios campos:

- IDPIEZA

- DESCRIPCIÓN

- UBICACIÓN

- WPROD

- CANTIDAD

-          STOCK_MINIMO

-          NUM_SECCION

- IMAGEN PIEZA

- TIPO PIEZA

En la tabla PEDIDOS_REC tengo los campos:

-          ID_PED_REC

-          N_PEDIDO

- FECHA

- DESCRIPCIÓN

- UBICACIÓN

- WPROD

- CANTIDAD

-          FECHA_REC

El articulo solicitado tiene la misma ubicación en las 2 tablas.

Quiero que al pulsar un botón de confirmación de pedido recibido la cantidad que haya en la tabla de PEDIDOS_REC se incremente en la tabla LISTADO DE ALMACEN.

Supongo que es a través de la orden

    DoCmd.RunSQL "UPDATE [LISTADO ALMACEN] SET (condición)

Pero no se que condición poner exactamente para que me haga la modificación en la tabla de LISTADO ALMACEN solo en los artículos que haya en la tabla de PEDIDOS_REC.

1 respuesta

Respuesta
2

Suponiendo que esa instrucción la hagas desde el formulario PedidosRec, sería

Docmd.runsql"Update [listado almacen] set cantidad =cantidad +" & me.cantidad & " where descripción='" & me.descripción & "'"

¡Gracias Icue!

Mañana haré unas pruebas y te contesto dicendote como me ha ido.

Hola Icue,

Al ir a probar la explicación que me habías dado, me he fijado que no me he explicado bien en la pregunta.

Esta respuesta me vale para una actualización si los datos del articulo los introdujera en cuadros del formulario, pero esto no es así.

En el formulario me aparece la lista de pedidos realizada, esto es un ejemplo:

Cuando yo pulso para actualizar pedidos, en la tabla PEDIDOS_REC se me originan los registros de los pedidos recibidos:

A continuación lo que quiero es que automáticamente con la orden conveniente me actualice el campo cantidad en la tabla LISTADO ALMACEN de todos los registros que hay en PEDIDOS_REC.

Vamos a suponer que para "rellenar" los registros del subformulario utilizas algo así como

me!nombredelsubform.recordsource="select * from pedidos where idPedido=" & me.idpedido & ""

Suponiendo que el campo que relacione el formulario con el subformulario sea Idpedido.

Entonces, a continuación, podrías poner en el subformulario un botón. Por ejemplo, supongamos que tengo una tabla Clientes(que sería la tuya Listado Almacen)

Para no ponerle cantidad a todos, sólo se la he puesto a los de Alemania.

Luego tengo una tabla Otra(que sería la tuya Listado de Pedidos, que es igual a esta, donde por comodidad sólo le he puesto cantidad a los de Alemania)

Si tengo un formulario, con un botón de comando y el subformulario Otra.

Como en el botón Comando0, en el evento Al hacer clic le tengo puesto(ya que como te dije, no sé que criterio usas para seleccionar unos registros de la tabla Listado de pedidos, que podría ser IdPedido, IdCliente, etc,

Private Sub Comando0_Click()
Me!Otra.Form.RecordSource = "select * from otra where pais=""Alemania"""
End Sub

Cuando pulso el botón Comando0

Y cuando pulso el botón Actualizar Clientes del subformulario, al que le he puesto en su evento Al hacer clic

Private Sub Comando9_Click()
DoCmd.SetWarnings False
DoCmd.GoToRecord , , acFirst
Dim i As Byte
For i = 1 To Me.Recordset.RecordCount
DoCmd.RunSQL "update clientes set cantidad=cantidad+" & Me.Cantidad & " where nombrecliente='" & Me.NombreCliente & "'"
DoCmd.GoToRecord , , acNext
Next
End Sub

Me deja la tabla Clientes(Listado Almacén)

Hola Icue,

Perdona por la tardanza en contestar, pero he estado de viaje.

Me parecen buenas tus respuestas, pero no se ajustan a mi formulario.

Te explico mas detalladamente como funciona mi formulario:

Tengo el siguiente formulario (no hay subformularios), en el campo RECIBIDO/FECHA selecciono los pedidos recibidos con su fecha correspondiente

Al pulsar en el botón CONFIRMAR PEDIDOS RECIBIDOS mediante la orden:

        DoCmd.RunSQL "INSERT INTO PEDIDOS_REC (N_PEDIDO, FECHA, DESCRIPCIÓN, UBICACIÓN, WPROD, CANTIDAD, FECHA_REC) SELECT N_PEDIDO, FECHA, DESCRIPCIÓN, CODIGO, WPROD, CANTIDAD, F_RECIBIDO FROM [RESUMEN PEDIDOS] WHERE RECIBIDO= -1"

Se crean los registros en la tabla PEDIDOS_REC.

Despues con las siguientes ordenes elimino estos registros de la tabla de pedidos y actualizo el formulario

        DoCmd.RunSQL "Delete From [art_pedidos] Where [recibido] = -1"

        MsgBox "REGISTROS ACTUALIZADOS"

        Me.Requery

Ahora es cuando me surge mi duda, tengo en la tabla PEDIDOS_REC los pedidos recibidos con sus cantidades, quiero el poder actualizar la tabla LISTADO ALMACEN añadiendo las cantidades de los registros de PEDIDOS_REC

¿Podrías volver a colgar la imagen, pero antes pulsando

Tal como la has puesto no distingo ningún nombre y si intento darle con el zoom, mucho peor.? Sin embargo, si la adjuntas con ese botón el zoom de ésta página funciona muy bien.

Aquí tienes,

Yo no eliminaría los registros de la tabla Pedidos, pueden servir como histórico, puede servir para resolver una duda. No ocupa lugar.

Si tengo la tabla Productos(muy sencilla, porque mira que os gusta poner campos)

Y tengo la tabla Pedidos

Donde le he añadido un campo Sí/No para saber si ya lo he pasado a la tabla Productos.

Con ella hago un formulario donde en el origen de registros me muestre sólo aquellos que no están pasados a Productos y le añado un botón(luego te pongo el código)

Si pulso el botón, el formulario se me queda

Pero la tabla Productos

Y la tabla Pedidos

El código del botón es

DoCmd.SetWarnings False
DoCmd.GoToRecord , , acFirst
Dim i As Byte
For i = 1 To Me.Recordset.RecordCount
DoCmd.RunSQL "update productos set existencias=existencias+cantidad where producto='" & Me.Producto & "'"
Pasado = -1
DoCmd.GoToRecord , , acNext
Next
DoCmd. GoToRecord,, acFirst
Me. Requery

En esencia. Le digo que vaya al primer registro y que actualice el campo Existencias de la tabla productos a las que había más las que han entrado en aquel registro en que el producto sea igual al que figura en ese registro y que me marque la casilla Pasado como Sí. Que se vaya al siguiente registro y lo mismo. Así hasta el final y que el cursor vuelva al registro de inicio.

Luego le digo(para que el formulario se quede vacío, que "reconsulte" su origen de registros.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas