Newsgroup: it.comp.appl.access
Titolo: Problema con Sottomaschera da query con Between e DatePart







Prima di tutto mi presento : mi chiamo Stefano e questo è il mio primo 
messaggio, ho iniziato ad usare access da un po’ ho anche fatto tre corsi e mi 
rendo conto, che più si va avanti, e più si vorrebbe sfruttarne le possibilità, 
ma in alcuni casi senza un aiuto esterno diventa difficile, infatti è una 
settimana buona che mi scervello sul problema e siccome proprio non ci cavo il 
classico ragno dal buco mi sono deciso a scrivervi.


Ho già cercato nel sito che tra l’altro conoscevo da tempo ma non ho 
trovato nulla che mi potesse aiutare ho anche fatto altre ricerche ma niente, 
quindi :


sto costruendo un database con access 2000 in cui c’è una tabella 
(TabellaPrimanota) che archivia i dati delle fatture e ricevute fiscali dei 
clienti.


 


Per la ricerca, stampa di rapporti ecc. nel database c’è un maschera 
(MascheraVisualizzaReportPrimanotaCorrispettiviClienti)


In questa maschera c’è una struttura a schede in ogni scheda ci sono 
delle caselle combinate non associate ma che come origine riga hanno 
un’istruzione SQL che fa riferimento alla TabellaPrimanota (in particolare al 
campo DataDocumento nella tabella) e che servono da criteri nelle query che a 
loro volta fanno da origine dati per delle sottomaschere all’interno delle 
schede.


 


In ogni scheda quindi, ci sono delle caselle combinate e una 
sottomaschera.


 


La 
prima scheda
 ha due 
caselle combinate che come origine riga hanno un’istruzione SQL che prende i 
dati dal campo DataDocumento nella TabellaPrimanota, preso pari pari come data 
GG/MM/AA (Formato : Data in cifre) (
SELECT TabellaPrimanota.DataDocumento FROM 
TabellaPrimanota GROUP BY TabellaPrimanota.DataDocumento ORDER BY 
TabellaPrimanota.DataDocumento;
 ) c’è anche la sottomaschera con la query 
che utilizza l’operatore Between con le due caselle combinate come criterio per 
selezionare solo i documenti nell’intervallo delle due caselle combinate e qui 
funziona tutto bene. 


(
Between 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![DataDocumentoDA] 
And 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![DataDocumentoA]
)


Ci sono poi dei tasti che aprono dei report anche loro hanno come origine 
dati la stessa query e anche loro funzionano bene.


 


Per non avere una lista infinita nelle caselle combinate ho pensato di 
suddividere la data in tre caselle combinate la prima che mostra solo il giorno 
la seconda il mese e la terza l’anno.


Ho costruito una 
seconda 
scheda
 con sei caselle combinate e ad ogniuna ho inserito una istruzione 
SQL
  
con la funzione DatePart per 
mostrare solo il giorno 


(
SELECT 
DatePart("d",TabellaPrimanota!DataDocumento) AS Espr1 FROM TabellaPrimanota 
GROUP BY DatePart("d",TabellaPrimanota!DataDocumento);
), il mese e l’anno, 
ho copiato e rinominato la query della prima scheda e gli ho cambiato il 
criterio calcolando l’intervallo di date usando i nuovi campi :


(
Between 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![GiornoDA] & 
"/" & 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![MeseDA] & 
"/" & 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![AnnoDA] And 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![GiornoA] & 
"/ " & 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![MeseA] & "/ 
" & 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![AnnoA]
).


Qui ho avuto i primi problemi; quando apro 
la maschera (MascheraVisualizzaReportPrimanotaCorrispettiviClienti) appare un 
messaggio che dice così : 
Espressione 
digitata non correttamente o troppo complessa per essere valutata.Un’espressione 
numerica, ad esempio, può contenere troppi elementi complessi.Semplificare 
assegnando parti dell’espressione a variabili.
 e la sottomaschera appare 
bianca. il fatto strano è che la query funziona perché se imposto i valori nelle 
caselle combinate e apro la query mi mostra tutti i record nell’intervallo; di 
più 
se con un tasto all’interno della 
scheda faccio aprire una maschera con origine dati la stessa query la maschera 
riporta tutti i record dell’intervallo.


 


Ho provato a modificare la query aggiungendo tre campi che con delle 
espressioni prendano solo il valore 


del giorno 
Espr2: 
DatePart("g";TabellaPrimanota!DataDocumento)
 


del mese 
Espr3: 
DatePart("m";TabellaPrimanota!DataDocumento)


e dell’anno 
Espr4: 
DatePart("aaaa";TabellaPrimanota!DataDocumento)


A questi campi ho assegnato dei criteri che sono : 


per il campo Espr2 :
 


Between 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![GiornoDA] And 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![GiornoA]


Per il campo Espr3 
:


Between 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![MeseDA] And 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![MeseA]


Per il campo Espr4 
:


Between 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![AnnoDA] And 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![AnnoA]


 


In 
questo caso non appare più il messaggio di errore ma nella sottomaschera 
all’interno della scheda
 
non vengono 
mostrati tutti i record
 infatti se seleziono un intervallo di date che va 
dal 1 gennaio 2008 al 4 Aprile 2008 non vengono mostrati i record dei mesi 
precedenti Aprile con giorno superiore al 4; anche la query dopo aver inserito i 
dati nelle caselle combinate
  
si 
comporta nello stesso modo e anche una maschera aperta per mezzo di un tasto di 
comando si comporta nell’identico modo


 


In sostanza la prima query 
QueryPrimanotaGMAPROVA_001
 non funziona 
all’interno di una sottomaschera dentro una scheda ma funziona come query e 
funziona in una maschera a parte.


