Pagina 1 di 1

Filtro ricerche da casella di testo o casella di riepilogo

Inviato: venerdì 26 agosto 2011, 17:11
da UTPiovene
Dovrei impostare il filtro di una ricerca utilizzato in altre ricerche per generare delle stampe.
Al momento dovrei modificare la ricerca a mano per poi passare alla stampa dei dati estratti da altre 2 ricerche che si basano su questa.
Il problema è che la procedura per l'inserimento dei dati e le stampe viene utilizzata anche da colleghi che non hanno molta pratica.
Pertanto pensavo di utilizzare una macro che apra la ricerca, imposti il filtro da una casella di testo (meglio ancora una casella di riepilogo), chiuda la ricerca.
A questo punto anche i dati delle altre 2 ricerche risultano filtrati e li posso passare al modulo della stampa.
Qual'è il problema: non ci capisco niente di macro.
Qualcuno più esperto mi può aiutare?

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: sabato 27 agosto 2011, 11:19
da marcofoc
Ciao!
Come "filtri" i dati dalle prime de ricerche?
In teoria, se imposti una ricerca su una ricerca madre che abbia già un criterio di filtrazione, se lo porta avanti e te lo chiede quanto richiami la ricerca figlia:

esempio
ricerca_madre

Codice: Seleziona tutto

SELECT colonna1 FROM tabella WHERE colonna1 = :"filtro la madre con"
ricerca_figlia

Codice: Seleziona tutto

SELECT colonna1 FROM ricerca_madre WHERE colonna1 = :"filtro ancora la figlia"
ora qui la ricerca non ha un senso, ma è epr farti capire che quando chiami la figlia, ti chiederà prima il filtro della madre e poi il filtro della figlia.

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: lunedì 29 agosto 2011, 8:51
da UTPiovene
E' proprio questo il punto.
Io vorrei creare un form dove l'utente possa inserire, o meglio ancora scegliare da casella di riepilogo, la pratica da stampare.
Il dato del form dovrebbe quindi essere passato alla ricerca per filtrare i dati.
Il risultato dovrebbe essere una cosa simile:

Codice: Seleziona tutto

SELECT "IDAUT" FROM "AUTORIZZAZIONI" WHERE "IDAUT" = 6
dove, ovviamente, 6 è il dato che l'utente ha specificato.
In pratica la macro mi dovrebbe creare una ricerca con il codice sql cambiando il 6 con il dato indicato.

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: lunedì 29 agosto 2011, 19:17
da marcofoc
Per favore, prova ad essere un po' più preciso.
Metti i nomi delle tabelle e i nomi delle colonne.

Fammi capire cosa vuoi fare.

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: martedì 30 agosto 2011, 9:11
da UTPiovene
Il database serve per registrare e stampare le autorizzazioni per il transito silvo-pastorale (tralascio le spiegazioni relative al silvo-pastorale).
La tabella da filtrare è una sola: autorizzazioni e contiene tutti i dati dei richiedenti e altri relativi all'autorizzazione. L'autorizzazione è numerata univocamente con IDAUT
La ricerca dovrebbe filtrare questa tabella secondo un IDAUT che indica l'utente (Q_SCEGLI_IDAUT).
Ogni autorizzazione può avere collegati più veicoli che sono specificati nella tabella VEICOLI.
Se imposto una query che faccia riferimento sia alla tabella AUTORIZZAZIONI sia la tabella VEICOLI mi ripete i dati dell'autorizzazione tante volte quanti sono i veicoli.
Quello che pensavo di fare io è questo:
Filtro i dati della tabella autorizzazioni isolando IDAUT con la ricerca Q_SCEGLI_IDAUT
Immagine

Imposto una ricerca (Q_STAMPA_SCELTA) che collega la tabella AUTORIZZAZIONI con la ricerca Q_SCEGLI_IDAUT in modo che i dati vengono filtrati secondo l'unico valore presente in Q_SCEGLI_IDAUT
Immagine

Imposto una ricerca (Q_SCEGLI_VEICOLI) che collega la tabella VEICOLI con la ricerca Q_SCEGLI_IDAUT in modo che i dati vengono filtrati secondo l'unico valore presente in Q_SCEGLI_IDAUT
Immagine

I dati filtrati di Q_STAMPA_SCELTA e Q_SCEGLI_VEICOLI vengono passati ad un modello di testo Writer per la composizione della stampa.

Al momento è necessario aprire in modifica manuale la ricerca Q_SCEGLI_IDAUT per inserire il valore di IDAUT da filtrare.
Questo comporta che l'utente prima deve cercare nella tabella AUTORIZZAZIONI, fra le autorizzazioni registrate, quella che interessa per riportare il relativo IDAUT nella ricerca.
Io vorrei impostare un formulario con casella di riepilogo che riassuma i dati della tabella AUTORIZZAZIONI e che il dato presente nella casella venga utilizzato per filtrare i dati nella ricerca Q_SCEGLI_IDAUT. Per fare questo credo sia necessaria una macro ... che non so fare.

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: martedì 30 agosto 2011, 10:35
da marcofoc
Io risolverei la situazione purtroppo rinunciando alla casella di riepilogo.
L'utente deve chiamare la ricerca con già in testà l'idaut..

Creerei prima la ricerca:
Q_SCEGLI_IDAUT

Codice: Seleziona tutto

SELECT IDAUT FROM AUTORIZZAZIONE WHERE IDAUT = :idaut
e poi le varie altre ricerche, come ad esempio quella dei veicoli:
Q_SCEGLI_VEICOLI

Codice: Seleziona tutto

SELECT IDMEZZO FROM VEICOLI WHERE IDAUT = Q_SCEGLI_IDAUT.IDAUT
PS: quel mettere i nomi alle tabelle e colonne in maiuscolo non mi piace per niente.. ti potrebbe dare problemi in futuro. Se le ricerche che ti ho suggerito non dovessero funzionare, riscrivile fra apici. Per esempio

Codice: Seleziona tutto

SELECT "IDMEZZO" FROM "VEICOLI" WHERE "IDAUT" = "Q_SCEGLI_IDAUT"."IDAUT"

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: martedì 30 agosto 2011, 10:51
da UTPiovene
In questo modo però (è il primo metodo che ho usato) devo inserire IDAUT quando apro la ricerca per le autorizzazione e anche quando apro quella dei veicoli.
Così facendo la ricerca Q_SCEGLI_IDAUT è inutile. Basta mettere :IDAUT come criterio per il filtro nelle altre due ricerche: il risultato è lo stesso e ho una ricerca in meno.
Avere la ricerca Q_SCEGLI_IDAUT mi serve proprio per inserire il numero di autorizzazione una sola volta e avere automaticamente i dati delle altre due ricerche filtrati.
Se vogliamo farlo inserire a mano metto un campo di testo nel modulo invece della casella di riepilogo, ma la macro che mi genera il codice SQL mi serve comunque.

Perchè non vanno bene i nomi in maiuscolo? Che problemi potrebbero generare?

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: martedì 30 agosto 2011, 11:23
da marcofoc
Si è vero, la ricerca risulta doppia e inutile. Mi interessava fosse chiaro il metodo della richiesta del filtro che viene proposta anche se lo metti a monte di altre ricerche (a me risulta molto comodo).

I nomi in maiuscolo:
io uso Ooo per collegarmi ad un database PostgreSQL. Non cambia niente.
Mi sono accorto però che le etichette in maiuscolo vengono trattate in come se fossero "non consone". Quando creo le ricerche, vengono messe in automatico fra apici anzichè essere lasciate libere come quelle in minuscolo.
Se un domani volessi interfacciarti al tuo database con un altro linguaggio e crearti un'applicazione, ste etichette "non consone" ti incasineranno parecchio la programmazione. Perchè nel codice inserirai i token in SQL fra apici. Quindi immagina codice scritto fra apici con dentro codice scritto fra apici... un casino.
Io poi a suo tempo addirittura ho creato tabelle con nomi tipo "Unità di misura".
Non ti dico... maiuscole+minuscole+spazi+accenti .... ..... da prendersi a martellate sui....

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: martedì 30 agosto 2011, 11:59
da UTPiovene
Dici che questa macro potrebbe funzionare?

Codice: Seleziona tutto

Sub Filtra(oEv as object)
   dim oForm as object
   dim oControl as object
   dim CbxValue as string
   oForm = oEv.source.model.parent
   oControl = oForm.GetByName("NomeCasella")
   CbxValue = oControl.CurrentValue
   oForm.Filter = "( ""Tabella"".""CampoDaFiltrare"" LIKE '%" & CbxValue & "%' )"
   oForm.Reload()
End sub
al posto di oForm.Reload() però penso che si dovrebbe mettere un'istruzione che filtra la ricerca e non il form
il problema però resta sempre lo stesso ... di macro non ne capisco una mazza

Problema maiuscole: è preferibile quindi scrivere tutto in minuscolo? da altri 3D avevo capito il contrario.

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: martedì 30 agosto 2011, 15:16
da vladko
crea una vista e poi ricerca
da li fai quello che vuoi

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: mercoledì 31 agosto 2011, 10:45
da UTPiovene
crea una vista e poi ricerca
Ho provato, ma non capisco come.
La vista non mi permette di filtrare i dati, almeno non nel modo che lo fa una ricerca.
Io dovrei isolare un solo dato dalla tabella AUTORIZZAZIONI per poi usarlo in altre ricerche come filtro.
Come posso fare questo da una vista?

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: giovedì 1 settembre 2011, 21:35
da marcofoc
Perdonatemi... ma per voi che differenza c'è fra una vista e una ricerca?

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: mercoledì 7 settembre 2011, 16:13
da UTPiovene
In linea di massima credo ben poche. Dovrebbe essere vista come una tabella e non come una query ... almeno per quel poco che ho capito.
Però la vista non mi permette di filtrare i dati con "?" sui criteri.

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: giovedì 8 settembre 2011, 10:54
da marcofoc
Ma tu usi Base per collegarti ad un altro database o usi Base con il suo motore interno?
Mi incuriosisce il tuo usare il termine "vista"...
secondo me intendi quelle che sono delle ricerche create sul lato server. Allora si che concordo sul fatto che non ti permettono di passare parametri per filtrare.
E' vero. Per quello devi crearti una vista (o una ricerca), in locale. Sul lato client.

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: lunedì 12 settembre 2011, 10:59
da UTPiovene
Base io lu uso con HSQL standalone perchè la base di dati è sul server ed in modalità standalone va tutto in malora.
Credo che si possa intendere come dici tu. alla fine, poichè i dati sono "esterni".

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: martedì 13 settembre 2011, 10:06
da vladko
@marcofoc
per i db una vista è una tabella con dati fissi provenienti dal join di più tabelle; usato per calcoli e altro dove serve avere dati pronti
hsqldb standalone crea una tabella nel db, (in genere se non specificato è di quello che si parla).
come vedere: in strumenti sql

Codice: Seleziona tutto

script 'nomefilechevuoi'
@UTPiovene
Nel tuo problema ci sono cose che non capisco e ora provo a spiegare ma farò anch'io un pò a fatica.

problema:
c'è delle strade dove i veicoli possono passare solo con autorizzazioni.
  • località tante? aggiungi tabella area(zona percorso o quello che in italiano viene meglio), che contiene tante località ma idarea è uno solo
    veicoli tanti, guidatori tanti (non è un problema di autorizzazioni)
    cause una
ma, autorizzazione 1 sola per veicolo!!!! se no come fa UTPiovene a fermare veicolo che non ha autorizzazione???? ;)
quindi in tabella autorizzazioni manca idveicolo

da qui una sola query che estrae tutto
poi su Writer metti quello che viene ;)

e macro che non sai fare butti nelle ortiche, naturalmente in zona pastorale solo se hai fatto autorizzazione

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: martedì 13 settembre 2011, 11:08
da UTPiovene
Vladko sei simpaticissimo come sempre.
Il problema è proprio che ad ogni autorizzazione, mentre la località è una, possono invece corrispondere più veicoli.

Re: Filtro ricerche da casella di testo o casella di riepilo

Inviato: martedì 13 settembre 2011, 11:44
da UTPiovene
Sono dovuto uscire per un sopralluogo, riprendo dal precedente (perchè non posso modificare il messaggio precedente?)

Allora dicevo che per ogni autorizzazione ci possono essere più veicoli, quindi ho fatto una tabella dei veicoli autorizzati a cui ho collegato ID autorizzazione a cui fa riferimento.
Ora capisco che è poco simpatico fare paragoni con Access, ma lì si poteva impostare il filtro della query sulla base di un valore di testo contenuto in una casella di testo non collegata contenuta in un formulario. Quindi non dovevo fare altro che inserire il valore del formulario per vedere i dati filtrati.
Ho provato a fare la stessa cosa con Base, ma non funziona. Per questo pensavo ad una macro che prelevasse il valore della casella di testo o di riepilogo per creare di volta in volta la query.