¿Cómo tomar datos de una tabla y usarlos como parte del diseño de un formulario?

Buen día. El archivo de Base que estoy trabajando tiene 4 formularios: PRINCIPAL, ALUMNES, SOCIES y CUOTAS. Es la organización para la Cooperadora de una escuela.

PRINCIPAL tiene tres botones que abren los otros tres formularios, solo eso. Pero me gustaría, en este formulario, que aparezcan algunos datos que ingresé en otra tabla llamada “ESCUELA_DATOS”, como por ejemplo: nombre de la escuela, número, etc. Me gustaría que aparezcan, no para modificar, sino como parte del diseño. La forma de modificarlos lo haré en otro momento con otro formulario, por si lo toma otra Cooperadora e ingresa los datos de su escuela.

El formulario PRINCIPAL no está relacionado con ninguna tabla, así que creé un subformulario de la tabla ESCUELA_DATOS y, dentro de éste, estaría agregando objetos que tomen los datos del primer (y único) registro de la tabla.

Pero las etiquetas (que sería el diseño que más me gustaría usar) no puedo relacionarlas con ningún dato (a menos que use algún macro, pero no es la intención, no por ahora).

Un campo de texto sí… pero debo ponerle un color de fondo, no puede ser transparente. Y si quiero que no pueda modificarse (dándole “No” a “Activado”), el texto se pone gris. Y no quiero eso.

¿Hay alguna forma de hacerlo o debo recurrir a un macro que modifique etiquetas al cargar la vista?

Una pregunta por favor; cuando quieres a una persona de hacer el trabajo al su posto, sin los instrumentos necesarios no se puede hacer nada.

Tienes entonce de cargar el .odb; asì jo fuero encantado de favorir auxilio…

Gracias por su comprendido…

No me parecía necesario dejar un achivo. Igualmente, contesté a mi pregunta con una solución mediante macros y dejo un archivo para bajar.

Solo pon como solo lectura, si combinas correctamente los colores, se verá bastante bien.
image

En mi caso, no tengo fondo y le dejé un degrado agradable (un “degradable” :grin:). Si uso un Campo de texto, como dije, sí o sí, tengo que ponerle un color de fondo. A esto se le suma que, si lo pongo como no-activo, el color del texto se cambia a gris. Y si hago como vos me sugerís, ponerlo como sólo lectura en lugar de no-activo, el texto es “seleccionable”… y no es lo que quiero.

Encontré la solución… pero usando una macro. La voy a compartir en este mismo hilo.

Finalmente, llegué a la solución… pero usando una macro. Dejo un archivo de ejemplo con tres macros diferentes: una simple que solo cambia el texto, otra que utiliza SQL para obtener los datos de la tabla y otra que utiliza la tabla a la que está conectado el formulario como elemento y que éste incluye los demás elementos. Para esto último, tiene que estar configurado en sus propiedades.

Registro2Etiqueta.odb (13.1 KB)

Dejo acá las macros usadas:

REM  *****  BASIC  *****

Sub CambiarTextoEtiquetaSimple
    Dim oForm As Object
    Dim oLabel As Object

    ' Obtener el formulario interno (Formulario)
    oForm = ThisComponent.DrawPage.Forms.getByName("Formulario")

    ' Obtener la etiqueta LblEscuela
    oLabel = oForm.getByName("LblEscuela")

    ' Cambiar el texto de la etiqueta
    oLabel.Label = "Hola, ¿qué tal?"
End Sub


Sub CambiarTextoEtiquetaSQL
    Dim oForm As Object
    Dim oLabel As Object
    Dim oContext As Object
    Dim oDb As Object
    Dim oConn As Object
    Dim oStatement As Object
    Dim oResultSet As Object
    Dim escuelaNombre As String
    
    ' Obtener el formulario interno (Formulario)
    oForm = ThisComponent.DrawPage.Forms.getByName("Formulario")
    
    ' Obtener la etiqueta LblEscuela
    oLabel = oForm.getByName("LblEscuela")
    
    ' Conectar a la base de datos
    oContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
    oDb = oContext.getByName(ThisDatabaseDocument.URL)
    oConn = oDb.getConnection("", "") ' Conexión sin usuario y contraseña
    
    ' Crear una declaración SQL
    oStatement = oConn.createStatement()
    
    ' Ejecutar la consulta para obtener el primer registro
    oResultSet = oStatement.executeQuery("SELECT escuela_nombre FROM escuela_coop_datos LIMIT 1")
    
    ' Verificar si hay un resultado
    If oResultSet.next() Then
        escuelaNombre = oResultSet.getString(1)
    Else
        MsgBox "No se encontró ningún registro en la tabla escuela_datos.", 16, "Error"
        Exit Sub
    End If
    
    ' Cambiar el texto de la etiqueta
    oLabel.Label = escuelaNombre
    
    ' Cerrar la conexión
    oConn.close()
End Sub


Sub CambiarTextoEtiquetaForm
    Dim oForm As Object
    Dim oSubForm As Object
    Dim oLabel As Object
    Dim oGrid As Object
    Dim oColumn As Object
    Dim escuelaNombre As String
    
    ' Obtener el formulario PRINCIPAL
    oForm = ThisComponent.DrawPage.Forms.getByName("Formulario")
    
    ' Obtener la etiqueta LblEscuela
    oLabel = oForm.getByName("LblEscuela")
    
    ' Verificar si hay registros en el subformulario
    If oForm.RowCount > 0 Then
        ' Mover al primer registro (si no está ya allí)
        oForm.absolute(1)
        
        ' Obtener el valor del campo escuela_nombre
        oGrid = oForm.Columns
        oColumn = oGrid.getByName("escuela_nombre")
        escuelaNombre = oColumn.getString()
    Else
        MsgBox "No se encontró ningún registro en el formulario 'escuela_coop_datos'.", 16, "Error"
        Exit Sub
    End If
    
    ' Cambiar el texto de la etiqueta
    oLabel.Label = escuelaNombre
End Sub

Fuente: una extensa charla con ChatGPT :grin:.

Si hubieses dicho, mejor, que con una macro, esto se hace en unos minutos y nos ahorras las ingentes cantidades de agua que has consumido con esa “inteligencia aparente”. Procuren no usarla para esto, aún no esta lista.

1 Like

Prefiero no decir mas, porqué no comprendo la razon de esta pregunta. Jo pienso tambien que este es una complicacion inutile.

No puedo mirar el su odb. desde non tengo el motor firebird.

Saludos