[Risolto] Filtro su sottoformulari basati su ricerche
[Risolto] Filtro su sottoformulari basati su ricerche
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": 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?
Riferendomi all'allegato, mi piacerebbe modificare il formulario chiamato "Ricerche": 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
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
Re: Filtro su sottoformulari basati su ricerche
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
- 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
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Filtro su sottoformulari basati su ricerche
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?
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
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
Re: Filtro su sottoformulari basati su ricerche
Sì, collegando direttamente la query, si ottiene un messaggio di errore.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?
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ù).unlucky83 ha scritto:Che ne pensi?
Spostandolo alle dipendenze di un subForm, aggiorna solo quello. Ma non se ne possono mettere 3 .
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
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Filtro su sottoformulari basati su ricerche
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.
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.
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
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
Re: Filtro su sottoformulari basati su ricerche
Eccomi qua con una nuova versione (contenente alcune macro) e una domanda sul filtro.
Nel formulario "FIltri1" adotto la ricerca chiamata "Filtro_ALL_TB"
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:
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?
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
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
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
Re: Filtro su sottoformulari basati su ricerche
... è un terreno sul quale mi puoi insegnare qualcosa ...unlucky83 ha scritto:con una nuova versione (contenente alcune macro)
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.unlucky83 ha scritto:Non sò se sono stato sufficientemente chiaro, spero di si
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Filtro su sottoformulari basati su ricerche
Hai capito bene e grazie per il suggerimento. Ho trovato la risposta nel post lasciato da te (punto 9)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.
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
Grazie mille
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
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
Re: Filtro su sottoformulari basati su ricerche
Ho modificato la query così:
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
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
Metto Risolto alla discussione
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
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
Re: Filtro su sottoformulari basati su ricerche
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.charlie ha scritto:... è un terreno sul quale mi puoi insegnare qualcosa ...unlucky83 ha scritto:con una nuova versione (contenente alcune macro)
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
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