17/03/2023 - @Alex ha scritto:
Io credo si possa migliorare la logica…!
Tu metti 2 Condizioni in AND sulla Query principale, in cui metti che la data deve essere UGUALE INFERIORE di OGGI ed in più l'anno selezionato dalla Combo.
La combo ha solo gli anni presenti in tabella, è possibile ci siano date maggiori di Oggi…?
Ciao Alex. Si, la tab lkpData (PK/Data) elenca date dal 1/1/2017 al 31/12/2029, per quello nella query in questione (qryCRX) uso un campo dalla tab lkpData con criterio <=Date() e un campo calcolato Year([lkpData.Data]) AS Anno come filtro.
Quanto alla Combo, Il predicato DISTINCROW non l'ho mai usato (nemmeno lo conoscevo). I dati della combo li origino direttamente dai tre puntini, selezionando la tab lkpData e mettendo Raggruppamento in formula e <=Year(Date()) in criterio. Sempre fatto così.
La combo invece di usare GROUP BY non è meglio usare DISTINCROW…?
SELECT DISCTINCTROW Year([Data]) AS Anno FROM lkpData ORDER BY Year([Data]);
Se poi è applicabile di spostare la limitazione della selezione alle date=Oggi allora:
SELECT DISCTINCTROW Year([Data]) AS Anno FROM lkpData WHERE Year([Data])<=Year(Date()) ORDER BY Year([Data]);
Scritte così, nell'origine riga della combo entrambe mi danno ..operatore mancante nell'espressione della query 'DISTINCTROW Year([Data])'. (… dopo approfondisco l'argomento, e scopro perchè..)
Detto questo per capire perchè non funziona, serve capire se la Maschera [Mensile] sia aperta o meno… ma soprattutto come gestisci da codice il tutto, perchè potrebbe mancare il REQUERY…
Si, La maschera [Mensile] l'ho aperta e selezionato la cbo. Tant'é che nello stesso Generatore di espressioni la trovo su maschere caricate, e non devo cercarla su tutte le maschere. Ma, prima della gestione del codice, la query non dovrei poterla visualizzare in foglio dati senza errore di nome di campo o espressione valida? … magari “in bianco”, cioè senza che mi restituisca alcun record?
In realtà, tutto il problema si pone in questi termini. Ho alcune query piuttosto complesse (con funzioni, campi calcolati, vari JOIN, anche su query a campi incrociati) che non uso direttamente in access (infatti non hanno maschere di riferimento), ma esporto in una cartella “annuale” excel (dove le elaboro ulteriormente).
Ogni anno, se non faccio l'esportazione al 31/12, o se devo aggiungere dati successivamente, mi tocca modificare quelle query aggiungendo il -1 nei campi che richiamano Year(Date(() e modificando nome alle cartelle excel di destinazione. Per questo volevo filtrarle da una maschera su cui ho una cboSceltaAnno e in cui ho aggiunto un pulsante col comando esporta le query in
strPercorso = CurrentProject.Path & "\" & "NomeCartella_" & [Forms]![Mensile]![cboSceltaAnno].Value & ".xlsm"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
"NomeQuery1_qry", strPercorso, True ' già filtrata sull'anno della cbo
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
"NomeQuery2_qry", strPercorso, True ' già filtrata sull'anno della cbo
eccc...
…e qui non vado oltre, perchè ancora uso Call shell e non l'automazione OLE (come a suo tempo mi rimproverasti !!)
Ma a questo punto, viste le mie conoscenze mooolto limitate, per “farla facile” (..scusa la bruttissima espressione su un forum di programmatori professionisti) credo mi convenga scegliere due vie:
-creare varie sottomaschere per le query da filtrare (ultima spiaggia!!!)
- portare le varie Sql direttamente in codice e ragionare su come esportarle filtrate
Intanto… Grazie Alex. Aggiorno appena riesco a combinare qualcosa.