Access - Actualizar 2 tablas mediante casilla de verificacion

 
Vista:
sin imagen de perfil

Actualizar 2 tablas mediante casilla de verificacion

Publicado por Luis (32 intervenciones) el 04/09/2022 00:12:36
Buen dia, necesito ayuda con el siguiente tema, tengo una tabla de inventario llamada tbinventario y otra llamada SubMemo_asignacion, en ambas tengo un campo llamado asignado, prestamo y devuelto tipo Si/No.

Bien, en un formulario llamado Memo de asignacion tengo un subformulario donde se asigna algun equipo a un usuario, al seleccionar el equipo se debe marcar la casilla se es una asignacion, prestamo o una devolucion, bien lo que quiero es que adicional cuando le de guardar me actualice la tabla tbinventario en los campos asignado, prestamo o devolucion segun sea el caso, adjunto las imagenes:

1
2
3

Actualmente tengo el codigo asi pero no me actualiza nada:

4

Agradezco la ayuda por favor
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Actualizar 2 tablas mediante casilla de verificacion

Publicado por Anonimo (3316 intervenciones) el 04/09/2022 01:45:12
Solo se le actualiza una de las propiedades pero se puede dar la casualidad de que se modifiquen varias y (si mi punto de vista es correcto) ambas tablas deberían devolver el mismo estado.

Pero vamos al problema:
Parece que se utiliza una referencia absoluta pero incompleta y no debería ir entre comillas (Access reconocerá al objeto al analizar la sintaxis en tiempo de ejecución (es una ruta Absoluta = completa):

Forms|[memo de asignacion]![submemo_asignacion]!Form!cvasignacion

Con esta sintaxis debería funcionar (corrige los nombres y si contienen espacios añade corchetes):

Docmd.RunSQL "Update tbinventario Set asignado = Forms|[memo de asignacion]![submemo_asignacion]!Form!cvasignacion Where Codigo_It = Forms|[memo de asignacion]![submemo_asignacion]!Form!Codigo_It "

Si el botón guardar esta en el principal, la ruta relativa seria asi:
Docmd.RunSQL "Update tbinventario Set asignado = " & Me.[submemo_asignacion]!Form!cvasignacion & " Where Codigo_It = '" & Me![submemo_asignacion]!Form!Codigo_It & "´"

Con el botón en el subformulario (incluso en su cabecera o pie) la ruta (también relativa):
Docmd.RunSQL "Update tbinventario Set asignado = " & Me!cvasignacion & " Where Codigo_It = '" & Me!Codigo_It & "´"


En las rutas relativas, hay que 'sacar de la cadena de texto' los datos que Access tendrá que evaluar y adecuar la expresión al tipo de dato, (es texto en la condición).

Notas:
Con Docmd.RunSQL Access solicitara permiso, si se utiliza CurrentDb.Execute obedecerá de forma ciega y no preguntara nada.
Si se permiten 'cambios múltiples', se deberían actualizar (sincronizar) en este mismo paso todos los cambios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Actualizar 2 tablas mediante casilla de verificacion

Publicado por Luis (32 intervenciones) el 04/09/2022 03:41:38
Gracias por tu respuesta, el boton guardar esta en el formulario principal, en las tablas el campo codigo_it lo cambie a numerico, la linea quedo asi:

DoCmd.RunSQL "Update tbinventario Set asignado = " & Me.[SubMemo_asignacion]!cvasignacion & " Where Codigo_It = '" & Me![SubMemo_asignacion]!cccodigo_it & "´"

Pero me da error:

e1

Ya no se que mas hacer, no soy experto.

Te adjunto la base de datos para que por favor la veas..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo

Actualizar 2 tablas mediante casilla de verificacion

Publicado por Eduardo (317 intervenciones) el 04/09/2022 03:39:22
Le respondí por TodoExpertos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo

Actualizar 2 tablas mediante casilla de verificacion

Publicado por Eduardo (317 intervenciones) el 04/09/2022 04:52:39
Hay errores graves, por ejemplo, darle formato texto a un campo autonumérico. Ahora el código debe ir en el evento Después de actualizar del primer subformulario. Lo probé con este código y me actualiza el cuadro de lista.

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub cvasignacion_AfterUpdate()
 
If Not IsNull(Me.cccodigo_it) Then
 
  DoCmd.RunCommand acCmdSaveRecord
 
  CurrentDb.Execute "Update tbinventario Set asignado = " & Me.cvasignacion & " Where Codigo_It = " & Val(Me.cccodigo_it)
  Me.Parent!linventario.Requery
 
End If
 
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Actualizar 2 tablas mediante casilla de verificacion

Publicado por Luis (32 intervenciones) el 04/09/2022 05:47:04
Excelente si me funciono, pero supongamos que quiero corregir lo del formato, si coloco el campo Codigo_it tipo texto corto tanto en la tabla tbinventario como en la tabla submemo_asignacion como quedaria la sentencia?

hice los cambios de esta manera, coloque el campo codigo_it de la tabla tbinventario como texto para poder aplicar formato

a1

En la tabla submemo_asignacion el campo codigo_it tambien lo coloque como texto


a2

Pero me da error:

a3

Se que es un problema por el cambio del campo pero de verdad apenas estoy aprendiendo este lenguaje, Gracias si me puede ayudar por favor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Actualizar 2 tablas mediante casilla de verificacion

Publicado por Anonimo (3316 intervenciones) el 04/09/2022 11:42:53
Creo que hay que dejar claro algo, el campo autonumérico puede tener FORMATO de texto y sigue siendo un numero (con disfraz pero un numero).
Si hubiera utilizado la primera opción (la referencia absoluta), ese problema no hubiera existido pues Access asume el tipo de dato que tiene el objeto.

Cuando se trabaja con datos, Access necesita saber su tipo para poder manipularlos, los tipos mas habituales en Access son:
.- Texto (los datos entre comillas simples o dobles) ===> "Pepe" o 'Pepe'
.- Fecha (el marcador es # ) ==> #1/5/2022# .... y en VBA siempre con formato mes/día/año #5/1/2022#
.- Numero (no se el aplica formato) ====> 123456

En la aplicación de la regla, el cambio de tipo (en principio texto: "GH000039") a numérico (ya no podrá comenzar por letra) se resuelve eliminado las comillas simples:
Antes ===> ..... Where Codigo_It = '" & Me![SubMemo_asignacion]!cccodigo_it & "´"
Despues ===> ..... Where Codigo_It = " & Me![SubMemo_asignacion]!cccodigo_it

Si se mantienen los datos originales ("GH000039") y se le aplica la función VAL, el valor devuelto será siempre CERO

Si se le da formato al numero para que tenga una longitud constante ("00000000") en principio no le importa (es un numero disfrazado) .
Si a un texto se le aplica la funcion VAL, (ejemplo: "00000039") devolverá (39), pues Access evalúa desde el primer carácter (que ha de ser un numero) hasta que encuentre un carácter no-numérico o se llega al final del susodicho texto.


Respecto a que 'los datos sean texto' la solucion esta arriba:
.- NO a la funcion VAL (es un texto, se desea un texto, se solicita un texto ¿que pinta aqui un numero?
.- Como el referente es un TEXTO, se le han de añadir los indicadores de que el dato es un TEXTO (las comillas, una 'al inicio' otra 'al final') y de ello hay ejemplos en este mismo hilo.

Sobre la base adjunta ... la ojeare por curiosidad y si aprecio algo curioso te lo hare saber.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Actualizar 2 tablas mediante casilla de verificacion

Publicado por Luis (32 intervenciones) el 04/09/2022 16:16:57
Excelente ya pude resolverlo, muchas gracias, usted es un duro en la programacion.

Intente cambiar las casillas de verificacion con una lista desplegable con los 3 estados (Asignado, prestamo y devuelto) pero me dio error entonces preferi dejarlo con las casillas de verificacion. para no complicarme

Gracias de verdad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo

Actualizar 2 tablas mediante casilla de verificacion

Publicado por Eduardo (317 intervenciones) el 04/09/2022 15:45:23
Adjunto la base de datos editada. Adicione el campo estado en reemplazo de los campos Asignado, Préstamo y Devuelto. Suprimí el formato en la definición de la tabla del campo clave (esto lo dejé en el formulario). Lo he probado y funciona perfectamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Actualizar 2 tablas mediante casilla de verificacion

Publicado por Luis (32 intervenciones) el 04/09/2022 16:18:45
Excelente no habia visto su mensaje, muchas gracias de verdad que he aprendido full con sus respuestas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar