Asignar valor calculado a un campo de tabla en Access con VBA o SQL.

Agradezco a quien me pueda ayudar con lo siguiente:

Tengo unas tabla llamada Productos en donde tengo los campos Cantidad_compra y Cantidad_compra2 lo primero que
necesito hacer es asignar a Cantidad_compra2 el valor de Cantidad_compra, es decir Cantidad_compra2= Cantidad_compra
luego necesito a dicho campo llamado Cantidad_compra2 decrementarlo con el campo llamado Cantidad_venta que esta en otra tabla
llamada Productos_venta y que el campo Cantidad_compra2 quede con dicho valor , es decir:
Cantidad_compra2=Cantidad_compra2-Cantidad_venta

He intentado hacer eso utilizando lenguaje de programación VBA, como se ve a continuación:

Private Sub Comando14_Click()

Dim db1 As dao.Database
Dim db2 As dao.Database
Dim db3 As dao.Database

Dim rs1 As dao.Recordset, rs2 As dao.Recordset, rs3 As dao.Recordset

Set db1 = CurrentDb
Set db2 = CurrentDb
Set db3 = CurrentDb

Set rs1 = db1.OpenRecordset("Select Cantidad_compra from Productos Where Cod_producto='" & Me.Cod_producto_venta & "'") 'Se coloca asi por que es un subformulario dentro de otro subformulario
Set rs2 = db2.OpenRecordset("Select Cantidad_compra2 from Productos Where Cod_producto='" & Me.Cod_producto_venta & "'") ' Lo asignamos a otro campo llamado Cantidad_compra2 (2)
Set rs3 = db3.OpenRecordset("Select Cantidad_venta from Productos_venta Where Cod_producto_venta='" & Me.Cod_producto_venta & "' And Numero_factura_venta='" & Me.Numero_factura_venta & "'", dbOpenSnapshot)

Do While Not rs1.EOF
Do While Not rs2.EOF
Do While Not rs3.EOF

rs1.edit
rs2.edit
rs3.edit

rs2!Cantidad_compra2 = rs1!Cantidad_compra ' asigno a Cantidad_compra2 lo que esta en Cantidad_compra
rs2!Cantidad_compra2 = rs2!Cantidad_compra2 - rs3!Cantidad_venta ' Refresco asignando a Cantidad_compra2 la diferencia con rs3!Cantidad_venta

rs2.update

rs3.MoveNext
rs2.MoveNext
rs1.MoveNext
Loop
Loop
Loop

End Sub

Pero desafortunadamente al realizar dicho proceso no se ejecutan las operaciones,
pues al depurar la aplicación con F8 no se calcula

rs2!Cantidad_compra2 = rs1!Cantidad_compra
rs2!Cantidad_compra2 = rs2!Cantidad_compra2 - rs3!Cantidad_venta

Tome la decisión de hacer todo con el lenguaje de consulta Sql, pero pese a que hago esto:

Select Cantidad_compra,Cantidad_compra2,Cantidad_venta from Productos,Productos_venta
Inner Join Productos_venta ON Productos.Cod_producto = Productos_venta.Cod_producto_venta

No se comno hacer en dicha sentencia para hacer el proceso descrito anteriormente es decir hacer

rs2!Cantidad_compra2 = rs1!Cantidad_compra
rs2!Cantidad_compra2 = rs2!Cantidad_compra2 - rs3!Cantidad_venta

En la consulta Sql

1

1 Respuesta

Para realizar este procedimiento, es suficiente con crear una Consulta de Actualización. En el código simplemente llama dicha consulta.

Hola Experto pues tengo lo siguiente :

Dim sSQL As String


sSQL = "UPDATE Productos SET Cantidad_compra2 = Productos_venta.Cantidad_compra "
sSQL = sSQL & " FROM Productos, Productos_venta "
sSQL = sSQL & " WHERE Productos.Cod_producto = Productos_venta.Cod_producto_venta "
sSQL = sSQL & " AND Cod_producto = '" & Me.Cod_producto_venta & "' "

CurrentDb.Execute sSQL     pero necesito saber como hago para hacer la difrencia entre                                                            rs2!Cantidad_compra2 = rs2!Cantidad_compra2 - rs3!Cantidad_venta, si tengo que hacer todo el Sql es decir: que descrfibi anteriormente o simplemente en un Update hago la diferencia (Creo que no sea así).

Imagino que ya lo tendrás resuelto, por favor confirmar.

De todas formas si los campos se encuentran en la misma tabla, también aplica la consulta de actualización como te dije anteriormente.

Saludos y espero que se solucione tu problema.

No experto pense que todo hiba a salir biern pero desafortunadamente no pues hago lo siguiente

asigno al campo Productos.Cantidad_compra= la diferencia entre el mismo campo 

(Productos.Cantidad_compra) - Productos_venta.Cantidad_venta dependiendo claro esta del valor de un texto que esta dentro del mismo formulario, el nombre del texto es

cod_prod_piv

Teniendo el siguiente código:
Dim sSQL1 As String
''''
sSQL1 = "UPDATE Productos INNER JOIN Productos_venta"
sSQL1 = sSQL1 & " ON Productos.Cod_producto = Productos_venta.Cod_producto_venta "
sSQL1 = sSQL1 & "SET Productos.Cantidad_compra= Productos.Cantidad_compra - Productos_venta.Cantidad_venta"" " And Productos.Id_Cod_producto = " & Me.cod_prod_piv & "
CurrentDb.Execute sSQL1

' cuando se le incluye And Productos.Id_Cod_producto = " & Me.cod_prod_piv & " dice que no coinciden los tipos

Si Modifico el Update haciendo un select, a presar de que queda de la siguiente manera:

Dim sSQL1 As String
sSQL1 = "UPDATE Productos INNER JOIN("
sSQL1 = sSQL1 & "SELECT Cod_producto_venta "
sSQL1 = sSQL1 & " FROM Productos_venta"
'sSQL1 = sSQL1 & "WHERE Productos.Cod_producto = Productos_venta.Cod_producto_venta"
sSQL1 = sSQL1 & ")"
sSQL1 = sSQL1 & "ON Productos.Cod_producto = Productos_venta.Cod_producto_venta"
sSQL1 = sSQL1 & "Set Productos.Cantidad_compra = Productos.Cantidad_compra - Productos_venta.Cantidad_venta And Productos.Id_Cod_producto = " & Me.cod_prod_piv & ""

CurrentDb.Execute sSQL1

Al momento de ejecutar me aparece el mismo error: "No coinciden los tipos".

Vale mencionar que los campos Productos.Cantidad_compra y Productos_venta.Cantidad_venta son de tipo numérico, el campo Productos.Id_Cod_producto es de tipo Autonumeracion .

Muchas gracias por su colaboración

Att. Hernan Camilo M.V

Proba declarando las variables de los campos sobre los que vas a realizar el calculo tipo variant o long si estas seguro y luego me decís.

Es decir el campo sSQL1, o a cuales campos te refieres experto?

..Gracias

Me parece que tienes errores conecptuales. SSQL no veo que sea un campo, por lo que informas es un string que contiene la sentencia sql.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas