[ACCESS]Detener la insercion de datos si hay un error

Para todos los que leen, gracias a los comentarios de los expertos en un post anterior pude resolver una de las inquietudes que se me presentaron. Ahora el problema es otro, con el mismo formulario de las salidas de los productos. Tengo el siguiente código para que en el campo "Cantidad" del producto que se desea extraer verifique si hay stock suficiente o si queda bajo nivel al realizar la operación.

Dim vCantProd, vCantProdS, vIdProd, Aux As Integer
Dim rst As DAO.Recordset
vProd = Nz(Me.Cuadro_combinado32.Value, 0)
vCantProd = Nz(Me.Texto42.Value, 0)
If vCantProd = 0 Then Exit Sub
Set rst = CurrentDb.OpenRecordset("ConsultaEnt", dbOpenSnapshot)
With rst
.MoveFirst
Do Until .EOF
If .Fields("IdProd").Value = vProd Then
    vCantProdS = .Fields("CantProd").Value
    Aux = .Fields("CantProd").Value
    vCantProdS = vCantProdS - vCantProd
    Select Case vCantProdS
        Case Is < 0
            If Aux = 1 Then
                MsgBox "No hay cantidad suficiente de este producto en almacen" & vbCrLf & vbCrlf_ & "El stock actual del producto es " & .Fields("CantProd").Value & " unidad", "SIN STOCK"
            End If
            If Aux > 1 Then
                MsgBox "No hay cantidad suficiente de este producto en almacen" & vbCrLf & vbCrlf_ & "El stock actual del producto es " & .Fields("CantProd").Value & " unidades", "SIN STOCK"
            End If
        Exit Do
        Case Is <= 5
            MsgBox "Atención en almacen solo quedan" & vCantProdS & " unidades", vbInformation, "STOCK CRÍTICO"
        Exit Do
    End Select
End If
.MoveNext
Loop
End With
rst.Close
Set rst = Nothing

el problema con este codigo es que aunque lanza las advertencias y comprueba todo perfectamente los registros se siguen agregando, y no se restan de la tabla productos(eso es otro tema). Por ejemplo tengo 3 lápices en sotck y puedo dar salida a 100 si así lo deseo, habiendose mostrado las alertas correspondientes. Se puede hacer lo que necesito o estoy exigiendo demasiado de ACCESS??

Gracias de antemano a los expertos que invierten su tiempo aqui para ayudar.

Respuesta
2

A mi ma da que has seguido un ejemplo de Neckkito (gestión almacén), pero te has olvidado de ponerle la parte en la que borra la cantidad de "salida" si no hay stock suficiente y vuelve el foco al cuadro de texto para que pongas una cantidad válida... Si a mayores pones el campo como requerido en la tabla, ya no te dejará guardar el registro si no metes una cantidad válida.

Otra forma sería poner el código tal como lo tienes en el evento "antes de actualizar" del campo de las cantidades, y tendrías que añadir una linea Cancel=True en cada if que no cumpla las condiciones mínimas de stock, por ejemplo:

 If Aux = 1 Then
    MsgBox "No hay cantidad suficiente de este producto en almacen" & vbCrLf & vbCrlf_ & "El stock actual del producto es " & .Fields("CantProd").Value & " unidad", "SIN STOCK"
    Cancel=True
End If

Con esta forma, no te dejará salir del campo cantidad hasta que pongas una cantidad válida o canceles el registro pulsando ESC.

Y lugo, claro está, habría formas de hacerlo por código, borrando los valores de todos los cuadros de texto del registro, o el propio registro, o bien usando formularios independientes y pasar los datos a la tabla con recordsets o SQLs, pero ya es harina de otro costal...

Un saludo.


Sveinbjorn El Rojo, mi estimado experto, he tratado de colocar la parte del foco pero me salta error de compitación en el editor VBA, en efecto, como usted me recomendó en el post anterior seguí uno de los ejemplos de Neckkito. El código está modificado pues sé programar en php y por eso entiendo algo de la sintaxis de vba, o al menos reconozco las estructuras, pero solo eso. Ahora he incorporado el código que ud me ha dado, pero sin embargo sigue guardando los registros

Pues con lo del foco has hecho algo mal, porque si analizas el ejemplo de Neckkito, verás que funciona perfectamente.

Y con lo que te sugería yo, también te debes haber saltado algo, porque no hay forma de que te deje seguir cubriendo campos si no hay stock suficiente. Pero como no sé exactamente lo que has hecho, te diría que leyeses de nuevo mi respuesta y/o el ejemplo, según la opción por la que prefieras tirar.

Y si quieres ir más allá y controlarlo a la perfección, también en la web de Neckkito tienes una serie de ejemplos míos en los que explico diversas formas de trabajar con formularios independientes.

master como le puedo hacer llegar mi bd para si ud tiene un tiempo y si lo desea me ayude pues ya mis ojos no aguantan de tanto revisar y no veo errores. Puede ser??

Súbela a la nube y pon aquí el enlace de descarga. Pero no subas la Bd entera, sino sólo aquellos elementos que intervienen directamente en tu consulta.

Estimado profesor aquí esta la bd almacen la he subido completa pues ante las dificultades que he tenido para encontrar soluciones a mi problema, lo que resulte de mis dudas y sus conocimientos lo compartiré para el bien común. Si a usted no le molesta.

A la BD que envías (con el código en el evento "antes de actualizar") no le veo ningún problema, si metes una cantidad de salida excesiva, te saltan los avisos y no te deja hacer nada hasta que pones una válida, y si cierras el formulario "a las bravas", el registro no se guarda (como te dice el mensaje de Access). Entonces ya tienes lo que estabas buscando...

A mayores, si quieres evitar que el usuario "haga trampas" y cree un registro con salida 0 o negativa, ponle en la tabla una regla de validación a ese campo que sea mayor que 0.

Profe disculpe usted la molestia pero la base de datos tiene el mismo problema, he grabado un video donde se muestra el problema en cuestión si puede verlo le estaría eternamente agradecido

https://drive.google.com/open?id=1RkIl5CDmIHSvBAG6HWtCsYHks3Gz_K1z 

Primero: lo que muestras en el vídeo es la forma más "extraña" de agregar registros a una tabla. Nadie que maneje mínimamente Access va a pasar a Vista Diseño del formulario, abrir la tabla y actualizarla...

Segundo: es hacer trampa. Porque al pasar a vista diseño, los valores que has escrito en los cuadros "están ahí", pero no se ejecutan las validaciones que tengas por macros o códigos...

Tercero: Tu botón "guardar" no hace nada porque no lo tienes programado (al menos en lo que me envías)

Haz esto: mete 100 de cantidad de salida del producto, e intenta hacer cualquier cosa en el formulario. No te dejará. Cierra el formulario con el botón X de la esquina (te dirá que no se puede guardar) y abre la tabla de salidas. Verás que no se guardó nada.

Conclusión: funciona perfectamente. Lo que tú haces en el vídeo, no es normal.

Y si tienes pensado seguir haciendo lo del vídeo, la única forma de evitarlo es con un formulario independiente y una SQL de insercción en el botón guardar para pasar los datos a la tabla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas