¡Hola comunidad!
Tenemos hecho un Writer (.odt) en modo Formulario. Quisiéramos que los datos que se introduzcan puedan ser “pasados” o a una hoja de Calc (.ods) o a una base de datos de Base (.odb). Así no perderíamos los datos introducidos ni tendríamos que pasarlos uno a uno.
Ruego nos ayuden a poder vincular para volcar dichos datos. ¡¡Gracias!!
En el archivo formulario es necesario que asignes un nombre identificador a cada campo, si para ejemplo utilizamos Nombre, Apellido, Edad, Correo, estos serían: txtNombre, txtApellido, txtEdad, txtCorreo, supongamos que tu archivo se llama formulario.odt.
Necesitas crear la base de datos correspondiente en Base
Al iniciar se abrirá el asistente de base de datos.
Selecciona —> Crear una nueva base de datos—> Siguiente.
Verifica que este seleccionada la opción —> Sí, registrar la base de datos para mí
Haz clic en —> Finalizar.
Guarda la base de datos: en un directorio donde se encuentre el archivo de Writer y asigna un nombre (por ejemplo, datos.odb
).
En la ventana principal de Base pulsa en el panel izquierdo—> Tablas —> Crear tabla en vista Diseño…
Para cada dato que recopilarás del formulario, define un campo en la tabla, por ejemplo:
Nombre del campo Tipo de dato
ID Entero [autoincremental]
Nombre Texto (VARCHAR)
Apellido Texto (VARCHAR)
Edad Entero pequeño
Correo Texto (VARCHAR)
Al campo ID autoincremental, selecciónalo con el botón derecho y elige —> Clave primaria
Cierra la ventana de diseño de la tabla. Se te pedirá que le asignes un nombre (por ejemplo, Inscripciones).
Aceptar
En Base —> Herramientas —> Macros —> Organizar macros —> LibreOffice Basic.
Selecciona la base creada, datos.odb y haz clic en —>Nuevo.
Asigna un nombre al módulo, por ejemplo, ImportarDatos.
Haz clic en Editar.
Y Debes insertar el código de la macro
Uno tentativo sería:
Sub ImportarFormulario
Dim oDoc As Object
Dim oForm As Object
Dim oFields As Object
Dim sNombre As String
Dim sApellido As String
Dim iEdad As Integer
Dim sCorreo As String
Dim oDBContext As Object
Dim oDataSource As Object
Dim oConnection As Object
Dim oStatement As Object
Dim sSQL As String
' Seleccionar el archivo del formulario
oDoc = StarDesktop.loadComponentFromURL("file:///ruta/al/formulario.odt", "_blank", 0, Array())
' Acceder al formulario
oForm = oDoc.DrawPage.Forms.getByIndex(0)
' Obtener los valores de los campos
sNombre = oForm.getByName("txtNombre").Text
sApellido = oForm.getByName("txtApellido").Text
iEdad = CInt(oForm.getByName("txtEdad").Text)
sCorreo = oForm.getByName("txtCorreo").Text
' Conectar a la base de datos
oDBContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource = oDBContext.getByName("datos")
oConnection = oDataSource.getConnection("", "")
oStatement = oConnection.createStatement()
' Insertar los datos en la tabla
sSQL = "INSERT INTO ""datos"" (""Nombre"", ""Apellido"", ""Edad"", ""Correo"") VALUES ('" & sNombre & "', '" & sApellido & "', " & iEdad & ", '" & sCorreo & "')"
oStatement.executeUpdate(sSQL)
MsgBox "Datos importados correctamente."
oDoc.close(True)
End Sub
Para ejecutar la macro:
Herramientas —> Macros—> Ejecutar macro.
Selecciona —> datos.odb —> ImportarDatos —> Importarformulario`.
Ejecutar.
Usa un formulario de Base directamente en esa base de datos, el usuario casi no vera la diferencia…