Recorrer los registros de un formulario

Discute sobre las herramientas de la base de datos
Responder
J Carlos
Mensajes: 9
Registrado: Mié Sep 29, 2010 8:42 am

Recorrer los registros de un formulario

Mensaje por J Carlos »

Me gustaría saber como recorrer los registros de un formulario desde código.
Estoy haciendo una macro para asociar a un botón de guardado de datos en el formulario, antes de cerrarlo. La macro debe recorrer los registros de un formulario que utilizo como entrada de datos de usuario y en función del valor que se observe en uno de sus campos se grabará el registro completo en una tabla de almacenamiento.
Me explicaré un poco más con la parte inicial del código de la macro (sin declaraciones):

oForm=Event.Source.getModel.getParent.getParent()
oSubForm=oForm.getByName("For_IntrPersExp")
oGridComp=oSubForm.getByName("Control de tablas 1")
oExist=oGridComp.getByName("cveExist")
vExist=oExist.getCurrentValue()

Desde el evento asociado al cierre del formulario oForm, accedo al formulario de entrada de datos del usuario (oSubForm). Como tiene un Control de Tablas para presentar todos sus registros a la vez, lo cargo en oGridComp. El campo que determinará si guardo el registro en la tabla de almacenamiento es el almacenado en oExist, del que puedo obtener su valor almacenado con .getCurrentValue.
Pero, ¿cómo hago para hacer un bucle que recorra los diferentes registros del formulario? ¿Qué propiedad o método debo emplear?
Espero vuestras sugerencias.
Muchas gracias, y enhorabuena a todos los que hacéis posible este estupendo foro.
José Carlos.
OpenOffice 2.2 con Windows Xp Profesional 2002
y 3.2.1 con Windows 7
Cascabel
Mensajes: 283
Registrado: Mié Nov 11, 2009 10:53 am

Re: Recorrer los registros de un formulario

Mensaje por Cascabel »

Y, digo yo, ¿no sería más sencillo copiar los datos con una sentencia SQL? Algo así como:

Código: Seleccionar todo

INSERT INTO "Tabla_Destino"("Campo1","Campo2") SELECT "Campo1","Campo2" FROM "Tabla_Origen" WHERE "Criterio"
Otra cosa que me llama la atención es que dices que lo asocias al evento de "cierre" del formulario. Primero porque no hay tal evento. Hay un evento de cierre de componentes, el cual no es específico de cada formulario. Y segundo porque se activa cuando el componente ya está cerrado, con lo que difícilmente podrás mover el registro o acceder a los controles.
OOo 3.3.0: OOO330m20 (Build:9567) en WXP+SP3 y en Ubuntu 10.10
J Carlos
Mensajes: 9
Registrado: Mié Sep 29, 2010 8:42 am

Re: Recorrer los registros de un formulario

Mensaje por J Carlos »

Ante todo, gracias Cascabel por tu rápida respuesta. Voy a explicar un poco más el problema a resolver.
La base de datos pretende registrar el seguimiento de unos expedientes administrativos relacionados con una serie de personas. Tenía inicialmente tres tablas para la gestión de las personas relacionadas con cada expediente : Expedientes, Personas y Personas-Expedientes que relaciona las otras dos tablas. Luego tiene otra serie de tablas, para otros usos que iré desarrollando posteriormente.
Mi primera tarea era desarrollar un formulario de entrada de datos para que un usuario diera entrada a un nuevo expediente y a las personas con el relacionadas en un subformulario basado en la tabla Personas-Expedientes.
Me planteé dos objetivos:
1.- No quería duplicar información en la tabla Personas-Expedientes que ya estuviera en la tabla Personas, pero si combinaba en una consulta ambas tablas y la utilizaba como fuente de datos para el subformulario de entrada de datos no era posible introducir datos (Hice la consulta en este mismo foro. El amigo Ramón (RMG) me aclaró que no era posible). La solución que me pareció mas conveniente era utilizar una tabla auxiliar Personas-Expedientes Provisional, no relacionada, que sí tuviera todos los datos de las tablas Personas y Personas-Expediente, para basar el subformulario de introducción de datos.
2.- Quería facilitar la entrada de datos al usuario. Ya que las personas relacionadas con cada nuevo expediente, pueden ya estar relacionadas con uno anterior, y para no obligar a que el usuario buscara si existía esa persona en la base de datos (listbox) y en caso de no existir fuera a un formulario de introducir una nueva persona, decidí hacer una macro (vinculada a la pérdida de foco del campo DNI (el primero que se introduce)) y que en caso de coincidencia con los de las personas ya registradas rellenara el resto de campos del registro de la tabla provisional antes creada, aunque se le permite al usuario modificar dichos campos para corregir errores que pudieran existir. Si no hay coincidencias se introducen el resto de datos normalmente. Esta macro la he conseguido hacer y funciona bien (la adjunto por si sirve de algo).
Una vez terminada la introducción de datos del usuario y cuando él lo decida, hay que guardar datos en las tablas que relacionan la información. Así he pensado recorrer los registros de la tabla provisional para actualizar los datos de los registros ya existentes en la tabla Personas que eventualmente haya podido modificar el usuario e insertarle los nuevos (aquí entraría el código que proponías). Para saber si un registro es nuevo o existente, en la tabla provisional hay un campo booleano que lo registra cuando opera el rellenado automático de la macro ya desarrollada. Luego hay que insertar nuevos campos en la tabla Personas-Expedientes con los datos necesarios (también con INSERT INTO).No sabía que no hubiera un evento de cerrar formulario, así que lo asociaré al botón de guardado y luego cerraré el formulario desde código y borraré los datos de la tabla provisional después.
Buscando en OpenOffice.org, creo que para lo que quiero hay que usar el método .CreateResultSet aplicado al objeto formulario, para luego moverse en el ResultSet con .next, asociado a un bucle desde el que se invoquen los métodos de actualización o inserción de datos.
Disculpad la extensión de la explicación.
¡Mil gracias!
José Carlos.
Adjuntos
Rellena Auto.odt
(11.79 KiB) Descargado 293 veces
OpenOffice 2.2 con Windows Xp Profesional 2002
y 3.2.1 con Windows 7
Cascabel
Mensajes: 283
Registrado: Mié Nov 11, 2009 10:53 am

Re: Recorrer los registros de un formulario

Mensaje por Cascabel »

Si te sirve la solución del archivo adjunto, adáptala a tu base de datos. No utiliza ninguna tabla extra.
Expedientes.zip
(12.38 KiB) Descargado 643 veces
 Editado: Depuradas un poco las macros. 
OOo 3.3.0: OOO330m20 (Build:9567) en WXP+SP3 y en Ubuntu 10.10
J Carlos
Mensajes: 9
Registrado: Mié Sep 29, 2010 8:42 am

Re: Recorrer los registros de un formulario

Mensaje por J Carlos »

¡¡Muchas gracias, Cascabel!!
Acabo de descargarme tu archivo y lo voy a estudiar en detalle. Por lo poco que he visto, me parece muy interesante.
Es un verdadero privilegio tener gente como tú en este foro.
Ya os cuento.
José Carlos.
OpenOffice 2.2 con Windows Xp Profesional 2002
y 3.2.1 con Windows 7
Responder