La seconda query 
QueryPrimanotaGMAPROVA_002 
non 
restituisce i dati con giorno superiore al GiornoA e mese inferiore al 
MeseA.


 


Ho fatto tanti altri tentativi ma non sono riuscito a far funzionare il 
meccanismo in nessun modo …. AIUTO!


 


Spero di essere stato chiaro, se si può posso inviare il file con il 
database; vi ringrazio per il vostro aiuto.


 


Ciao


 


Stefano



 ha scritto nel messaggio 
news:47f9e69d$0$37206$4faf...@reader3.news.tin.it...














meccanismo in nessun modo .. AIUTO!
Spero di essere stato chiaro, se si può posso inviare il file con il 
database; vi ringrazio per il vostro aiuto.
Ciao
Stefano
--------------------------------
Ciao Stefano, benvenuto.
Come primo post...niente male.
Imposta il tuo gestore dei NG a scrivere in formato testo e cerca di essere 
più conciso.
Prova ad assegnare al between una funzione pubblica.
Per esempio, in un modulo pubblico scrivi:
Public function DimmiDataDA()As date
DimmiDataDA = 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![GiornoDA]
End Function
e
Public function DimmiDataA()As date
DimmiDataA = 
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![GiornoA]
End Function
Il tuo Between diventa:
Between DimmiDataDA() And DimmiDataA()
Così per gli altri criteri...tutti derivano da funzioni pubbliche.
Ciao, Carlo

 ha scritto nel messaggio
news:ftdhg8$cvc$1...@tdi.cu.mi.it...

___________________________________________________________________
Grazie Carlo proverò nei prossimi giorni a mettere in pratica i tuoi
consigli
Ora credo di aver impostato il formato testo : sono andato su Outlook
Express > Strumenti > Account > News > 
news.tin.it
 > Proprietà >
Impostazioni avanzate > ho selezionato Testo normale.
Ciao Stefano

 ha scritto nel messaggio
news:47fb5189$0$37204$4faf...@reader3.news.tin.it...

Fatto, ci ho provato ma non ha funzionato, sono invece riuscito in questo
modo :
Ho aggiunto due campi nella scheda (ProvaDA e ProvaA) uno prende i dati dai
campi GiornoDA MeseDA AnnoDA l'altro da GiornoA MeseA AnnoA
Con Origine Controllo "=DateSerial([AnnoDA];[MeseDA];[GiornoDA])"
Sinceramente sono andato per tentativi alla cieca e con questa funzione
DateSerial la query FUNZIONA, o meglio la query funziona anche in una
sottomaschera all'interno di una scheda mentre prima non sò perchè non
funzionava.
Il criterio nella Query è così diventato "Between
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![ProvaDA]
And
[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![ProvaA]"
Siccome con il Between la query non fa differenza tra data iniziale e data
finale,
se inserico come GiornoDa/MeseDa/AnnoDa 01/01/2008 e come
GiornoA/MeseA/AnnoA 02/02/2008 mi restitusce i documenti nell'intervallo di
date selezionato ma anche invertendo le date cioè GiornoA/MeseA/AnnoA
01/01/2008 e GiornoDa/MeseDa/AnnoDa 02/02/2008 il risultato è lo stesso; ho
modificato il criterio in :
">=[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![ProvaDA]
And
<=[Forms]![MascheraVisualizzaReportPrimanotaCorrispettiviClienti]![ProvaA]"
Così la query restituisce i documenti solo se la data iniale
GiornoDa/MeseDa/AnnoDa e minore della data finale GiornoA/MeseA/AnnoA
altrimenti nella sottomaschera non appare nessun record.
Ora vorrei inserire un avviso (un msgbox) nel caso si verifichi l'aver
selezionato una data iniziale maggiore della data finale ma non ci riesco

 selezionato una data iniziale maggiore della data finale ma non ci riesco
Tutto dipende da dove vuoi far comparire il messaggio.
Da codice...naturalmente:
if me.MiaDataA < me.MiaDataDa then
msgbox "La data finale deve essere uguale o maggiore della data iniziale"
end if
Lo stesso, ma a posizioni invertite se vuoi farlo rispetto alla data 
iniziale.
If me.DataDa > me.DataA then
.....
Ciao, Carlo 

 ha scritto nel messaggio
| news:4801f24a$0$35966$4faf...@reader2.news.tin.it...
| cut
| >
| > Fatto, ci ho provato ma non ha funzionato, sono invece riuscito in
questo
| > modo :
|
| cut
| L'importante č che funzioni.
|
| > Ora vorrei inserire un avviso (un msgbox) nel caso si verifichi l'aver
| > selezionato una data iniziale maggiore della data finale ma non ci
riesco
|
| Tutto dipende da dove vuoi far comparire il messaggio.
| Da codice...naturalmente:
| if me.MiaDataA < me.MiaDataDa then
| msgbox "La data finale deve essere uguale o maggiore della data iniziale"
| end if
|
| Lo stesso, ma a posizioni invertite se vuoi farlo rispetto alla data
| iniziale.
| If me.DataDa > me.DataA then
| .....
|
|
| Ciao, Carlo
|
|
Premetto che sui cambi di valore nelle caselle combinate GiornoDA MeseDa
AnnoDA GiornoA MeseA AnnoA ho inserito il Me.Refresh per aggiornare
automaticamente la sottomaschera.
Ci ho provato ma non sembra cosě semplice ho messo il codice che dici in
tutti i campi e in tutti i modi e su tutti gli eventi possibili e
immaginabili ma non funziona
Se perň inserisco un pulsante e metto il codice sull'evento Clik il codice
funziona.
Grazie ancora dell'aiuto che spero di porter ricambiare prima o poi.
Stefano