Como restar registros en access desde visual basic

Lo que pasa es que estoy haciendo un proyecto en VB 6.0 de un almacen de calzado, lo que pasa es que tengo una sola base con varias tablas, existe una tabla que se llama Inventario y Nota, en la primera tabla (inventario) almaceno los datos del calzado y en la segunda solo cargo los datos del calzado que voy a hacer una nota de remisión, en un form hago la consulta para buscar el calzado de ahí lo cargo a un Flexgrid este flexgrid lo mando a la tabla de nota para posteriormente crear un data report, pero lo que quiero es restar las cantidades de Inventario con las cantidades de nota.
Los campos que utilizo son:
Tabla inventario
? ¿Numero? ¿Modelo? ¿Cantidad? ¿Descripción? ¿Talla? ¿CostoUnitario? ¿Total?
Tabla nota
? ¿Numero? ¿Modelo? ¿Cantidad? ¿Descripción? ¿Talla? ¿CostoUnitario? ¿Total?
Ya he intentado con varias sentencias sql, pero no me rebaja la cantidad de inventario con los valores de nota, utilice el update
esto es lo que he intentado hacer con el update
SQL="UPDATE Inventario SET Inventario.Cantidad=Inventario.Cantidad - Nota.Cantidad WHERE Inventario.Modelo =Nota.Modelo"
Esto lo hago con la misma conexión con la cual mando a llamar la base, he visto que en otros foros el nombre de las tablas debe de ir [entre] pero he calado sin tener algo favorable, estaba viendo un ejemplo de J.M. Movilla, que le explico a un miembro algo similar pero no me funciono
Respuesta
1
Utiliza una variable para obtener la cantidad actual en la tabla de inventarios, cuando se envía el registro a la base de datos entonces si establece el valor de cantidad a el valor actual menos el valor de la variable
Utiliza otra variable para obtener el modelo del articulo que descontaras de el inventario para que la consulta sea sobre ese modelo unicamente
"cantidadAnterior sera la variable que utilizaremos para mantener el valor de la cantidad de artículos en el inventario antes de almacenar la nota de venta"
"notaModelo sera la variable que utilizaremos para mantener el valor de el modelo del articulo que se descontara después de enviar el registro de la nota a la base de datos"
SQL="UPDATE Inventario SET Inventario.Cantidad=Inventario.Cantidad - " & cantidadAnterior & " WHERE Inventario.Modelo = " & notaModelo
NOTA: Toma en cuenta el tipo de datos a enviar, para datos numéricos no requieres ningún carácter especial en la consulta pero para cadenas de texto se requiere agregar comillas simples al inicio y al final del valor que enviaras, cualquier duda preguntala "Lo peor que podría suceder es que tengamos que inventar algo que nadie haya intentado hacer"

3 respuestas más de otros expertos

Respuesta
1
Si no te hace el update, o no encuentra los datos que igualan los campos modelo de ambas tablas o tienes activada la transaccionalidad en la base de datos y no estas haciendo commit del update
Gracias experto, pero a un no me queda muy claro, no se si la sintaxis este bien por que a veces me marca error o los tipos de datos no coinciden
Vamos a ver el SQL en sí es correcto en cuanto a sintaxis
el problema lo puedes tener porque la referencia a la tabla Nota no está inicializada ni referenciada en ningún sitio.
Podrías hace por ejemplo
registroNota = "select modelo,cantidad from nota where modelo = 1"
"update inventario set inventario.cantidad = inventario.cantidad - " & registroNota.cantidad & " where inventario.modelo = 1"
o tambien
registroNota = "select modelo,cantidad from nota"
do while not registroNota.eof
         "update inventario set inventario.cantidad = inventario.cantidad - " &      
          registroNota!cantidad & " where inventario.modelo = " & registroNota!modelo
          registroNota.moveNext
loop
Respuesta
1
Que tal como t va...
Pondré un código personal espero t sirva mucho.. me parece que lo que deseas hacer es hacer un descontar de la tabla personal para que se visulice en el reporte :D
Aqui t muestro el codigo, espero lo captes rapido :D
    For X = 1 To TotalFilas
        RsDetalle.AddNew
        Codigo = FlxDetalle.TextMatrix(X, 2)
        Cantidad = FlxDetalle.TextMatrix(X, 1)
        RsDetalle!cod_vta = TxtNumero.Text                  ' codigo de la Venta
        RsDetalle!Cod_Prd = FlxDetalle.TextMatrix(X, 2) ' Codigo del Producto
        RsDetalle!pre_prd = FlxDetalle.TextMatrix(X, 4) ' Precio
        RsDetalle!can_prd = FlxDetalle.TextMatrix(X, 1) ' cantidad
        RsDetalle!imp_prd = FlxDetalle.TextMatrix(X, 5) ' Importe
        RsDetalle.Update
        RsProducto.MoveFirst
        RsProducto.Find ("Cod_Prd = '" & Codigo & "'")     ' Aqui busco el codigo del                    'PRoducto pra hacer la actualizacion
        RsProducto!Sma_Prd = Val(RsProducto!Sma_Prd) - Val(Cantidad)
'Donde Sma_Prd es el stock de la Tabla Producto. y Cantidad es la cantidad q se va a descontar
        RsProducto.Update
    Next X
Espero se entienda la información que estoy proporcionándote. Si tienes alguna consulta, enviame un mail
[email protected]
Respuesta
1
Primero que nada recomiendo usar variables en la sentencia ni hacer la operación de la resta, segundo: los corchetes se usan solo cuando los nombres de las tablas tienes espacios, tercero hay varias maneras de actualizar una tabla, y para ello lo más recomentables es abrir el registro completo y actualizar solo los valores que deseas, esa sentencia que tienes te bloquea el registro de todos modos.
Un ejemplo seria:
rs.open "Select Cantidad From inventario Where (Inventario.Modelo = " & Nota.Modelo & " );"
rs!Cantidad= rsCantidad - Nota.Cantidad
rs.update
o puedes probar (si asi lo prefieres):
'suponiendo que nopta.cantidad es numerico y nota.modelo es string (atencion conlos apostrofes)...
SQL="UPDATE Inventario SET Inventario.Cantidad=Inventario.Cantidad - " &  Nota.Cantidad & " WHERE (Inventario.Modelo = '" & Nota.Modelo & "')"
'el & (y tambien el +) concatena para que la sentecia final quede como debe ser:
UPDATE Inventario SET Inventario.Cantidad= 15 - 2 WHERE Inventario.Modelo ='mod201'
Más o menos por ahí iva la respuesta pero la linea que me ya hizo lo que quería fue la siguiente:
cn22.Execute "UPDATE Inventario SET Inventario.Cantidad = Inventario.Cantidad-" & MSHFlexGrid1.TextMatrix(fila, 1) & " WHERE (Inventario.Numero=" & MSHFlexGrid1.TextMatrix(fila, 0) & ")"
Por esta maldita linea era por que no pidia terminar el programa, ademas de por algunos signos de puntuación lo cual agradezco por apoyarme gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas