Hello Francisco,
On Monday 19 October 2009, 17:50, Francisco Martagón Gordillo wrote:
> Una base de datos con alumnos, trato de crear un formulario en el que
> exista una lista desplegable que muestre los alumnos, pero sólo los de
> una determinada "unidad" o curso. Para que sólo muestre los de esa
> unidad, intento usar otra lista desplegable en la que se elige el curso.
>
> La operatoria sería: en la lista desplegable "SeleccionarUnidad" elijo
> el curso, pulso el botón "BotonFiltar" y mediante una macro asociada a
> este botón (evento "Al ejecutar") se filtran los datos a la lista
> desplegable "SeleccionarAlumno", por lo que ésta sólo mostraría los
> alumnos de esa unidad.
>
> El formulario será más complejo, pero por ahora me he atascado aquí.
>
> Estoy usando como ejemplos las macros de una base de datos de ejemplo
> llamada "MANIPULAR_BASE" que creo que es obra de Ariel.
sí, *era* obra mía.
No he probado si es que funciona con OOo 3.* y hace muuuucho que no la retoco.
> La macro asociada al botón se llama "AlApretarBoton1", y ésta a su vez
> llama a la subrutina "GenerarListaAlumnos".
>
> Y en ésta segunda es en la que se detiene, en la línea que marco con
> **>>** . Además me sale un mensaje de error que dice "Variable de objeto
> no establecida".
>
> Si lo necesitan puedo enviarles adjunta la base de datos. ¿Se pueden
> enviar adjuntos a la lista de correos?
>
> Aquí les dejo el código de las macros, y gracias por su ayuda:
>
> REM ***** BASIC *****
>
> Sub AlApretarBoton1(oEv)
> Dim oForm1, oSeleccionUnidad
> Dim sFiltroNombre$
> Dim sSeleccion$, sSelect$, sORDER$, sSQL$
como aquí está oModelo inicializada [¿dónde está definida? debería ser una
variable local, y pasarla como parámetro]
> oModelo = oEv.Source.Model
> oForm1 = oModelo.getParent()
>
> sSelect = "SELECT ""PrimerApellido"" || ' ' || ""SegundoApellido"" ||
> ', ' || ""Nombre"" AS Alumno, ""Unidad"" FROM ""Alumnos"""
>
> oSeleccionUnidad = oForm1.getByName("SeleccionarUnidad")
> sSeleccion =
> oSeleccionUnidad.StringItemList(oSeleccionUnidad.SelectedItems(0))
>
> sFiltroNombre = " WHERE ""Unidad"" = '" & sSeleccion & "'"
>
> sORDER = " ORDER BY ""PrimerApellido"", ""SegundoApellido"",
> ""Nombre"""
> sSQL = sSelect & sFiltroNombre & sORDER
pásala como parámetro en la llamada:
> SUB_GenerarListaAlumnos("SeleccionarAlumno", sSQL)
SUB_GenerarListaAlumnos(oModelo, "SeleccionarAlumno", sSQL)
> End Sub
>
cambia la interfaz de la subrutina:
Sub SUB_GenerarListaAlumnos(oModelo as Object, sNombreLista$, sComando$)
(¿quién diseñó semejante espertento? ah, yo....)
> Sub SUB_GenerarListaAlumnos(sNombreLista$, sComando$)
> Dim sMatriz$(0), oListaAlumnos
si esto sigue generando un error, pon un punto de quiebre, y verifica que
oModelo no sea NULL.
Si no es null, y genera error, tal vez sea que no existe un control con el
nombre sNombreLista (¿has modificado los nombres de los controles?)
Pero en ese caso, se genera una excepción UNO, que OOo Basic la muestra con un
mensaje diferente.
> oListaAlumnos = oModelo.Parent.getByName(sNombreLista)
> oListaAlumnos.ListSourceType =
> com.sun.star.form.ListSourceType.SQLPASSTHROUGH
> sMatriz(0) = sComando
> oListaAlumnos.ListSource = sMatriz()
> oListaAlumnos.Enabled = TRUE
> End Sub
Si la base no tiene datos privados, puedes pasármela que le pego una mirada
(si no, una copia con datos ficticios). Ahora tan sólo puedo adivinar que es lo
que anda pasando.
Regards
--
Ariel Constenla-Haile
La Plata, Argentina
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]