Como actualizar un registro de un Tabla "A" de Access después de actualizar un campo de otra Tabla "B" de Access?

Es un caso de Control de Inventario. Tengo 2 Tablas: "Tabla de AdE" y "Tabla de PyE" y necesito que, al actualizar y guardar el valor del campo "Existencia" de la "Tabla de AdE" se me actualice automáticamente el valor del campo de "Existencia" de la otra "Tabla de PyE" del mismo registro en cuestión. Yo cree un formulario con la Tabla de AdE para cargar Entradas de Productos Nuevos, Salidas de Productos por Ventas y Actualizar la existencia del producto automáticamente, solo me falta que en la Tabla de PyE se me actualice la existencia del Producto automáticamente para tener siempre disponible el dato.

2 Respuestas

Respuesta
2

Carlos: Supongo que la Existencia ya la calculas en el Formulario y evidentemente tienes el IdProducto.

Currentdb.Execute "UPDATE PyE SET PyE.Existencia= " & Me.Existencia & "  WHERE PyE.IdProducto= " & Me.IdProducto

Estoy suponiendo que el IdProducto es u Número.

Si fuera texto >> ......." WHERE PyE.IdProducto = '" & Me.IdProducto & "'"

Adapta los Nombres a los que tu tengas. Saludos >> Jacinto

Carlos: Se me ha pasado comentarte que si la Tabla se llama como citas arriba >>

Tabla de PyE en el código la has de poner entre corchetes >>[Tabla de PyE]

Mis saludos >> Jacinto

Hola Jacinto.

Efectivamente. Las Tablas se llaman: [Tabla de PyE] y [Tabla de AdE],

Déjame probar y te aviso,

Gracias

Jacinto,

Podrías verificar de nuevo, no veo que en el código nombras a la [Tabla AdE], que es la tabla con la que tengo el formulario creado y en donde se guardan los cálculos de la Existencia Definitiva con la entrada o salida de productos.

Carlos: La tabla en la que por defecto se guarde el Cálculo, no interviene en éste proceso.

Interviene el Formulario donde estás haciendo el cálculo y la Tabla de destino.

Interpretando que cada vez que haces un cálculo lo quieres guardar en "Ambas" Tablas.

Mis saludos >> Jacinto

Jacinto,

Me gustaría que al hacer clic en el botón "Guardar" se ejecute el código que me envías pero me genera un error '3144' en tiempo de ejecución. Error en sintaxis en la instrucción UPDATE. Lo tengo tal cual esta abajo, en donde "Descripcion" es la Clave Principal de la [Tabla de PyE] 

Private Sub Guardar_Click()
DoCmd.RunCommand acCmdSaveRecord
DoCmd.GoToRecord , , acNewRec

Currentdb.Execute "UPDATE [Tabla de PyE] SET [Tabla de PyE].Existencia= " & Me.Existencia & " WHERE [Tabla de PyE].Descripcion = '" & Me.Descripcion & "'"
End Sub

Saludos

Carlos: Sin repasar mucho y admitiendo que pueda haber un fallo en esa instrucción aunque creo que no, aquí el orden de Factores si que altera el Resultado.

Le estás diciendo que

Guarde el Registro, que "se vaya a uno nuevo" y que ejecute la consulta.

Evidentemente en el "Nuevo" no hay Datos.

Te podría haber dicho desde el inicio la solución, pero te suelto todo este rollo, porque creo que en otra ocasión lo tendrás en cuenta.

Concluyendo. Prueba con:

Private Sub Guardar_Click()
DoCmd.RunCommand acCmdSaveRecord
Currentdb.Execute "UPDATE [Tabla de PyE] SET [Tabla de PyE].Existencia= " & Me.Existencia & " WHERE [Tabla de PyE].Descripcion = '" & Me.Descripcion & "'"
DoCmd.GoToRecord , , acNewRec
End Sub

Mis saludos >> Jacinto

¡Gracias! Jacinto,

Perfecto. Si me había equivocado al colocar antes que vaya a un registro "Nuevo" pero con tu corrección ya fue solucionado.

Me funciona como quiero la base de datos. A excepción de que:

Solo me falta corregir que si el valor de la [Salida] es mayor que el valor de la [Existencia], el formulario me muestre un mensaje de advertencia indicando "Salida No Valida". Podrías darme una idea con este caso?

Saludos!

Carlos: De entre varias maneras de hacerlo, te comento una.

En el evento BeforeUpdate del Control Cantidad Salida que nombraré como QSalida

Private Sub QSalida_BeforeUpdate(Cancel As Integer)
Dim CriterioUno As String
Dim LaExistencia As Double
'Miro la cantidad de Existencia. >> JTJ: Si manejas un Id Numerico sería mejor que la Descripcion
CriterioUno = "Descripcion = ‘" & Me.Descripcion & “’”
LaExistencia = Nz(DLookUp("[Existencia]", "Tabla de PyE", CriterioUno), 0)
If LaExistencia <  Me.QSalida Then
        MsgBox "No hay suficiente Existencia para ésta salida........" & vbCrLf & "Tienes una cantidad en Stock de:    " & LaExistencia, vbCritical, "STOCK INSUFICIENTE"
        DoCmd.CancelEvent
        Me!QSalida.Undo
End If
CriterioUno = ""
LaExistencia = 0
QSalida_BeforeUpdate_Salir:
On Error GoTo 0
Exit Sub
QSalida_BeforeUpdate_TratamientoErrores:
MsgBox "Error " & Err & " en Procedimiento.: QSalida_BeforeUpdate de Documento VBA: Form_NombredelForm (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume QSalida_BeforeUpdate_Salir
End Sub

Espero no haya errores porque he ido escribiendo sobre la marcha.

Y una sugerencia Carlos. En éstos casos creo que es mejor generar una pregunta nueva, porque saldrás beneficiado de más de una respuesta. Aquí queda enmascarada y es poco probable que alguien lea todo el texto anterior para darse cuenta y responder.

Mis cordiales saludos >> Jacinto

Respuesta

La respuesta que tan es la correcta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas