[Risolto] Filtro su sottoformulari basati su ricerche

Discussioni sulle caratteristiche di database
Rispondi
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

[Risolto] Filtro su sottoformulari basati su ricerche

Messaggio da unlucky83 »

Salve, sto preparando un db basato su un'unica tabella ("Tb_Conti"). Ho preparato varie ricerche su questa tabella e mi piacerebbe visualizzare alcune di esse in un unico formulario con la possibilità di effettuare un filtro simultaneo.
Riferendomi all'allegato, mi piacerebbe modificare il formulario chiamato "Ricerche":
Schermata del 2018-01-18 00-12-16.png
1) aggiungendo tre caselle di riepilogo collegate per i campi "ANNO" "MESE" "Chiave", una cosa tipo l'allegato di @charlie
2) filtrare la centrale in base al campo "Anno" selezionato nella griglia di sinistra e filtrare la griglia di destra in base al record selezionato nella griglia centrale pescando i campi "Anno" "Mese".
Delle 2, la prima è l'opzione migliore, alla seconda opzione ho iniziato a pensarci solo perchè sto inchiodato.
Ho provato con la struttura nidificata:
-Formulario per le caselle di riepilogo
---Formulario1
---Formulario2
---Formulario3
ma ottengo solo errori sql :(
Ho provato anche a basare i formulari su ricerche con parametro, ma non riesco a passare il parametro senza che si apra una finestra di dialogo.
Qualche suggerimento?
Allegati
Conti.odb
(102.71 KiB) Scaricato 103 volte
Ultima modifica di unlucky83 il lunedì 22 gennaio 2018, 11:34, modificato 1 volta in totale.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Filtro su sottoformulari basati su ricerche

Messaggio da charlie »

Ciao, nel file allegato trovi una possibile soluzione sviluppata per ... 1/3, la completi tu? ;)
  • aggiunta della tabella Filtro
  • aggiunta della vista query Vista1
  • aggiunta del formulario Filtro
Attendo le domande ;)
Allegati
Conti_2.odb
(111.59 KiB) Scaricato 112 volte
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggio da unlucky83 »

Grazie mille Charlie
Ho visto il file da te allegato e intanto ho da chiederti a cosa serve la "vista" di una query. Svincola dalla tabella principale consentendo di fare il filtro su una funzione di aggregazione?
Prendendo spunto dalla discussione che avevo menzionato nel messaggio iniziale, sono riuscito a fare ciò che desideravo (lavorandoci fino a tarda notte e questa mattina). Guardando il nuovo db che allego:
-Ho creato tabella "Filtro1" con i campi corrispondenti ai filtri che voglio applicare
-ho creato un formulario basato su tabella "Filtro1", dal nome "Filtro1"
-Ho copiato il su citato formulario nel formulario "Ricerca1" come primo livello
-Ho passato gli altri tre formulari da filtrare nel livello 2. Questi formulari si basano su 3 ricerche distinte, in sostanza le stesse del mio primo allegato, con l'aggiunta della tabella Filtro1 (...FROM "Filtro1" "Tab_Conti")
-alla voce filtro dei vari formulari ho messo la formule:
1)( YEAR( "Data_imm" ) = "Filtro1"."Anno")
2)( YEAR( "Data_imm" ) = "Filtro1"."Anno" AND MONTH( "Data_imm" ) = "Filtro1"."Mese")
3)( YEAR( "Data_imm" ) = "Filtro1"."Anno" AND MONTH( "Data_imm" ) = "Filtro1"."Mese" AND "Tb_Conti"."Chiave" = "Filtro1"."Chiave")
-ho tolto tutti i "Collega a..." "Collega per..."

Così sembra che funziona. In sostanza mi dava problemi la condizione WHERE insieme alla funzione SUM, ora prima fa il calcolo e poi applica il filtro.
Che ne pensi?
Allegati
Conti (x_Forum).odb
(36.55 KiB) Scaricato 98 volte
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Filtro su sottoformulari basati su ricerche

Messaggio da charlie »

unlucky83 ha scritto:Ho visto il file da te allegato e intanto ho da chiederti a cosa serve la "vista" di una query. Svincola dalla tabella principale consentendo di fare il filtro su una funzione di aggregazione?
Sì, collegando direttamente la query, si ottiene un messaggio di errore.
unlucky83 ha scritto:Che ne pensi?
Mi pare ci sia almeno un problema: il pulsante di aggiornamento fa parte del form principale, perciò ti viene chiesta la conferma (passaggio in più).
Spostandolo alle dipendenze di un subForm, aggiorna solo quello. Ma non se ne possono mettere 3 :shock: .
Una macro al posto del pulsante risolverebbe tutto, ma perché 3 subForm, visto che potresti fare con uno solo?
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggio da unlucky83 »

Mi ero completamente dimenticato dell'esistenza delle "viste"...grazie!!! Le adopererò sicuramente.

I subform mi servono per poter adoperare un solo pulsante, infatti aggiornando il form principale, si modifica il primo record della tabella di FIltro1 e si autoaggiornano i tre formulari filtrati senza bisogno di altri pulsanti.
Per ridurre il numero dei pulsanti da 1 a 0 ci sono solo le macro giusto? E' un db che devo preparare ad un amico e meno macro impiego e meglio è.

Quando dici che potrei fare con uno solo form, intendi che potrei adoperare un solo subform contenente le tre griglie? Al momento le tre griglie si popolano con tre query distinte (anche se simili) e filtrate da tre istruzioni diverse (anche se simili). Posso provare a metterle tutte in un subform..più è lineare e semplice e meglio è...una volta che lo finisco vorrei capirci qualcosa semmai dovessi riprenderlo per delle modifiche. :D
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggio da unlucky83 »

Eccomi qua con una nuova versione (contenente alcune macro) e una domanda sul filtro.
Nel formulario "FIltri1" adotto la ricerca chiamata "Filtro_ALL_TB"

Codice: Seleziona tutto

SELECT "ID", "Data_imm", "Chiave", "Data_evento", "Somma", "Genere", "Numero F/R", "Cliente", "Indirizzo", "Descrizione" FROM "Tb_Conti", "Filtro1" WHERE 
YEAR( "Data_imm" ) = CASE WHEN NOT "Filtro1"."Anno" IS NULL THEN "Filtro1"."Anno" ELSE YEAR( "Data_imm" ) END AND 
MONTH( "Data_imm" ) = CASE WHEN NOT "Filtro1"."Mese" IS NULL THEN "Filtro1"."Mese" ELSE MONTH( "Data_imm" ) END AND 
"Tb_Conti"."Chiave" = CASE WHEN NOT "Filtro1"."Chiave" IS NULL THEN "Filtro1"."Chiave" ELSE "Tb_Conti"."Chiave" END AND 
"Tb_Conti"."Cliente" = CASE WHEN NOT "Filtro1"."Cliente" IS NULL THEN "Filtro1"."Cliente" ELSE "Tb_Conti"."Cliente" END AND 
"Tb_Conti"."Indirizzo" = CASE WHEN NOT "Filtro1"."Indirizzo" IS NULL THEN "Filtro1"."Indirizzo" ELSE "Tb_Conti"."Indirizzo" END 
ORDER BY "Tb_Conti"."Data_imm" DESC, "Tb_Conti"."Chiave" DESC
Tale filtro dovrebbe lavorare solo quando si inserisce qualcosa da cercare, altrimenti dovrebbe fornire tutti i campi.
Ho provato ad impiegare un'espressione regolare per le istruzioni all'interno dell'ELSE, ma sbaglio a scrivere un comando valido, quindi ho impostato il valore della tabella TB_Conti. Diciamo che:

Codice: Seleziona tutto

SE "Filtro1"."Cliente" NON E' NULLO
ALLORA
"Tb_Conti"."Cliente" ="Filtro1"."Cliente"
ALTRIMENTI
"Tb_Conti"."Cliente" ="Tb_Conti"."Cliente"
FINE

Questa soluzione funziona bene per 3 campi su 5, ovvero 'YEAR( "Data_imm" ) ' 'MONTH( "Data_imm" )' e ' "Tb_Conti"."Chiave" ' perché sono campi a riempimento obbligato quindi non sono mai nulli. Gli altri due campi ( ' "Tb_Conti"."Cliente" ' e ' "Tb_Conti"."Indirizzo" '), invece possono presentare campi nulli essendo facoltativi. Ora io vorrei che se Filtro1.Cliente è nullo, la ricerca mi restituisca comunque tutti i record di "Tb_Conti", stessa cosa per Filtro1.Indirizzo.

Non sò se sono stato sufficientemente chiaro, spero di si. Idee?
Allegati
Conti.odb
(69.32 KiB) Scaricato 110 volte
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Filtro su sottoformulari basati su ricerche

Messaggio da charlie »

unlucky83 ha scritto:con una nuova versione (contenente alcune macro)
... è un terreno sul quale mi puoi insegnare qualcosa ...
unlucky83 ha scritto:Non sò se sono stato sufficientemente chiaro, spero di si
Temo di no, o non del tutto. Se lo scopo è quello di visualizzare tutti i dati per le opzioni non ancora inserite, mi sembra che la soluzione da me adottata nell'esempio che hai citato nel primo post sia più ... facile.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggio da unlucky83 »

charlie ha scritto: Temo di no, o non del tutto. Se lo scopo è quello di visualizzare tutti i dati per le opzioni non ancora inserite, mi sembra che la soluzione da me adottata nell'esempio che hai citato nel primo post sia più ... facile.
:bravo: Hai capito bene e grazie per il suggerimento. Ho trovato la risposta nel post lasciato da te (punto 9)
viewtopic.php?f=13&t=7171&p=37927&hilit ... 5f7#p37944
Ora questa query fa ciò che volevo:

Codice: Seleziona tutto

SELECT "ID", "Data_imm", "Chiave", "Data_evento", "Somma", "Genere", "Numero F/R", "Cliente", "Indirizzo", "Descrizione" FROM "Tb_Conti", "Filtro1" WHERE 
(YEAR( "Data_imm" ) = "Filtro1"."Anno" OR "Filtro1"."Anno" IS NULL) AND 
(MONTH( "Data_imm" ) = "Filtro1"."Mese" OR "Filtro1"."Mese" IS NULL) AND 
("Tb_Conti"."Chiave" = "Filtro1"."Chiave" OR "Filtro1"."Chiave" IS NULL) AND 
("Tb_Conti"."Cliente" = "Filtro1"."Cliente" OR "Filtro1"."Cliente" IS NULL) AND 
("Tb_Conti"."Indirizzo" = "Filtro1"."Indirizzo" OR "Filtro1"."Indirizzo" IS NULL) 
ORDER BY "Tb_Conti"."Data_imm" DESC, "Tb_Conti"."Chiave" DESC
Mi ero ostinato a far funzionare la scrittura con il "CASE WHEN" e non ho pensato a sfogliare più in basso la discussione da cui ho preso le prime informazioni :crazy:
Grazie mille :super:
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggio da unlucky83 »

Ho modificato la query così:

Codice: Seleziona tutto

SELECT "ID", "Data_imm", "Chiave", "Data_evento", "Somma", "Genere", "Numero F/R", "Cliente", "Indirizzo", "Descrizione" FROM "Tb_Conti", "Filtro1" WHERE 
( YEAR( "Data_imm" ) = "Filtro1"."Anno" OR "Filtro1"."Anno" IS NULL ) AND 
( MONTH( "Data_imm" ) = "Filtro1"."Mese" OR "Filtro1"."Mese" IS NULL ) AND 
( "Tb_Conti"."Chiave" = "Filtro1"."Chiave" OR "Filtro1"."Chiave" IS NULL ) AND 
( UPPER ("Tb_Conti"."Cliente") LIKE UPPER ('%' || "Filtro1"."Cliente" || '%') OR "Filtro1"."Cliente" IS NULL ) AND 
( UPPER ("Tb_Conti"."Indirizzo") LIKE UPPER ('%' || "Filtro1"."Indirizzo"  || '%') OR "Filtro1"."Indirizzo" IS NULL ) ORDER BY "Tb_Conti"."Data_imm" DESC, "Tb_Conti"."Chiave" DESC
Questo perchè ho messo caselle combinate per la ricerca di Clienti e Indirizzi, ora mi filtra i record che presentano le sottostringhe da cercare in Clienti e Indirizzo, ignorando le maiuscole e le minuscole.
Metto Risolto alla discussione :super:
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggio da unlucky83 »

charlie ha scritto:
unlucky83 ha scritto:con una nuova versione (contenente alcune macro)
... è un terreno sul quale mi puoi insegnare qualcosa ...
Ovviamente non ho resistito ad aggiungere macro particolari al file odb. Se ti serve qualcosa, chiedi pure, mi piacciono le sfide con le macro. Al momento per esempio ho creato una macro collegata ad un pulsante, che mi apre direttamente una ricerca senza bisogno di incorporarla in un formulario, con la visuale standard delle ricerche di Base insomma. Inoltre ho fatto si che me la apre impostando un formato personalizzato su alcuni campi.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Rispondi