[RESUELTO]Capturar datos de una base conectada al Writer

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Preguntar-Responder
Mensajes: 15
Registrado: Dom Oct 11, 2015 12:20 pm

[RESUELTO]Capturar datos de una base conectada al Writer

Mensaje por Preguntar-Responder »

Buenas tardes
Una pregunta, sencilla.. creo..
¿Qué objeto o que evento (o lo que sea) hay que usar para capturar datos en un documento de Writer con una base de datos que está conectada al Writer?
Gracias
Última edición por Preguntar-Responder el Mié Mar 10, 2021 12:04 am, editado 2 veces en total.
Libre Office 4.4.5.3. Sistema Operativo Windows 8 Pro
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Capturar datos de una base conectada al Writer

Mensaje por mauricio »

Tu pregunta es muy escueta y muy general...

¿que tarea EXACTA llamas capturar datos?...
¿a que llamas EXACTO tener conectada una base a Writer?

Un archivo de ejemplo y una detalla explicación de lo que necesitas, nos ayudará a ayudarte...

Saludos

P.D. Por favor, no escribas los títulos en mayúsculas... gracias...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Preguntar-Responder
Mensajes: 15
Registrado: Dom Oct 11, 2015 12:20 pm

Re: Capturar datos de una base conectada al Writer

Mensaje por Preguntar-Responder »

Buenas noches.
Primero de todo, gracias por responder.
Lo que quiero es sencillo, pero resulta farragoso el explicarlo, y además se necesitan tres archivos:“SOBRE PARA GRABAR AUTOTEXTO”, “SOBRE BLANCO nuevo”, “Base de datos nueva” (los mando en un archivo adjunto WinRar llamado Archivos Consulta Foro OOo) para poder ensayar en el PC lo que yo quisiera hacer.
Así que de antemano pido disculpas por el testamento.
Tengo una Base de Datos llamada “Base de datos nueva”. Esta base de datos habría que “incorporarla” (“conectada”, seguramente no es la palabra exacta) al Writer (Herramientas/Opciones/Libre Office Base/Bases de Datos, luego dar al botón “Nueva” y seguir las instrucciones)

Tengo un archivo de texto al que he dado el formato de ua carta, llamadao “SOBRE BLANCO nuevo” .

Tengo un Autotexto grabado llamdo “CARTA”. ( lo único que habría que hacer para disponer de este autotexto en sólo grabarlo, para lo cual habría que abrir el arhivo “SOBRE PARA GRABAR AUTOTEXTO”, seleccionarlo todo (Ctrl+E), Editar\Autotexto\Texto automatico\Nuevo)

Tengo dos macros, una llamada “carta” y otra llamada “carta 1” (él código de ambas esta en el ANEXO). La macro “carta” llama a la macro “carta 1” cuando se ejecuta la primera. Ambas macros las ha hecho la grabadora, y yo las he retocado un poco a mi conveniencia. El codigo de las macros está adjunto.
Lo que hace la macro “carta” es abrir el documento “SOBRE BLANCO nuevo”, luego sobre ese documento ejecuta la macro “carta 1”, y ésta lo que hace es llamar al autexto “CARTA” que lo que inserta es un documento conteniendo campos de base de datos, concretamente los campos nombre, direccion y ciudad de la Tabla “DIRECCIONES” de la “Base de datos nueva”; aquí termina la tarea de la macro “carta 1”. Luego la macro “carta” continua y lo que hace es abrir el visor de la Tabla DIRECCIONES de la “Base de datos nueva”.

Lo que yo quisiera es saber qué código habría que añadir (sino todo, al menos una pista) para que me pidiera por pantalla a traves de un mensaje el número de registro del que quiero capturar los datos da la Tabla DIRECCIONES (donde los registros tienen los nombres, direcciones y ciudad concretos cuyo contenido me va aparecer en el autotexto, una vez que haya capurado los datos de los registros que me pida por pantalla con un mensaje; esta acción de capturar los datos si lo hiciese manualmente seria así: (el visor de Base de Datos se ejecuta con F4) selecciono con el raton el registro, le doy luego al boton “Datos en Campo”, con esto se me “pasa” el contenido de los campos del registro seleccionado al texto del documento activo en ese momento que es justamente el que he insertado con el autotexto “CARTA”.

Resultado de todo esto es que no he escrito ni el nombre, ni la dirección ni la ciudad, sino que los he “capturado”(por decirlo de una manera intuitiva) de la Tabla DIRECCIONES. Es justo esta acción la que quiero automatizar con la macro que tengo a medio terminar.

ANEXO

Código de las macros “carta” y “carta 1”

Código: Seleccionar todo

sub carta

 Dim sRuta As String
 Dim mOpciones(0) As New "com.sun.star.beans.PropertyValue"
 Dim oDoc As Object
 
 	mOpciones(0).Name = "ReadOnly"
    mOpciones(0).Value = False

 	
 
     sRuta = ConvertToUrl( "C:\Users\pc\Documents\Autotextos\Sobre-Acuses\SOBRE BLANCO Nuevo1.odt" )
     oDoc = StarDesktop.loadComponentFromUrl( sRuta, "_blank", 0, mOpciones()
 
 Call carta1

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ViewDataSourceBrowser"
args1(0).Value = true

dispatcher.executeDispatch(document, ".uno:ViewDataSourceBrowser", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ViewDataSourceBrowser"
args2(0).Value = true

' dispatcher.executeDispatch(documentt, ".uno:ViewDataSourceBrowser", "", 0, args2())


end sub

Código: Seleccionar todo

sub carta1


rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Group"
args1(0).Value = "mytexts*1"

dispatcher.executeDispatch(document, ".uno:SetActGlossaryGroup", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Group"
args2(0).Value = "mytexts*1"

dispatcher.executeDispatch(document, ".uno:SetActGlossaryGroup", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Group"
args3(0).Value = "mytexts*1"

dispatcher.executeDispatch(document, ".uno:SetActGlossaryGroup", "", 0, args3())

rem ----------------------------------------------------------------------

dim args4(1) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Group"
args4(0).Value = "mytexts*1"
args4(1).Name = "ShortName"
args4(1).Value = "CARTA"

dispatcher.executeDispatch(document, ".uno:InsertGlossary", "", 0, args4())


end sub
Adjuntos
Archivos Consulta Foro OOo.rar
(27.18 KiB) Descargado 189 veces
Última edición por SLV-es el Lun Mar 21, 2016 7:51 pm, editado 1 vez en total.
Razón: Insertar etiquetas [CODE]
Libre Office 4.4.5.3. Sistema Operativo Windows 8 Pro
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: Capturar datos de una base conectada al Writer

Mensaje por SLV-es »

Sugiero el siguiente procedimiento:

- crea en la base de datos una consulta que seleccione un registro por código, nombre o el campo que desees de la tabla origen de los datos, por ejemplo "SELECT * FROM CLIENTES WHERE COD=21" (NOTA: este SQL es el general, no es el de Base, pero seguro que puedes generar una consulta como esta en Base)
- crea la carta utilizando como origen de datos la consulta, no la tabla
- Cuando quieras generar una carta de un registro determinado, mediante macro actualiza la consulta para que muestre sólo el registro deseado (cambiar el SQL de la consulta por "SELECT * FROM CLIENTES WHERE COD=128", de nuevo uso SQL general)
- El resto es lo que tienes. Al llamar a tus macros, creará la carta de un solo registro, el de la consulta

Espero haber explicado la idea del procedimiento a seguir.

Saludos
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Preguntar-Responder
Mensajes: 15
Registrado: Dom Oct 11, 2015 12:20 pm

Re: Capturar datos de una base conectada al Writer

Mensaje por Preguntar-Responder »

Bueno he estado mirando las posiblidades de la respuesta anterior y creo que es el camino para encontrar lo que voy buscando.
Muchas gracias por responder y perdón por el tiempo en contestar.
Gracias de nuevo.
Libre Office 4.4.5.3. Sistema Operativo Windows 8 Pro
Responder