Imprimir página | Cerrar ventana

Codigo para disminuir stock no funciona bien

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86736
Fecha de impresión: 27/Marzo/2026 a las 04:50


Tema: Codigo para disminuir stock no funciona bien
Publicado por: maxpro
Asunto: Codigo para disminuir stock no funciona bien
Fecha de publicación: 12/Julio/2023 a las 19:18
Estimados buen dia por aqui, en San Luis , Argentina.

Tengo un código que esta en un subformulario de ventas el cual tiene un campo "Cantidad" (nos centraremos en ese campo que es el que me esta causando problemas en el codigo) Antes que nada aclarar que tanto en la tabla, el la consulta y en el formulario el formato es Numerico, fijo y 0 decimales.

La consulta DisminuirStock es una consulta que depende de las tablas "tbProductos" relacionado por Id a la tabla "tbSalidas" y los campos son "Id" de "tbProductos" , "CantVentas" de "tbSalidas"

El codigo lo que debe hacer es agregar a la "tbSalidas" el valor que este en el campo cantidad al presionar el boton Guardar.

El problema es que si en el campo "Cantidad" coloco 1 el codigo en la tabla coloca 2 en lugar de 1, el codigo es el siguiente:

Private Sub Guardar_Click()
    Dim rs As DAO.Recordset
    Set rs = Me![VentaRapidaSub Subformulario].Form.RecordsetClone
    
    rs.MoveFirst
    
    Do Until rs.EOF
        ' Obtener el código del producto
        Dim Codigo As String
        Codigo = rs("Codigo")
        
        ' Actualizar la tabla DisminuirStock para el producto actual
        Dim strSQL As String
        strSQL = "UPDATE DisminuirStock SET DisminuirStock.CantVentas = DisminuirStock.CantVentas + " & CInt(rs("Cantidad")) & " WHERE DisminuirStock.Id = '" & Codigo & "'"

        CurrentDb.Execute strSQL
        
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
MsgBox "El Stock de los Productos se ha Actualizado correctamente.", vbInformation, "Actualizar Stock"
DoCmd.GoToRecord , , acNewRec
End Sub

Saludos


-------------
-------Maxpro-------

San Luis - Argentina



Respuestas:
Publicado por: pitxiku
Fecha de publicación: 15/Julio/2023 a las 23:13
A mí no me gusta ejecutar consultas de acción (UPDATE) sobre consultas de selección, te puedes encontrar resultados extraños. Como al final lo que interesa ajustar es un campo de una tabla, es más seguro dirigirse directamente a ese campo:

strSQL = "UPDATE tbSalidas SET tbSalidas.CantVentas = tbSalidas.CantVentas + " & CInt(rs("Cantidad")) & " WHERE tbSalidas.Id = '" & Codigo & "'"

Pero tú tienes datos en un subformulario, y por lo que parece, está basado en una consulta o tabla. Así, la pregunta es: ¿de qué tabla o consulta toma los datos ese subformulario? Porque también puede ocurrir que estés actualizando esa cantidad 2 veces.


Publicado por: maxpro
Fecha de publicación: 17/Julio/2023 a las 15:46
Hola pitxiku.

Estoy revisando el código porque aun poniendo el nombre de la tabla no hace nada el codigo! me sale el msgbox que se realizo exitosamente pero aun asi no modifica nada.

Gracias igual por tu recomendacion.

Saludos


-------------
-------Maxpro-------

San Luis - Argentina


Publicado por: pitxiku
Fecha de publicación: 17/Julio/2023 a las 18:59
Si sigues con el primer código que posteaste, el MsgBox saldrá siempre que no ocurra un fallo, independientemente de si se actualizó algún registro.

Pon un punto de interrupción para ver los valores de las variables, valores, controles,... O usa la ventana Inmediato para ver la sentencia SQL que estás ejecutando. Te será más fácil para encontrar el fallo.


Publicado por: maxpro
Fecha de publicación: 17/Julio/2023 a las 22:06
Si, fue lo primero que hice y nada, ningun error pero sigue sin funcionar, lo reescribi y ahi funciona!
el nuevo codigo es:

Private Sub Guardar_Click()
    Dim rs As DAO.Recordset
    Set rs = Me![VentaRapidaSub Subformulario].Form.RecordsetClone
    
    rs.MoveFirst
    
    Do Until rs.EOF
        ' Obtener el código del producto
        Dim Codigo As String
        Codigo = rs("Codigo")
        
        ' Actualizar la tabla DisminuirStock para el producto actual
        Dim strSQL As String
        strSQL = "UPDATE tbSalidas SET tbSalidas.CantVentas = tbSalidas.CantVentas + " & rs("Cantidad") & " WHERE tbSalidas.Id_Venta = '" & Codigo & "'"
        CurrentDb.Execute strSQL
        
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
    MsgBox "El Stock de los Productos se ha Actualizado correctamente.", vbInformation, "Actualizar Stock"
    DoCmd.GoToRecord , , acNewRec
End Sub

Gracias igual por preocuparte en colaborar.
Saludos.

Edito: Ya se puede cerrar el hilo.


-------------
-------Maxpro-------

San Luis - Argentina



Imprimir página | Cerrar ventana