RESUELTO: Guardar datos de un subformulario en una tabla

Discute sobre las herramientas de la base de datos
Responder
Luismaux
Mensajes: 10
Registrado: Mar Feb 16, 2021 1:22 pm

RESUELTO: Guardar datos de un subformulario en una tabla

Mensaje por Luismaux »

Hola de nuevo me surge un parón en mi base de datos.
Tengo un formulario filtrado desde una consulta (formulario principal) con dos subformularios de dos tablas diferentes (tabla1 y tabla2).
Mi intención es cuanto tengo todos los campos rellenos, al darle a un botón de guardar, guardar los datos de dos de los campos (IdTbl1 y IdTbl2) en una tercera tabla (tabla 3).
Intento utilizar una macro que anteriormente me facilitasteis, pero en este caso no me funciona puesto que este código busca los campos en el formulario principal (el de la consulta) y por lo tanto me da un error.
No puedo adjuntar la base de ejemplo porque ya la tengo bastante avanzada y con datos personales.
La línea que me da error es la siguiente:
iIdTbl1 = oForm.parent.getByName("IdTbl1").Text
que supongo que es porque no encuentra el campo donde están los datos, puesto que los busca en el formulario principal.
El código que intento utilizar es el siguiente:

Código: Seleccionar todo

Sub GuardarDatosTbl3(Evento)
Dim oDeclaracion As Object
Dim sSQL As String
Dim oForm As Object
Dim iIdTbl1 As Integer
Dim iIdTbl2 As Integer
Dim Control as Object

oForm = Evento.Source.Model.Parent
iIdTbl1 = oForm.parent.getByName("IdTbl1").Text
iIdTbl2 = oForm.Parent.getByName("IdTbl2").Text

oDeclaracion =ThisDatabaseDocument.CurrentController.ActiveConnection.CreateStatement
'Ordenes SQL a ejecutar
sSQL = "INSERT INTO ""Tbl3"" (""IdTbl1"", ""IdTbl2"") VALUES (" & iIdTbl1 & "," & iIdTbl2 & ")"
oDeclaracion.executeUpdate( sSQL )   
End Sub
Gracias de antemano.
Última edición por Luismaux el Dom Abr 04, 2021 8:26 pm, editado 1 vez en total.
LibreOffice 7.0.4.2 (+86)
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Guardar datos de un subformulario en una tabla

Mensaje por RMG »

Hola,

Si intentas capturar datos del subformulario, debes hacer referencia a el, o bajar un nivel. Ejemplo.

Bajar un nivel.

iIdTbl1 = oForm.parent.parent.getByName("IdTbl1").Text

Hacer referencia al subformulario.

iIdTbl1 = oForm.getByName("NombreSubformulario").Columns.getByName("idTbl1")Text

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Luismaux
Mensajes: 10
Registrado: Mar Feb 16, 2021 1:22 pm

Re: Guardar datos de un subformulario en una tabla

Mensaje por Luismaux »

Muchas gracias por la respuesta, siento no haber contestado antes pero he andado liado y no lo he podido probar, lo probaré y te contesto, muchas gracias.
LibreOffice 7.0.4.2 (+86)
Luismaux
Mensajes: 10
Registrado: Mar Feb 16, 2021 1:22 pm

Re: Guardar datos de un subformulario en una tabla

Mensaje por Luismaux »

Hola RMG, he probado las dos opciones que me dijiste y me dan error ambas.
El formulario consta de un formulario principal filtrado de una consulta y luego tiene dos subformularios de dos tablas diferentes con dos campos Id cada formulario distintos que son los campos que quiero cargar en una tercera tabla.
No se si me he explicado bien, pero he intentado hacer un ejemplo para adjuntar puesto que la base tiene datos personales y no puedo aportarla y me es muy complicado a estas alturas.
El error que me da en ambos casos es el siguiente:
Error de ejecución de BASIC.
Se ha producido una excepción
Type: com.sun.star.container.NoSuchElementException
Message: .
Entendería que no me puedas ayudar y daría por cerrado el mensaje y seguiría investigando.
Un saludo y muchas gracias de antemano.
LibreOffice 7.0.4.2 (+86)
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Guardar datos de un subformulario en una tabla

Mensaje por RMG »

Hola,

Mira si el ejemplo te sirve.

Saludos
Adjuntos
Ejemplo5.zip
(20.9 KiB) Descargado 222 veces
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Luismaux
Mensajes: 10
Registrado: Mar Feb 16, 2021 1:22 pm

Re: Guardar datos de un subformulario en una tabla

Mensaje por Luismaux »

