Como corregir error 3075 en access

Tengo la siguiente rutina y me marca el error 3075, ya revise y mis campos están bien escritos, lo que quiero hacer es que al guardar me actualice mis existencias en la tabla productos. La línea marcada en negro es la que me esta marcando el error

Private Sub cmdguardar_Click()

With Me.detallesal_Subformulario.Form.RecordsetClone
.MoveFirst
Do While Not .EOF
CurrentDb.Execute ("UPDATE productos set cantidad=cantidad-" & !cantsal & "where Idcodigo=" & !Idcodigo)
.MoveNext
Loop
End With

End Sub

2 Respuestas

Respuesta
2

Como bien te dice Antonio, no entiendo lo del signo de admiración. Si estás en un formulario y en un control llamado CantSal hay un valor numérico ponlo como, por ejemplo,

docmd.runsql"update productos set cantidad=cantidad - " & me.cantsal & " where Idcodigo=" & me.idcodigo & ""

Suponiendo que idcodigo sea numérico.

¡Gracias!  Ahorita revisando idcodigo lo tengo como texto y me salta la duda estoy tomando la información de un subformulario y el botón guardar esta fuera

Si Idcodigo es texto sería

docmd.runsql"update productos set cantidad=cantidad - " & me.cantsal & " where Idcodigo='" & me.idcodigo & "'"

Es decir, empieza por apostrofe comillas & y cierra & comillas apostrofe comillas

¡Gracias!

Ya quedó con esta instrucción, solo me quedan unas dudas. A la hora que le doy guardar me pregunta que si estoy segura pero por cada registro hay que estar dando que si, como puedo evitar esto ya que al presionar el botón de guardar es porque ya esta correcto. Y ahorita revisando necesito que a la parte se actualice mis salidas ya que llevo un acumulado, se tiene que poder lo mismo pero en lugar de existencia se pone salidas o lo pongo continuo, perdón por tantas molestias

Justo debajo de Private Sub cmdguardar_Click()

ponle 

Docmd.setwarnings false

Esto lo que hace es desactivar los avisos de "Va a insertar...", "Va a actualizar..."

Lamento decirte que desde " que a la parte se actualice..." apenas lo entendí.

No sé si te refieres a que te actualice el campo existencias de la tabla Productos, pero entonce no entiendo que hace el campo Cantidad. Por ejemplo, si tengo una tabla Productos con sus existencias

Fíjate que de Te Dharamsala hay 55 unidades

Luego en el formulario Ventas, que equivaldría al tuyo de salidas, si elijo ese producto

Me "rellena" el precio y las existencias que hay hasta ese momento. Anoto la cantidad que voy a vender, en este caso 10 y cuando pulso Enter

En Quedan, me pone las nuevas existencias después de vender 10 y la tabla Productos ya me la ha dejado como

En este caso, que no sé si es el tuyo, en el evento Después de actualizar del cuadro de texto Cantidad, en el código le tengo puesto

Subtotal = Precio * Cantidad
Quedan = Existencias - Cantidad
DoCmd.RunSQL "update productos set existencias=quedan where producto='" & Me.Producto & "'"

Incluso puedes quitar lo de Quedan y ponerlo como

....................set existencias=existencias-cantidad where..............

¡Gracias! 

Perdón efectivamente no me explique, esto es en tabla productos tengo otro campo que se llama salidas esto lo puse para que cuando yo revise un producto me ponga su historial de cuantos productos eh comprado y cuantos productos eh vendido(un acumulado), inserte el mismo código que me proporciono pero cambiando obviamente los nombres y me marco error, por este motivo es que le preguntaba como hacer que cuando actualice cantidad o existencias me actualice el campo de salidas mas o menos esto es lo que tengo al visualizar el producto

Pero ese campo Salidas, tal como lo tienes puesto en la instrucción, no te mostrará las unidades vendidas de un producto, ya que tendrías que tener guardado en algún lugar las que tenías cuando iniciaste las salidas.

En todo caso, en algún lugar, para saber lo que ha salido de un producto, tendrías que usar

TextoA=dsum("cantidad","nombre de la tabla, que no puede ser productos","idproducto=...

Pero, si quieres tener el campo TotalSalidas en la tabla Productos tendrías que poner la instrucción como

docmd.runsql"update productos set TotalSalidas=nz([existencias])+" & me.cantsal & " where idcodigo='" & me.idcodigo & "'"

Así, el campo Total salidas de un producto te mostraría la suma acumulada de las salidas de ese producto.

Respuesta
1

Luz Blanca. Yo trabajé hace mucho el Acces, ahora trabajo Visual con SQL y dado que la sentencia alude el tema con la sentencia "actualizar", te paso mi consejo justo para la línea que dices te da líos. Primero, creo que tienes problemas definiendo los campos, veo unos signos de admiración que creo no son necesarios, además no respetas espacios, y no tienes la doble comillas de cierre de la sentencia, (la abres con el "Update... pero no la cierras). Te dejo un ejemplo de un sistema que he diseñado y que anda muy bien. Si vendo productos, entonces le resto (baja Existencia), si compro productos actualizo las Existencias sumando la cantidad que compro. Mira mi sentencia:

("UPDATE Tbl_Productos SET Existencia= Existencia - '" & vCantidadD & "' Where IdProducto=" & vIdProductoD & "")

Solo trata de reemplazar tus nombres asignados y adapta. Ojalá te sirva.

Olvidé decirte que debes revisar el tipo de datos del campo que estás convocando, veo que tienes doble comillas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas