Master Field/ Slave field por código

Discute sobre las herramientas de la base de datos
Responder
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Master Field/ Slave field por código

Mensaje por Longi »

Buenas!
Estoy intentando desarrollar un sistema de búsqueda más ágil que el que tiene tanto Open como Libre, que lo que hace es una recurrencia sobre cada registro hasta que encuentra el buscado. Esto en tablas pequeñas no tiene ninguna importancia, pero cuando se incrementa considerablemente el número de registros (50.000 por ejemplo) la búsqueda se hace eterna.
Me he basado en el Form.Command para hacer una búsqueda por SQL, con más dificultades que otra cosa (uno no da para más). Al final conseguí algo con una pinta aceptable (siempre mejorable, supongo), pero me he encontrado con la horma de mi zapato: al intentar usarlo en subformularios no me va, y tengo claro (después de ver el desastre) que el asunto es que el SQL que monto no tiene en cuenta la relación entre campos Master y Slave, ya que en el Form.Command no aparencen.
¿Habría alguna manera de reflejar o añadir al Form.Command el filtro que supone el Master field sobre el subformulario?

Gracias y un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Master Field/ Slave field por código

Mensaje por Longi »

Buenas!
Replanteo la pregunta: Si en vez de usar el FormCommand, clono el ResultSet del formulario en cuestion ya tendría la relación solicitada.
Problema: ¿Hay manera de conseguir el SQL resultante de aplicar el FormCommand+FormFilter+FormOrder+ MasterField + SlaveField, es decir el SQL en el que se basa el ResultSet que le hemos clonado al formulario?
Si consiguiesemos esa sentencia SQL, después podríamos aplicar parte del código que ya tenemos hecho (y que no tenía en cuenta tanto palillo que hay que tocar).... :geek:
Si no puedo manejar el SQL, entonces me toca recorrer todo el resultset para hacer la búsqueda, en vez de filtros con otros SQL, por lo que al final estaría como al principio.


Gracias y otro saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Master Field/ Slave field por código

Mensaje por mauricio »

Si tienes un archivo donde pueda hacer pruebas de introspección me será más fácil saber si existe.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Master Field/ Slave field por código

Mensaje por Longi »

Buenas!

Lo he complicado todo un poco….El ejemplo lo pongo en HSQLDB 2.3 multiusuario, así también si alguien quiere probar, tiene la posibilidad.
En la carpeta van tres .bat que tendrían que ser editados con la ruta de ‘Java.exe ‘y con la ruta en la que se ponga la carpeta (traduje algunas líneas explicativas de cómo y para qué hacer las cosas).
Al abrir la base de datos ya arranca el servidor sin más problemas (o así debiera ser).
Al abrir, se lanza el formulario denominado ‘Formulario_puente’, que tiene como formulario principal un cuadro de lista.
Si te sitúas en uno de los DNI y le das al botón ‘Búsqueda’ no pasará nada (se ha colocado en el primer registro que tiene el DNI que le has marcado, y como viene en el diálogo por defecto, no parece haber hecho nada). Si vuelves a clickar en ‘Búsqueda’ irá al siguiente registro que tiene ese DNI, y así hasta terminar los registros, mostrándote un aviso de que no le quedan más.
También avisa si no hay registros con el texto solicitado (que por supuesto puedes cambiar).
Este formulario tiene un formulario principal en forma de control de tablas con origen un SQL, pero no tiene orden ni filtro en las condiciones del formulario. Así funciona sin problemas.
En el otro formulario (Formulario_puente3) sí que le he puesto filtro y orden, y ya no funciona.
Entre las pruebas que he hecho está que si en el formulario ‘esclavo’ uso el form.Command y le pregunto el número de líneas, entonces me da tantas como la tabla de origen (oSQL o Consulta, según el caso), pero si utilizo el ‘oForm.CreateResultSet()’ y le pregunto como a un resultSet normal y corriente, tendré una respuesta de 1 ó unos pocos según los registros relacionados con el ‘formulario Master’.
No había explicado que en la técnica usada (no se me ocurrió mejor cosa) genero dos consultas una tras de otra, con la idea de numerar cada registro del formulario con su número de registro en la tabla original (función ROWNUM() que sí que existe en HSQLDB 2.3 y creo que en Firebird, pero no en HSQLDB 1.8). De tal modo que, el resultSet con el que se genera el formulario me dará una consulta con todos los registros del formulario y en el orden en el que están.
La segunda consulta, con la función anterior y usando a la anterior consulta como origen de datos me da una lista con el primer campo ocupado por un dígito, que corresponde con el número de línea que tendría sin atender al orden (no termino de entender el porqué, pero parece que es así).
Después en el código meto otro SQL con la función de marras y me termina dando un listado para el texto escogido con un primer campo que indica el número de línea del resultSet en el que tendríamos que fijar el formulario . Tendremos tantas filas como registros hay para el texto propuesto.

Complejo de seguir ¿no?, pues todo esto se desmorona en cuanto aparece un filter o un order en las propiedades del formulario, así que pensaba si habría posibilidad de escalar el ‘oForm.CreateResultSet()’ para conseguir una expresión SQL que incluyese todos los condicionantes para poder hacer las consultas sin más error.

De todos modos, esto creo que no es para mí, que os estoy dando guerra por algo que no puedo abarcar, y que si alguien tiene que entrar al trapo son los ‘LOOMakers’, que creo que ya que están de cambios en base, podríamos abrir un hilo sobre propuestas de mejora para que alguien con mejor criterio que el mío seleccione las razonables y se las envíe a quien tengan que ir.

Perdón por el rollo, gracias y un saludo! ;)

El arhivo se hace algo grande así que se puede bajar de aqui:https://drive.google.com/file/d/1H91Y4T ... sp=sharing

PD. Si queda sin contestar no me parecería extraño.
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Responder