Muchas gracias RMG por el interés en ayudar que tienes.
Soy bastante novato con esta aplicación y el ejemplo que me adjuntas creo no es lo que yo necesito o no entiendo muy bien como poder relacionar lo que yo quiero hacer con lo que veo en ese ejemplo, pero estoy muy agradecido.
LibreOffice 7.0.4.2 (+86)
Luismaux
Mensajes: 10
Registrado: Mar Feb 16, 2021 1:22 pm

Re: Guardar datos de un subformulario en una tabla

Mensaje por Luismaux »

Hola, después de varios intentos no soy capaz de hacer lo que quiero y he hecho un ejemplo de base con lo que quiero que seguro con el ejemplo me podréis orientar.
En la base de ejemplo, al abrir el formulario de guardar datos en la tabla 3 y tras buscar el nombre segundo, al pinchar en el boton de "guardar" querría guardar los dos campos id, (uno de la tabla 1 y el otro de la tabla2) en una tercera tabla (tabla3).
Espero con las explicaciones y el ejemplo que adjunto entendáis lo que quiero hacer y me podais ayudar.

Un saludo y muchas gracias.
Adjuntos
BasePrueba.zip
(18.11 KiB) Descargado 179 veces
LibreOffice 7.0.4.2 (+86)
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Guardar datos de un subformulario en una tabla

Mensaje por Longi »

Buenas!
En el hilo hablas de un formulario con dos subformularios, que no es precisamente lo que pusiste en el ejemplo.
Como en el ejemplo no hay un formulario principal del que cuelgan dos subformularios he tenido que cambiar algunas referencias para el formulario 1 (donde está el boón) y el formulario 2, que no tiene nada que ver con el uno.
Estabas empeñado en que la macro recogiese texto, pero en realidad eran campos de tipo numérico, así que en vez de .Text tuve que usar .Value.
Seguramente cuando revises las macros veas las diferencias, pero lo podrás adaptar a la base original.

Ya cuentas!

Un saludo! ;)
Adjuntos
BasePrueba1.7z
(18.1 KiB) Descargado 180 veces
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Luismaux
Mensajes: 10
Registrado: Mar Feb 16, 2021 1:22 pm

Re: Guardar datos de un subformulario en una tabla

Mensaje por Luismaux »

Hola Longi, muchas gracias por el el aporte y la ayuda que aportáis, y tenías razón en lo de los subformularios, pero es cierto que cuando comencé con este hilo he modificado varias veces el formulario probando otras cosas.
He aplicado el códogo nuevo a la base original y me da un error, porque no encuentra el value del primer formulario IdTabla1, y pienso si no podría ser debido a que el formulario 1 tiene como origen una consulta y no una tabla, ya que se trata de un formulario filtrado por ese campo id precisamente? porque por lo demás está tal cual al del ejemplo.
Adjunto dos capturas de pantalla una con el error que me da y otra con el navegador del formulario por si fuera de ayuda.
Un saludo y muchas gracias de nuevo.
Adjuntos
Capturas.zip
(126.54 KiB) Descargado 164 veces
LibreOffice 7.0.4.2 (+86)
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Guardar datos de un subformulario en una tabla

Mensaje por Longi »

Buenas!
Tienes que saber qué es lo que estás usando.
si oForm te viene de event. source.model.parent entonces oForm es el formulario que contiene al botón (el botón es la fuente-source-en la que está el evento, y estás llamando a su padre - parent-.
Si el botón no está en el formulario o subformulario en el que está el control al que quieres acceder no lo vas a encontrar.
Para navegar por el árbol de formularios y subformularios tienes que empezar en uno (en el caso de oForm1 me puse, digamos, en el tronco del árbol, y luego buscas los controles con getbyname, y ten en cuenta que un subformulario es un control con varios controles dentro.
Si empiezas en una rama del árbol (event.source.model.parent te hace aterrizar en el formulario o subformulario donde se encuentra el botón) te tocará ir hacia la siguiente rama más delgada (getbyname) para llegar al control deseado. O bien ir a la rama más gruesa que sujeta aquella en la que estás (Parent).
No sé si con el símil he sido claro, pero todo parece indicar que no estás apuntando bien.
En cuanto a la consulta te daría problemas para escribir registros si no fuese actualizable, pero no el error que marcas.
Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Luismaux
Mensajes: 10
Registrado: Mar Feb 16, 2021 1:22 pm

Re: Guardar datos de un subformulario en una tabla

Mensaje por Luismaux »

Muchísimas gracias Longi, tenía el formulario un poco liado y lo he hecho desde el principio y ya me va el código tal y como me indicaste en el ejemplo.
Resuelvo el tema, muy agradecido.
LibreOffice 7.0.4.2 (+86)
Responder