Pannello di Controllo Moderatore ]

[Risolto] Filtro su sottoformulari basati su ricerche

Discussioni sulle caratteristiche di database

[Risolto] Filtro su sottoformulari basati su ricerche

Messaggioda unlucky83 » giovedì 18 gennaio 2018, 1:37

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 23 volte
Ultima modifica di unlucky83 il lunedì 22 gennaio 2018, 12:34, modificato 1 volta in totale.
LibO5.1.6.2-Ubuntu 16.04.2 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio
Avatar utente
unlucky83
Volontario
Volontario
 
Messaggi: 1902
Iscritto il: lunedì 7 gennaio 2013, 2:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggioda charlie » giovedì 18 gennaio 2018, 11:51

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 27 volte
charlie
macOS 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5324
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: Filtro su sottoformulari basati su ricerche

Messaggioda unlucky83 » giovedì 18 gennaio 2018, 14:30

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 22 volte
LibO5.1.6.2-Ubuntu 16.04.2 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio
Avatar utente
unlucky83
Volontario
Volontario
 
Messaggi: 1902
Iscritto il: lunedì 7 gennaio 2013, 2:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggioda charlie » giovedì 18 gennaio 2018, 23:39

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 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5324
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: Filtro su sottoformulari basati su ricerche

Messaggioda unlucky83 » venerdì 19 gennaio 2018, 0:33

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
LibO5.1.6.2-Ubuntu 16.04.2 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio
Avatar utente
unlucky83
Volontario
Volontario
 
Messaggi: 1902
Iscritto il: lunedì 7 gennaio 2013, 2:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggioda unlucky83 » domenica 21 gennaio 2018, 17:52

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   Espandi visualeStringi visuale
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   Espandi visualeStringi visuale
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 23 volte
LibO5.1.6.2-Ubuntu 16.04.2 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio
Avatar utente
unlucky83
Volontario
Volontario
 
Messaggi: 1902
Iscritto il: lunedì 7 gennaio 2013, 2:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggioda charlie » domenica 21 gennaio 2018, 19:39

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 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5324
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: Filtro su sottoformulari basati su ricerche

Messaggioda unlucky83 » domenica 21 gennaio 2018, 20:17

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)
https://forum.openoffice.org/it/forum/viewtopic.php?f=13&t=7171&p=37927&hilit=formulario+collegato+a+campi&sid=24658844fa2f2a42b8c458b4eb3845f7#p37944
Ora questa query fa ciò che volevo:
Codice: Seleziona tutto   Espandi visualeStringi visuale
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:
LibO5.1.6.2-Ubuntu 16.04.2 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio
Avatar utente
unlucky83
Volontario
Volontario
 
Messaggi: 1902
Iscritto il: lunedì 7 gennaio 2013, 2:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggioda unlucky83 » lunedì 22 gennaio 2018, 12:33

Ho modificato la query così:
Codice: Seleziona tutto   Espandi visualeStringi visuale
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:
LibO5.1.6.2-Ubuntu 16.04.2 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio
Avatar utente
unlucky83
Volontario
Volontario
 
Messaggi: 1902
Iscritto il: lunedì 7 gennaio 2013, 2:23
Località: Latina

Re: Filtro su sottoformulari basati su ricerche

Messaggioda unlucky83 » mercoledì 24 gennaio 2018, 3:20

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.
LibO5.1.6.2-Ubuntu 16.04.2 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio
Avatar utente
unlucky83
Volontario
Volontario
 
Messaggi: 1902
Iscritto il: lunedì 7 gennaio 2013, 2:23
Località: Latina


Torna a Base

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti