¿Cómo crear un formulario con origen variable, es decir que acepte una variable con el nombre de la tabla destino de los datos?

Tenemos nociones muy básicas de Access y estamos enfrascados en el siguiente asunto:

Estamos trabajando en una aplicación que tiene más de 50 tablas, las cuales hemos registrado en otra tabla TBitácora con sus nombres y otros datos maestros que usan en el programa.

Hemos pensado que para la actualización de estas tablas mediante formularios para cada una se haría muy desgastante, por lo que consideramos hacerlo a través de un formulario con origen variable, es decir, que reciba el valor de una variable con el nombre de la tabla destino. Todas la tablas tienen la misma estructura de datos.

Entonces creamos el formulario FSelTab con un cuadro combinado selTab para escoger el nombre de la tabla destino y llevarlo a una variable vTabla para su posterior utilización en un Módulo que actualice los saldos de las tablas mediante el método Recordset tomando las entradas del formulario genérico. El cuadro combinado toma este dato de una consulta a la tabla TBitácora.

- Hemos declarado la variable Public vTabla as String

- En el evento Al Hacer Click del cuadro combinado del formulario FSelTab hemos igualado la variable vTabla = Form!SelTab.Value para guardar el valor seleccionado.

- Creamos un módulo mDetSal para abrir la tabla destino y actualizar el campo sTotal con base en los campos del formulario eDeb y sCred, que representan el saldo, los cargos y los abonos respectivamente.

Las preguntas para los amables expertos que nos puedan ayudar serian:

1. ¿Cuál es la sintaxis del origen variable del formulario genérico?

2. ¿El cuadro combinado para escoger la tabla destino puede ir dentro del formulario genérico o debe ir en otro diferente?

3. ¿Cuál sería la sintaxis de la propiedad que abre el Recordset en el módulo, que igual que el formulario genérico dependen de la variable vTabla?

¿podría ser algo como Set res = CurrentDb.OpenRecordset("" & vTabla & "")?

De antemano muchas gracias a todos y pedimos disculpas por la torpeza en la exposición de los temas pero como ya mencionamos somos novatos en el manejo de Access y VB. Tenemos montada la BD en Access 2013. Aclaramos que las tablas, consultas, informes y otros que hacen parte del programa, están funcionando, esperamos que bien.

1 respuesta

Respuesta
1

Vamos por partes:

1º/ Para asignarle a un formulario su origen por código, has de usar:
Me.RecordSource = vTabla
Me. Requery

Si lo haces desde el propio formulario, o:

Forms!NombreFormulario.Recordsource=vTabla

Forms! NombreFormulario. Requery

Si lo haces desde otro formulario

2º/ Eso ya como más te guste, teniendo en cuanta la sintaxis anterior.

3º/ La sintaxis para abrir el recordset sobre tu variable pública sería:

Set res = CurrentDb.OpenRecordset(vTabla)

Buenos Días Rojo

Primero que todo muchas gracias por tu respuesta.

Una inquietud: En cuál evento del propio formulario se define el origen con la instrucción

Me.RecordSource = vTabla
Me. Requery

De nuevo gracias por tu atención.

Julio

Sí, disculpa, que se me pasó ese detalle...

Pues depende un poco de cómo quieras montar el sistema. Te planteo opciones:

1º/ Si el cuadro combinado lo tienes en el propio formulario, ese código has de ponerlo en el evento "Después de actualizar" del combo, por ejemplo.

2º/ Si el cuadro combinado lo tienes en otro formulario, ese código se lo puedes poner en el evento "Al cargar" de tu formulario.

3º/ Si el cuadro combinado lo tienes en otro formulario, y quieres que al abrirlo ya se te cargue con los datos de la tabla seleccionada, en el evento del cuadro combinado, una vez que le pongas la instrucción para abrir el formulario (DoCmd. OpenForm "NombreForm") le has de poner la otra sintaxis (desde otro formulario)

Excelente Rojo Muchas gracias! 

Un 20 para este gran experto!

Después de que haya terminado de hacer todas las acomodaciones en mi proyecto con relación a esta solución que mes has enviado ¡ y que funcionó muy bien¡ Tendré que recurrir de nuevo a tu apoyo para otros temas relacionados que estoy necesitando. Tú me dirás si puedo hacerlo? y por cuál vía en caso de que aceptes.

Un saludo.

julio

Pues directamente no me puedes hacer preguntas (de momento, que tengo el estado de "no disponible"), pero puedes hacerlas directamente en el tablón (lo suelo mirar a menudo), o incluso, puedes indicar en el título de la pregunta, o en las primeras líneas que va dirigida a mi.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas