Actualizar un campo desde un formulario y que cambie el valor de un campo pero de otra tabla.

Soy nuevo en esto y me gustaría me puedan ayudar, estoy haciendo una base de datos para almacenar y registrar facturas.

En un formulario registro los datos de la comprobación de gastos, los cuales están en una Tabla llamada Comprobacion_gastos, y tengo una Tabla llamada Factura, la cual se alimenta con los datos de las facturas que se han expedido a la empresa, tengo otra tabla que se llama Detalle_Comprobacion, la cual la tengo un subformulario, En el formulario de Comprobación de gastos puse el subformulario Detalle_comprobacion, las tablas Comprobación de gastos y Detalle_comrpobacion están relacionadas por un campo llamado IdCG.

Mi objetivo es que al llemar los datos de la comprobacon, comience a llenar el subformulario Detalle_comprobacion, hasta a qui todo bien me registra y tengo un cambo que me busca la factura por Serie-{Folio y los inserta en la casillas que quiero, pero lo que intento hacer es que al hacer click en la búsqueda en el subformulario Detalle_comprobocion, me cambien el valor de una casilla de la tabla Facturas, que seria la casilla de utilizada, para que la próxima vez que quiera buscar esa factura, se filtre y ya no me la muestre, por que el estado de la casilla utilizada a cambiado.

1 respuesta

Respuesta
2

En principio no tienes problemas, pero debo advertirte que me perdí con los nombres. En el evento hacer clic del botón, o en el evento después de actualizar de un cuadro de texto, etc puedes poner

Si el valor está en el formulario

docmd.setwarnings false

docd.runsql"update Facturas set utilizada =true where idcg='" & me.idgc & "'"

en el caso de que fuera en el subformulario

docmd.setwarnings false

docmd.runsql"update facturas set utilizada= true where idcg='" & me.nombredelsubform.form!idcg & "'"

Siendo Idcg un identificador de registro de la tabla facturas como puede ser el id, numfactura, etc

Y lo mismo para el formulario o subformulario.

Adjunto una imagen donde tal vez me pueda explicar un poco más, al dar click en Serie_Folio, esto despliega un listado el cual lo estos jalando de una consulta de la tabla facturas, dicha tabla tiene un campo que se llama utilizado, mi idea es que al dar click en el registro seleccionado o sombreado, el valor de utilizado cambie a Si, con el objetivo que al pasar a la siguiente línea y hacer un registro nuevo, busque una factura pero la que escogí con anterioridad ya no aparecerá por que el campo utilizado dice Si y como ese campo tiene un filtro que dice que no me muestre las que digan Si. El objetivo es que en cada comprobación no se repita ninguna factura.

De antemano agradezco su ayuda.

Tal como veo la imagen, lo más sencillo es que en el evento después de actualizar del cuadro combinado Serie-Folio(mira en sus propiedades-otras-nombre si se llama así) pongas

docmd.runsql"update facturas set utilizado=true where serie_folio=me.facturas.form!serie_folio"

Suponiendo que la columna dependiente del combinado sea la 1.

Y si quieres le añades

form.requery

Hola, primeramente gracias por el apoyo, intente con el codigo que me proporcionaste, la forma en que me realiza el cambio es el siguiente

Private Sub serie_folio_Change()

DoCmd.RunSQL "update Facturas set Utilizado=-1 where serie_folio=serie_folio"

Form.Requery

End Sub

El detalle es que me actualiza todos los registros, por ejemplo si tengo ingresadas 6 facturas, a las 6 me cambia la casilla Utilizado por -1 osea verdadero, al hacer esto me sale un cuadro que dice se actualizaran 6 registro, y lo que yo intento es que solo se actualice el registro seleccionado

De antemano gracias

Vamos a ver si me explico, me he guiado por la imagen que has puesto en que parece que el campo serie folio es único. Cuando se usa una instrucción tipo docmd. Runsql"update... y quieres que sólo actualice un registro en particular, uno sólo, tienes que decirle que use como criterio algo que identifique a un registro en particular de la tabla Facturas. Por ejemplo supongamos que en la tabla Facturas tienes un campo que identifica a un único registro, vamos a llamarlo Numfactura( ya que no puede haber dos facturas con el mismo número), y en el subformulario en algún campo de texto pones Numfactura, La instrucción sería

docmd.runsqwl"update facturas set utilizado=-1 where nunfactura=me.facturas.form!numfactura"

O sea, usar algo que identifique a un registro en particular. Si el valor que vas a usar como criterio lo tienen varios registros claro que te actualiza todos ello

Hola, creo que ya falta poco jejej, con esta ultima información que me proporcionaste, la introduje la línea que mencionas, pero para relacionar un solo registro lo que hice fue los siguiente:

En la tabla Facturas, al Id autonumérico, lo cambie de nombre y le puse Idf, los demás campos no cambian siguen igual, campo; Idf, Fecha, Serie, Folio, RFC, Proveedor, etc.

En la tabla Detalle_comprobacion_gastos, agregue una casilla con el mismo nombre Idf, al seleccionar una factura en el campo combinado, esta información es jalada de una consulta

SELECT [Facturas Consulta].[S&F], [Facturas Consulta].Fecha, [Facturas Consulta].Serie, [Facturas Consulta].Folio, [Facturas Consulta].RFC, [Facturas Consulta].[Razón Social], [Facturas Consulta].Total, [Facturas Consulta].Utilizado, [Facturas Consulta].Idf FROM [Facturas Consulta] ORDER BY [Facturas Consulta].[S&F]; 

La cual me muestra el listado como primera opción a la búsqueda de la serie y el folio en una sola casilla, como se muestra en la imagen que subí anteriormente, al seleccionar un registro, con el comando column, envío la info a las casillas seleciconadas.

Private Sub Texto53_Click()
Fecha_del_comprobante = Texto53.Column(1)
Serie = Texto53.Column(2)
Folio = Texto53.Column(3)
RFC = Texto53.Column(4)
Proveedor = Texto53.Column(5)
Total = Texto53.Column(6)
Idf = Texto53.Column(8)
End Sub

Private Sub Texto53_LostFocus()
DoCmd.RunSQL "update Facturas set Utilizado=True where Idf=Detalle_comprobacion_gastos.[Idf]"
End Sub

A lo que entiendo es que tengo que hacer una condición que coencida con la tabal Facturas, y pensé en el Id autonumérico de la tabla Facturas, al hacer todo esto, selecciono un registro pero me manda un cuadro que dice;

Introduzca el valor del parámetro Detalle_comprobacion_gasto.Idf, abajo un campo para escribir el valor, si pongo el número de Idf de la tabla Facturas, si me cambia el valor de Utilizado, hasta ahí pues hace lo que me gustaría, pero me aparece ese cuadro donde no me toma el valor de Idf.

Intente con este código

DoCmd.RunSQL "Update Facturas set Utilizado = -1 where Idf ='" & Me.Detalle_comprobacion_gastos.Form!Idfa & "'"

Donde Idf me toma el valor del ID autonumérico donde esta la factura, se supone que Idfa debería tener el mismo valor que Idf para que solamente me tome un solo registro, pero no me reconoce el valor del subformulario Detalle_comprobacion_gastos de la casilla Idfa

Si tomara el valor lo campararia y podría tomar solo un registro

Hola

Creo que ya funciono con esta función

DoCmd.RunSQL "Update Facturas set Utilizado = -1 where Idf =" & Form!Idfa & ""

Seguiré probando

Como te dije en anteriores instrucciones es

docmd..............................................................Id =me.nombredelsubformulario.form!idloquesea"

Con esto le estas diciendo que el valor de comparación es el campo Idloquesea del registro activo del subformulario. Si hubiera sido en el formulario no hubiera hecho falta lo de .from,,, bastaría con

docmd.........................................................Id=me.idlouesea

Un subformulario no deja de ser un control mas de un formulario, lo mismo que un cuadro de texto, etiqueta, combinado, etc., cualquier control Active X. Por eso hay que indicarle que en la colección de controles de un formulario es un control subformulario que tiene un campo llamado Idloquesea.

¡Gracias!

Realmente me ayudaste mucho, la base de datos ya hace en gran parte lo que necesito, me gustaría agregar algunos parámetros de seguridad estoy intentando hacer eso, como por ejemplo, al decir si es deducible o no es deducible, me gustaría bloquear algunas casillas, al principio funciona, pero al pasar la siguiente línea de registro, si selecciono que no es deducible, me activa las casillas que necesito pero como en la línea anterior seleccione que si es un deducible se desactivan.

Pero con esto es un avance para comenzar, y nuevamente muchas gracias por la ayuda.

SAludos

Hola, tengo una nueva duda, el código que me proporcionaste me esta funcionando bien, pero ahora quiero compartir esta base de datos, a lo que me gustaría guardar la tabla en un servidor, y desde la aplicación mandarla a llamar, osea una tabla vinculada, al vincular la tabla, ya no me funciona el código que me proporcionaste, es como si no encontrara los datos, te agradecería mucho me pudieras apoyar.

Saludos

Hola yo de nuevo, ya quedo resuelto, no era problema de la base de datos si no de permisos en el servidor, gracias de nuevo jejej

De todas formas, si divides la base de datos, Access "guarda memoria" de donde has puesto el back end( las tablas originales) y las consultas tipo Dlookup las hace a la nueva ruta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas