[RESUELTO] Consulta que en la respuesta omite registros

Discute sobre las herramientas de la base de datos
Responder
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

[RESUELTO] Consulta que en la respuesta omite registros

Mensaje por Fermarin »

Hola muy buenos días:
Soy nuevo en este Foro, Pasé de Windows a Mac OX 10.7.5. y de Access a LibreOffice Versión: 4.3.7.2, donde tenía una base de datos "FONOTECA" para gestionar y consultar mi colección de LPs y CDs de música, que funcionaba perfectamente, ahora he conseguido pasar las tablas a LibreOffice y estoy intentando reconstruir las consultas, los formularios y los informes, ya que todo esto no ha sido posible pasarlo, incluso copiando los códigos SQL de las consultas y formularios de Access y generándolos nuevamente en LibreOffice mediante pegado en SQL, da errores de sintaxis y no me permite generar su creación.
Concretamente he creado una consulta en modo diseño para extraer toda la información de la base de datos, que abarca todas las tablas (8 en total) y me ha sorprendido que me devuelva la información sólo de los registros que contienen información en todos los campos. Es decir, que omite los registros que contienen falta de información en algún campo. Por ejemplo, no me salen los registros de las obras en los que el campo "Orquesta" está vacío (porque el interprete es un piano y lógicamente no hay orquesta) o porque el campo "Solista" no contiene información porque la pieza no es para solista, o porque el campo "Compositor" está vacío por ser una pieza de autor anónimo y carece también de nombre y apellido, etc., seguidamente aporto el código SQL que ha generado la consulta para que se pueda analizar:

Código: Seleccionar todo

Consulta Total
SELECT "FONOTECA"."DISCO", "FONOTECA"."GB", "FONOTECA"."TITULO", "COMPOSITOR"."ApeAutor", "COMPOSITOR"."NomAutor", "FORMA_MUSICAL"."FORMA", "ORQUESTA"."ORQUESTA", "DIRECTOR"."APE_DIRECTOR", "DIRECTOR"."NOM_DIRECTOR", "SOLISTA"."ApeSolista", "SOLISTA"."NomSolista", "INST_SOLISTA"."InstSolista"
 FROM "FONOTECA", "COMPOSITOR", "DIRECTOR", "FORMA_MUSICAL", "ORQUESTA", "SOLISTAS", "INST_SOLISTA", "SOLISTA" 
WHERE "FONOTECA"."AUTOR" = "COMPOSITOR"."IdAutor"
 AND "FONOTECA"."DIRECTOR" = "DIRECTOR"."IdDirector" 
AND "FONOTECA"."FORMA" = "FORMA_MUSICAL"."IdForma"
 AND "FONOTECA"."ORQUESTA" = "ORQUESTA"."Id_Orquesta"
 AND "SOLISTAS"."IdRelacion" = "FONOTECA"."IdRelacion" 
AND "SOLISTAS"."IdInst_Solista" = "INST_SOLISTA"."IdInst_Solista"
 AND "SOLISTAS"."Idsolista" = "SOLISTA"."IdSolista" 
ORDER BY "FONOTECA"."DISCO" ASC, "FONOTECA"."TITULO" ASC
Mucho agradeceré cualquier aportación que me ayude a conseguir utilizar este nuevo programa y recuperar el trabajo que en su momento realicé en Access con esta Base que contiene más de dos mil registros.

Muchísimas gracias,
Fernando
Última edición por Fermarin el Vie Dic 23, 2016 2:18 pm, editado 1 vez en total.
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Consulta en Base que en la respuesta omite registros

Mensaje por mauricio »

Así, solo viendo tu instrucción SQL, que no te devuelva los registros donde no hay datos en normal, dado que haces un WHERE con las relaciones, tienes que reemplazar esto por JOINS, solo que ahora no recuerdo como, pero aquí y en internet encontraras muchas información de esto. Mejor, si subes una pequeña muestra donde se vea el problema, será más fácil para quien quiera ayudarte...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Consulta en Base que en la respuesta omite registros

Mensaje por FJCC-ES »

Es necesario usar LEFT OUTER JOINs en el FROM. Por ejemplo

Código: Seleccionar todo

FROM 
  "FONOTECA" 
   LEFT OUTER JOIN "COMPOSITOR" 
     ON "FONOTECA"."AUTOR" = "COMPOSITOR"."IdAutor" 
   LEFT OUTER JOIN "DIRECTOR" 
     ON "FONOTECA"."DIRECTOR" = "DIRECTOR"."IdDirector"
   ...
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Muchas gracias a Mauricio por su interés.
Y Sobre todo a FJCC-ES, por su clara aportación que me ha resuelto el problema, ahora la consulta devuelve todos los registros, pero aquellos que, por ejemplo la obra contiene mas de un intérprete, me lo devuelve duplicado tantas veces como intérpretes tiene la obra. Quizás habría algún modo de concatenar la información para que devolviese el registro una sola vez situando a todos los intérpretes en una misma línea en un campo. En Access yo lo tenía así:
Disto Titulo Autor Intérpretes
1 Concierto A Mozart Fulanito(violín), Menganito(piano), Sultanito(Saxso)
Coro de Voces, Juan Diego(director)
2 Nocturno Lizt Fulanito(piano)

Muchas gracias por vuestras aportaciones, de verdad que son de un valor incalculable.
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Consulta en Base que en la respuesta omite registros

Mensaje por FJCC-ES »

mauricio escribió:Mejor, si subes una pequeña muestra donde se vea el problema, será más fácil para quien quiera ayudarte...

Saludos
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Recojo la sugerencia de Mauricio y adjunto dos ficheros de un ejemplo de como ha quedado en BASE y como era en Access
Adjuntos
Ejemplo en Access.pdf
(68.88 KiB) Descargado 211 veces
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Consulta en Base que en la respuesta omite registros

Mensaje por mauricio »

Un PDF es una mala idea, obligas a quien quiera ayudarte a crear desde cero una base de datos para mostrarte como se hace... tomate unos minutos y anexa una base de datos con los datos mínimos que muestren el problema, ayudaras a quien quiera ayudarte...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Parece que el ejemplo en base no se ha adjuntado, repito el envío
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Consulta en Base que en la respuesta omite registros

Mensaje por mauricio »

Comprimelo, si no, no te dejará agregarlo...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Acompaño de nuevo el ejemplo que ahora he comprimido todavía más, que es también en pdf, y corresponde al resultado de la consulta (parte de ella), confeccionada con vuestra aportación. Que ahora funciona con esta salvedad de repetir los registros como relataba en anterior respuesta. A ver si llega.
Mauricio estoy totalmente de acuerdo con mandar un ejemplo en una pequeña base, y lo haré en cuanto disponga de un poco de tiempo, pero en Access no puedo porque en Mac no funciona, por eso lo he mandado en pdf.
De hecho, los dos van en pdf para ver la diferencia.
Agradezco vuestra paciencia
Adjuntos
EjemploenBase.pdf
(54.92 KiB) Descargado 168 veces
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Muy buenas noches:
Como prometí, aquí adjunto una pequeña base de datos con un registro de un solo disco LP, una pieza que es un quinteto (La Trucha de Schubert) y como se ve la consulta devuelve 5 registros, uno por cada uno de los intérpretes.

Confio en vuestra amabilidad de examinarlo.
Un cordial abrazo.
Adjuntos
Base de Prueba.odb.zip
(4.93 KiB) Descargado 155 veces
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Consulta en Base que en la respuesta omite registros

Mensaje por RMG »

Hola,

Lo que muestras en PDF en Acces, no es una consulta, sino un informe. Aquí te adjunto de manera un poco burda, como puede quedar en un informe de Base. Por supuesto depurandolo y aseandolo un poco puede quedar decente.

NOTA: el informe esta hecho con ORB( Oracle Report buider) una extensión de AOO.

Saludos
Adjuntos
Base de Prueba1.zip
(8.65 KiB) Descargado 136 veces
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Muy buena observación, RMG, efectivamente se trataba de un informe en Access, y el ejemplo que me propones es ilustrativo pero… al añadir algunos ejemplos a la Base de pruebas descubro esta pega:

Al ejecutar el informe con los registros que he añadido observo que para los discos 1, 2 y 3, no hay problema, cada uno tiene una obra única y de vuelve los intérpretes o la orquesta con su director, o ambas cosas cuando la obra consta de orquesta y solistas. Pero para el disco nº 4, que contiene 3 obras distintas interpretadas por el mismo solista, devuelve la información con sólo el título de la primera obra (omitiendo los dos títulos restantes) y el intérprete solista lo repite 3 veces (una por cada título, aunque los omita). Cuando hay mas de una obra en un CD o LP solo informa del primer título.

Se puede ejecutar la "ConsultaTotal" y el "informe1" para comparar lo que devuelve cada una.
Adjunto nuevamente el fichero de la Base que contiene esta información nueva añadida.

Muchísimas gracias por vuestra dedicación y consejo.
Saludos,
Adjuntos
Base de Prueba1.odb.zip
(10.16 KiB) Descargado 131 veces
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Consulta en Base que en la respuesta omite registros

Mensaje por RMG »

Hola,

Para eso tienes las agrupaciones. Ya te comento que esto te lo tienes que trabajar, pero tienes bastantes posibilidades. Mira el adjunto, simplemente he hecho una nueva agrupación por título.

Saludos
Adjuntos
Base de Prueba2.zip
(10.48 KiB) Descargado 155 veces
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Excelente aportación RMG, no me cabe duda que tengo que trabajarlo muy bien, como así lo hice en Access.

Al hilo de esto, en el “Ejemplo en Access.pdf” que remití el pasado día 12, efectivamente era un formulario, recuerdo me costó tiempo depurar, leí varios manuales, incluso compré dos de ellos y revisé muchos comentarios por internet. Mi intención era que en una misma línea y bajo la etiqueta de INTÉRPRETES colocara el nombre de la orquesta, el del director y los solistas con su instrumento, y de este modo, además de obtener mayor claridad, ahorraría papel al imprimir el informe. Buscaba una expresión que analizara si el campo “Orquesta” contenía información y so no la tenía saltara a ejecutar la concatenación de los campos de “NomSolista”, “ApeSolista” y “InstSolista”, en caso de tenerla entonces ejecutara desde el principio la expresión añadiendo los campos del “NomDirector” “ApeDirector y colocara entre paréntesis la palabra (director), como se ve en el ejemplo que menciono adjunté.
Hallé este ejemplo :
“Si se desea combinar los valores de los campos Ciudad, Región y Código para un informe, algunos registros podrían carecer de valor por ejemplo Región. En este caso terminaría con una coma no deseada.
Para eliminar la coma no deseada se puede usar el operador (+) como en este ejemplo:

