Hoy observamos el uso de cuadros de diálogo al editar datos en LibreOffice Base (OpenOffice Base). Como encontramos en publicaciones anteriores, el formulario LibreOffice Base (OpenOffice Base) es en realidad una instancia del editor de texto LibreOffice (OpenOffice) Writer. Para organizar la interfaz de la ventana dentro del formulario, se utilizan cuadros de diálogo, que se crean convenientemente en la interfaz visual incorporada, pero no tienen soporte para comunicarse con las tablas de la base de datos. Organizaremos esta conexión con las macros OO Basic.
Comencemos en orden. Cree dos tablas en la base de datos:
productos
- id (entero, clave primaria)
- nombre (cadena)
órdenes
- id (entero, clave primaria)
- productId (entero)
- cuenta (entero)
- fecha (tipo de datos Fecha)
Cree el formulario de pedidos, agregue el elemento Formulario al formulario con el nombre de pedidos. Así como Control de tabla con origen de datos de pedidos. Cómo hacer esto se discutió en la
Parte 2 de una serie de mensajes.
Al configurar las propiedades de la columna de fecha, preste atención a las propiedades marcadas en la figura con flechas que le permiten mostrar los datos en el formato deseado y use el calendario desplegable para seleccionar una fecha específica.
Ahora, justo en la tabla, puede agregar y modificar datos. Hasta cierto punto, esto es conveniente, similar al trabajo habitual de un cliente con un procesador de mesa. Pero en algún momento, comienzan los problemas que también son característicos de trabajar con procesadores de mesa. Los datos se pueden cambiar al azar sin siquiera darse cuenta. Y habiendo notado que es imposible revertir todo como estaba. Hay poco espacio para nuevos altavoces y se puede formar un desplazamiento horizontal desagradable. Los encabezados de columna también tienen un límite de tamaño (de lo contrario, no se ajustarán horizontalmente), y esto no permite una descripción detallada de los datos.
Como media medida, puede colocar campos regulares para la entrada de datos al lado de la tabla (Control de texto, Control numérico, etc.). Establezca los campos correspondientes de la tabla de pedidos como fuente de datos y todo funcionará. Al navegar por un conjunto de datos, los datos en los campos de entrada cambiarán. Al cambiar los datos en los campos de entrada, los datos en la tabla de la base de datos cambiarán. Pero esta solución no se verá muy hermosa.
Por lo tanto, implementamos dicha funcionalidad utilizando cuadros de diálogo. Los cuadros de diálogo tienen una limitación significativa. Los campos de entrada de diálogo no están relacionados con la tabla de la base de datos. Por lo tanto, completar los campos de entrada de Diálogo desde la tabla de la base de datos y guardar los campos de entrada en la tabla de la base de datos deberá hacerse con la macro OO Basic. Sin embargo, esto es bueno, porque le permite considerar las opciones de programación OO Basic (antes de eso, mis mensajes solo describían el trabajo con el entorno, pero todo esto era preparación para la publicación de hoy).
Para abrir el editor de cuadros de diálogo, debe seleccionar en el menú Herramientas-> Macros-> Organizar macros-> LibreOffice Basic-> Organizador-> Diálogo-> Nuevo | Editar | Eliminar. Me gustaría tener una forma más rápida de llegar a este editor. Después de eso, se abrirá el editor de diálogo (por desgracia, no es el más conveniente), en el que crearemos campos con los nombres de los campos en la tabla de la base de datos. Como recordará, los cuadros de diálogo no se unen automáticamente a las tablas de la base de datos, por lo que escribiremos una macro para hacerlo. Y como convención de nomenclatura, definamos los nombres de los campos de entrada y los campos de la tabla de la base de datos de la misma manera.
Un editor con un formulario terminado se verá así:
Luego, agregue dos botones al Diálogo. Le daremos a los botones nombres arbitrarios, pero comenzando con un guión bajo, para distinguirlos de los campos de la base de datos. A cada botón de la paleta de propiedades se le puede asignar una acción. Establezcamos la acción OK en el botón: cierra el cuadro de diálogo con la confirmación de la acción. Y el segundo, Cancelar, cierra el cuadro de diálogo sin confirmar la acción.
Cierre el editor de cuadros de diálogo y vuelva al editor de formularios. Creemos un botón que llame al cuadro de diálogo y le asignemos el procedimiento de controlador Order_Edit, en el que rellenaremos el cuadro de diálogo de la tabla de la base de datos FromBaseToDialog (oForm, oDialog) y guardaremos los datos de la tabla de la base de datos del cuadro de diálogo FromDialogToBase (oDialog, oForm).
Sub Order_Edit(Event) Dim oDialog As Object Dim orders As Object orders = Thiscomponent.DrawPage.Forms.GetByName("orders") DialogLibraries.LoadLibrary("Standard") oDialog = CreateUnoDialog(DialogLibraries.Standard.dialogOrder) FromBaseToDialog(orders, oDialog) If oDialog.Execute() = 1 Then FromDialogToBase(oDialog, orders) orders.UpdateRow() End If End Sub Sub FromBaseToDialog(oForm, oDialog) Dim I Dim sName As String For I = 0 To Ubound(oDialog.Model.ElementNames) sName = oDialog.Model.ElementNames(I) If Mid(sName, 1, 1) <> "_" And Mid(sName, 1, 5) <> "Label" Then ODialog.GetControl(sName).SetText(oForm.Columns.GetByName(sName).String) End If Next I End Sub Sub FromDialogToBase(oDialog, oForm) Dim I Dim sName As String For I = 0 To Ubound(oDialog.Model.ElementNames) sName = oDialog.Model.ElementNames(I) If Mid(sName, 1, 1) <> "_" And Mid(sName, 1, 5) <> "Label" Then oForm.Columns.GetByName(sName).UpdateString(Trim(oDialog.GetControl(sName).GetText())) End If Next I End Sub
Se supone que el cuadro de diálogo se guardó en la biblioteca estándar como dialogOrder. Naturalmente, puedes elegir otros nombres. Los nombres de controles que comienzan con guiones bajos se omiten y no se procesan. Además, los nombres que comienzan con Etiqueta, que se utilizan para encabezados de campo de texto, no se procesan.
Al llamar a oDialog.Execute () = 1, se muestra el cuadro de diálogo dentro de la ventana de formularios y se detiene la macro hasta que se hace clic en el botón Aceptar o Cancelar. Cuando hace clic en Aceptar, el valor de retorno es igual a uno.