[Risolto] Filtraggio da 3 caselle riepilogo.

Discussioni sulle caratteristiche di database
Rispondi
leoforum2
Messaggi: 72
Iscritto il: sabato 14 marzo 2020, 22:35

[Risolto] Filtraggio da 3 caselle riepilogo.

Messaggio da leoforum2 »

Carissimi del Forum,
torno a chiedere aiuto per la realizzazione del mio database iscritti.
Questa volta per effettuare delle ricerche tra gli iscritti sto cercando di adattare un filtraggio con testo proveniente da più variabili provenienti da caselle riepilogo.
Mi sono basato da un esempio presente nel forum, in particolare un database senza macro il cui file ha questo nome: "Filtraggio con ListBox.odb".
Adattando al mio database, attraverso 3 menù a discesa, inseriti nel formulario "Formulario ricerca", e dalla loro combinazione si dovrebbe visualizzare l'elenco degli iscritti, proveniente dalla tabella "iscritti", filtrata.

I problemi che trovo e non riesco a risolvere sono di diversa natura, il primo:

1) per una casella compare un messaggio di errore che non riesco a capire come eliminare.


2) Poi l'altro problema è legato al fatto che la tabella principale "iscritti" contiene sia caselle testo (non ho problemi con queste) sia caselle contenenti valori
interi (integer) che sono collegati a tabelle separate, ad esempio: "Qualifica", "Scuole Servizio", ecc.
Per queste caselle nelle colonne del form riesco a far visualizzare il testo collegato alla rispettiva tabella, ma nei menù a tendina ("Qualifica" e "Scuola Servizio") mi compaiono solo i valori (numeri) collegati alla tabella corrispettiva. Infatti nelle proprietà della casella riepilogo mi trovo solo il codice sql nativo. Dovrei aggiungere del codice forse?

3) ho notato che nei menù a tendina dovrebbe apparire (nell'esempio originale da dove sto copiando è presente) oltre ai valori di scelta compare anche <tutti> che mi dovrebbe allargare la ricerca a tutti i campi. Io non riesco a farlo apparire.
Oltre al mio esempio allego pure il file di esempio e spero che qualcuno possa aiutarmi.

Grazie.
Allegati
Filtraggio con ListBox.odb
Esempio trovato sul forum
(23.05 KiB) Scaricato 145 volte
master_iscritti_13.odb
File personale su cui lavoro
(97.62 KiB) Scaricato 147 volte
Ultima modifica di leoforum2 il mercoledì 29 aprile 2020, 21:59, modificato 1 volta in totale.
OpenOffice 2.4 Ubuntu
LibreOffice ver. 5 Linux Mint LMDE 3 Cindy
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: filtraggio da 3 caselle riepilogo.

Messaggio da charlie »

Ciao, i campi della tabella usata come filtro e di quella in cui i dati devono essere cercati devono essere dello stesso tipo.
Nel file di esempio, tutti i campi sono di tipo Testo.
Nel tuo database i campi della tabella 'Filtro_multiplo' sono di tipo Testo.
Quelli della tabella 'iscritti' sono 1 ti tipo Testo e 2 di tipo Integer.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
leoforum2
Messaggi: 72
Iscritto il: sabato 14 marzo 2020, 22:35

Re: filtraggio da 3 caselle riepilogo.

Messaggio da leoforum2 »

Probabilmente dico una banalità, ma visto che non posso modificare i campi della tabella "iscritti" perchè mi sballerebbe tutto il database, visto i campi sono di tipologie diverse posso creare filtri diversi o ci deve essere un solo filtro?
OpenOffice 2.4 Ubuntu
LibreOffice ver. 5 Linux Mint LMDE 3 Cindy
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: filtraggio da 3 caselle riepilogo.

Messaggio da charlie »

Prova a cambiare 2 campi della tabella 'Filtro_multiplo' in Integer, in maniera da creare corrispondenza fra le 2 tabelle.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
leoforum2
Messaggi: 72
Iscritto il: sabato 14 marzo 2020, 22:35

Re: filtraggio da 3 caselle riepilogo.

Messaggio da leoforum2 »

Ho provato a modificare i 2 campi cambiando tipologia da testo a integer ma niente tutto rimane come prima, compreso il messaggio di errore.
Allegati
Schermata del 2020-04-25 18-54-18.png
OpenOffice 2.4 Ubuntu
LibreOffice ver. 5 Linux Mint LMDE 3 Cindy
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: filtraggio da 3 caselle riepilogo.

Messaggio da charlie »

Li leggi i messaggi? Parla di TUTTI, hai copiato bene la tabella omonima?
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
leoforum2
Messaggi: 72
Iscritto il: sabato 14 marzo 2020, 22:35

Re: filtraggio da 3 caselle riepilogo.

Messaggio da leoforum2 »

Quando ho personalizzato la tabella "Tutti" ho cambiato il campo "ID" in "ID_iscritto" pensando che dovesse essere uguale al nome della casella con la chiave primaria della tabella "iscritti". Ho provato a lasciarla come quella dell 'esempio ma non funziona.
Poi altra differenza che vedo è la lunghezza del campo "nome". Da 20 a 100. Ho modificato a 100, ma nulla mi è cambiato.
Non riesco a trovare altro. :crazy:
OpenOffice 2.4 Ubuntu
LibreOffice ver. 5 Linux Mint LMDE 3 Cindy
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: filtraggio da 3 caselle riepilogo.

Messaggio da charlie »

Allega il file modificato, grazie.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: filtraggio da 3 caselle riepilogo.

Messaggio da charlie »

Ho dato un'occhiata più attenta.
Se ti ispiri all'esempio che hai trovato sul forum devi necessariamente lavorare con tutti i campi interessati in formato Testo (sia nella tabella del filtro multiplo che in quella degli iscritti).

Inoltre devi essere più attento a come scrivi il codice. Qui mancano delle virgolette in 2 posti:

Codice: Seleziona tutto

SELECT DISTINCT "Qualifica", "Qualifica" FROM "iscritti" UNION SELECT "Nome", ID_iscritto" FROM "Tutti
invece di

Codice: Seleziona tutto

SELECT DISTINCT "Qualifica", "Qualifica" FROM "iscritti" UNION SELECT "Nome", "ID_iscritto" FROM "Tutti"
Il messaggio di errore riguardante TUTTI deriva da quello.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
leoforum2
Messaggi: 72
Iscritto il: sabato 14 marzo 2020, 22:35

Re: filtraggio da 3 caselle riepilogo.

Messaggio da leoforum2 »

Ho controllato il codice e riuscito ad aggiungere le virgolette mancanti. Per un misterioso motivo (misterioso per me) non mi aggiungeva le virgolette (rimanevano nere anzichè di colore giallo). Comunque adesso ci sono riuscito e non c'è più il messaggio.
Allego il file finale.
Come dici tu quel codice per quel filtro che ho adattato non va bene. Che mi suggerisci. Mi serviva questo sistema a variabili perchè avrei voluto aggiungere altri campi utili per filtrare la tabella "iscritti". Per me l'alternativa e scrivere tante singole ricerche (per nome, per qualifica, per scuola, ecc.), collegarle ad un tasto macro e riunirle in una pagina delle ricerche. In quel modo sarebbe stato comodissimo e più razionale.
Allegati
master_iscritti_14.odb
(97.71 KiB) Scaricato 146 volte
OpenOffice 2.4 Ubuntu
LibreOffice ver. 5 Linux Mint LMDE 3 Cindy
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: filtraggio da 3 caselle riepilogo.

Messaggio da charlie »

Ecco una edizione "ridotta" del tuo database.
Per farlo funzionare:
  • Ho creato una query per avere dei campi testo dove sono numerici nella tabella (ho tolto per semplificare i campi in più)
  • Ho creato una vista sulla query (non sono sicuro che sia indispensabile, se vuoi puoi provare a lavorare direttamente con la query)
Allegati
Master_Iscritti_semplificato.odb
(29.83 KiB) Scaricato 147 volte
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
leoforum2
Messaggi: 72
Iscritto il: sabato 14 marzo 2020, 22:35

Re: Filtraggio da 3 caselle riepilogo.

Messaggio da leoforum2 »

Ciao caro Charlie,
ti ringrazio per la tua generosità.
Ti vorrei chiedere qualcosa sulla "vista1" che hai realizzato.
Se capisco bene questa vista e come se fosse una tabella provvisoria che ricava i valori dei suoi campi da una ricerca ("ricerca1).
In questo modo nel formulario si supera il problema delle differenza delle tipologie dei campi (testo o integer).
Spero di avere capito bene, così in futuro possa usare questo metodo per altre soluzioni.
Quello che però mi sembra più complicato da capire è la logica della tabella/form che hai usato nel formulario "Formulario ricerca" con i suoi criteri (sql).
Mi sembra come se tu avessi ipotizzato tutte le probabili combinazioni che si possano verificare. Se volessi inserire un altra variabile di ricerca dovrei aggiungere le varie combinazioni?
Mi dai un aiutino? :o
OpenOffice 2.4 Ubuntu
LibreOffice ver. 5 Linux Mint LMDE 3 Cindy
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Filtraggio da 3 caselle riepilogo.

Messaggio da charlie »

Sì a tutte le tue domande.

Per aggiungere un nuovo campo di ricerca, bisogna farlo nella tabella usata come filtro e nella tabella/vista in cui si cerca.
Il codice da usare sembra piuttosto complesso ma in realtà diventa tale solo dopo averlo aperto con la procedura grafica, non ti so dire perché.
Il codice da cui sono partito è questo:

Codice: Seleziona tutto

SELECT * FROM "Vista1" WHERE ( "Qualifica" = :Lu OR :Lu IS NULL ) AND ( "Scuola" = :La OR :La IS NULL ) AND ( "Iscrizione" = :Sp OR :Sp IS NULL )
Se ora controlli è diventato:

Codice: Seleziona tutto

SELECT * FROM "Vista1" WHERE ( "Iscrizione" = :Sp AND "Qualifica" = :Lu AND "Scuola" = :La OR "Iscrizione" = :Sp AND "Qualifica" = :Lu AND :La IS NULL OR "Qualifica" = :Lu AND "Scuola" = :La AND :Sp IS NULL OR "Qualifica" = :Lu AND :La IS NULL AND :Sp IS NULL OR "Iscrizione" = :Sp AND "Scuola" = :La AND :Lu IS NULL OR "Iscrizione" = :Sp AND :La IS NULL AND :Lu IS NULL OR "Scuola" = :La AND :Sp IS NULL AND :Lu IS NULL OR :La IS NULL AND :Sp IS NULL AND :Lu IS NULL )
Quindi per aggiungere un nuovo campo si dovrebbe scrivere:

Codice: Seleziona tutto

SELECT * FROM "Vista1" WHERE ( "Qualifica" = :Lu OR :Lu IS NULL ) AND ( "Scuola" = :La OR :La IS NULL ) AND ( "iscrizione" = :Sp OR :Sp IS NULL ) AND ("NuovoCampo" = :Xy OR :Xy IS NULL)
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
leoforum2
Messaggi: 72
Iscritto il: sabato 14 marzo 2020, 22:35

Re: Filtraggio da 3 caselle riepilogo.

Messaggio da leoforum2 »

Perfetto :D
sono riuscito ad inserire un altro parametro di ricerca grazie ai tuoi consigli.
Hai una birra offerta da me :super:
OpenOffice 2.4 Ubuntu
LibreOffice ver. 5 Linux Mint LMDE 3 Cindy
Rispondi