= ([Ciudad] & (“, “ + `Región]) & “ “ & [Código])

El operador + combina el texto del mismo modo que &. Sin embargo, el operador + también permite lo que se conoce como propagación de valores nulos. Esto significa que si algún componente de una expresión es nulo, toda la expresión lo es también. En el ejemplo anterior considere la sección que contiene (“, “+[Región]). Puesto que se usa el operador +, la expresión dentro de los paréntesis incluye una coma sólo si existe un valor en el campo Región. Si no existe, se aplica la propagación de valores nulos y toda la expresión dentro de los paréntesis da como resultado un valor nulo.”

Aprovechando esto, construí esta expresión: (“+Minús([InstSolista])+”)”) y la incluí en la redacción siguiente:
La expresión para el cuadro independiente INTÉRPRETES, como dije, quedó así:

=([ORQUESTA_ORQUESTA] & (", "+[NOM_DIRECTOR])+" "+[APE_DIRECTOR]+" (director) " & [NomSolista] & " " & [ApeSolista] & (" ("+Minús([InstSolista])+")"))

Con esta expresión se evita que si en algunos casos existe valor en el campo Orquesta pero no en el de Director, por ejemplo en un quinteto, me devuelva “(director)”, que no es deseable. También cuanto hay un director que dirige a un grupo de solistas y no hay valor en el campo Orquesta no me devuelva el valor, ya que al comprobar que no existe valor en Orquesta la expresión pasaría a ejecutar la segunda parte.

Con posterioridad vi que el campo Orquesta y Director se repetía con cada uno de los solistas, por lo que decidí crear un campo para la Orquesta/Director y otro para los solistas y colocar en sustitución de la expresión INTÉRPRETES esta:

=([NomSolista] & " " & [ApeSolista] & (" ("+Minús([InstSolista])+")"))

Y para el campo Orquesta/Director, esta otra:

=([ORQUESTA_ORQUESTA] & (", "+[NOM_DIRECTOR])+" "+[APE_DIRECTOR]+" (director) ")
Y así es como quedó en el ejemplo mencionado.
Pero claro, todo esto no vale ahora para Base en LibreOffice, evidentemente.

Cualquier ayuda desde vuestra experiencia será muy bien recibida,
Un fuerte abrazo.
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Consulta en Base que en la respuesta omite registros

Mensaje por RMG »

Hola,

Con las funciones ||(dos barras verticales), COALESCE, CASE WHEN Y CONCAT podrás hacer muchas cosas, te dejo un ejemplo para tu consulta a falta de incluir algún campo que te dejo como deber.

COALESCE("ORQUESTA"."ORQUESTA",'')||CASE WHEN "DIRECTOR"."NOM_DIRECTOR" IS NULL THEN '' ELSE ', '||"DIRECTOR"."NOM_DIRECTOR" END || LCASE(CONCAT("INST_SOLISTA"."InstSolista",'') ('' al final de COALESCE y CONCAT son dos comillas simples)

En este enlace puedes ver más funciones, y si haces una búsqueda en el foro con la palabra funciones encontrarás una BD de funciones de ejemplo.

http://wiki.open-office.es/Funciones_de ... ffice_Base

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Buenas tardes RMG:
Muchísimas gracias por la información y las indicaciones, me pongo a trabajar y espero llevar a buen término los deberes.

Un saludo cordial,
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Buenas noches:

Estimado RMG, lo lamento pero no consigo aclararme con la redacción de expresiones. Y tampoco sé donde colocarla en el Informe. Por otro lado he intentado modificar la consulta "ConcatCompositor" porque cuando el campo "NomAutor" está vacío (Autor ANÓNIMO) no puede concatenar ye ignora el dato, por ejemplo en del formulario que estoy editando "Ficha de discos",campo de lista en "Compositor" que depende la la "SubConsAutor" utilizando "COALESCE" pero tampoco he sido capaz, he realizado distintas pruebas sin conseguido (error de sintaxis). Adjunto el código de una de las pruebas para esta SubConsAutor y la Base de Prueba3.

Código: Seleccionar todo

COALESCE( "COMPOSITOR"."COMPOSITOR",'' ) || CASE WHEN "COMPOSITOR"."NomAutor" IS NULL THEN '' ELSE ', '|| "COMPOSITOR"."NomAutor" END || LCASE( CONCAT ( "ApeAutor" ), "ApeAutor" || ' ' || FROM "COMPOSITOR"."COMPOSTIOR"  
Adjuntos
Base de Prueba3.odb.zip
(20.47 KiB) Descargado 128 veces
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Mis disculpas RMG, después de mucho probar he conseguido al menos modificar la consulta ConcatCompositor con la siguiente expresión:

Código: Seleccionar todo

SELECT "IdAutor", "ApeAutor", "NomAutor", CONCAT( "ApeAutor", "NomAutor" ), CONCAT( "ApeAutor", ' ' ) + CONCAT( "NomAutor", ' ' ) FROM "COMPOSITOR" "COMPOSTIOR"
Y he conseguido (Poniendo esta consulta en "Modo Vista" para crear la tabla "TablConcatCompositor, que es de la que realmente dependía el campo Compositor del Formulario Ficha de discos que funcione.
Ruego, pues disculpas por ello. Lo que si que no consigo es lo del Informe.
Acompaña la Base de Pruebas modificada.
Un abrazo
Adjuntos
Base de Prueba3.odb.zip
(20.82 KiB) Descargado 183 veces
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Consulta en Base que en la respuesta omite registros

Mensaje por RMG »

Hola,

Mira si esta solución te sirve. Con tu consulta total que es muy compleja para trabajar con ella he creado una vista y con esta vista que equivale a una tabla ya se puede hacer todos los encadenados que quieras y más cosas sin tener que hacer referencia a los nombres de las distintas tablas.

He creado una vista total, una consulta informe y un informe con el campo nuevo AUTOR, no se si es lo que quieres pero te puede ayudar a ver otra forma de trabajar.

Saludos
Adjuntos
Base de Prueba4.zip
(24.26 KiB) Descargado 123 veces
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Este es un nuevo modo de ver las cosas, crear una tabla en modo vista "VistaTotal", ha sido un gran paso, he trabajado en el "Informe" con este nuevo criterio consiguiendo un gran avance, y adjunto vuelvo a mandar la BASE para que observes el logro alcanzado. Únicamente me gustaría depurar el campo "Orquesta y director" donde he concatenado la información del nombre de la orquesta con el del director, de forma que ambos queden separados por una como en lugar de un espacio, sin que desaparezcan registros cuando hay campos vacíos de información (Que el registro tenga orquesta sin director, etc.). Lo he intentado hasta el agotamiento pero sin éxito,¿es posible lograrlo?

Muy agradecido por vuestra colaboración,
Abrazos y toda suerte de dichas para estos días.
Adjuntos
Base de Prueba4 copia.odb.zip
(25.71 KiB) Descargado 152 veces
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Consulta en Base que en la respuesta omite registros

Mensaje por RMG »

Hola,

Prueba con esto.

CASE WHEN "ORQUESTA" IS NULL THEN CONCAT( "ORQUESTA", ' ' ) ELSE CONCAT( "ORQUESTA", ', ' ) END + CONCAT( "NOM_DIRECTOR", ' ' ) + CONCAT( "APE_DIRECTOR", ' ' )

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Fermarin
Mensajes: 43
Registrado: Vie Dic 09, 2016 12:01 pm

Re: Consulta en Base que en la respuesta omite registros

Mensaje por Fermarin »

Hola,

RMG, probado y depurado, funciona muy bien.

Voy ahora a seguir trabajando con el formulario de introducción de datos "Ficha de disco", colocando un sub-formulario para incorporar a los solista de cada obra con sus instrumentos.

Muchas gracias,
saludos.
LibreOffice v. 5.2.4.2 con macOS Sierra 10.12.2
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Consulta en Base que en la respuesta omite registros

Mensaje por mauricio »

Por favor, si esto responde tu pregunta, edita el primer mensaje de este hilo y agrega al principio del título la etiqueta [RESUELTO], adicionalmente puedes marcar el icono de la tilde verde, de esta forma conseguiremos un foro más ordenado.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder