Newsgroup: it.comp.appl.access
Titolo: Intervallo di date, inizio mese, fine mese su tabella

Buongiorno a tutti/e!
Sto implementando un Db e la richiesta che un utente mi fà è questa:
"inserisco due date, una iniziale e una finale di un intervallo temporale, e
devo ricavare l'inizio mese e fine mese per tutti i mesi che separano queste
due date.
Mi spiego meglio con un esempio:
data1:05/10/05
data2:20/12/2007
Voglio produrre una tabella nella quale riproduco tutti gli inizi e le fini
di ogni mese(tranne che per la prima e l'ultimissima data) e cioè:
05/10/05 31/10/05
01/11/05 30/11/05
01/12/05 31/12/05
01/01/06 31/01/06
...................20/12/07
Esiste un modo?Mi consigliate qualcosa?
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio 
news:151Z96Z0Z8Y11...@usenet.libero.it...

Ciao,
un modo potrebbe essere questo:
in base a data1 trovi il primo fine mese (se già non lo è), puoi ottenerlo 
tramite un ciclo che sommi 1 a data1 fino a che non rilevi il cambio di 
mese.
Partendo dal primo fine mese che hai trovato cominci un ciclo che passa alle 
date di fine mese successive tramite la funzione 
DateAdd("m",1,FineMeseAttuale)
Il primo del mese lo trovi semplicemente sommando 1 alla data di fine mese.
Il ciclo termina quando la data di fine mese è successiva o uguale a data2.
Mat. 

 Esiste un modo?Mi consigliate qualcosa?
Se la tabella che conterrà il risultato si chiama Tabella1 ed ha la seguente
struttura:
Id                Contatore e chiave primaria
DataInizio    Data/ora
DataFine      Data/ora
Esegui il seguente codice VBA:
Dim Inizio As Date
Dim Fine As Date
Dim Pippo As Date
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM Tabella1;"
DoCmd.SetWarnings True
Pippo = data1
Do Until Format(Pippo, "yyyymm") > Format(Data2, "yyyymm")
    If Format(Pippo, "yyyymm") = Format(data1, "yyyymm") Then
        Inizio = data1
        If Format(Pippo, "yyyymm") = Format(Data2, "yyyymm") Then
            Fine = Data2
        Else
            Fine = DateSerial(Year(data1), Month(data1) + 1, 0)
        End If
    Else
        If Format(Pippo, "yyyymm") = Format(Data2, "yyyymm") Then
            Inizio = DateSerial(Year(Pippo), Month(Pippo), 1)
            Fine = Data2
        Else
            Inizio = DateSerial(Year(Pippo), Month(Pippo), 1)
            Fine = DateSerial(Year(Pippo), Month(Pippo) + 1, 0)
        End If
    End If
    DoCmd.RunSQL "INSERT INTO Tabella1 (DataInizio, DataFine) " & _
    "VALUES (#" & Format(Inizio, "mm/dd/yyyy") & _
    "#,#" & Format(Fine, "mm/dd/yyyy") & "#);"
Pippo = DateAdd("m", 1, Pippo)
Loop
Dovrebbe funzionare.
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 Roberto
Funzionaaaaaaaaaaa!
Non ho parole. Mi sarei spremuto x anni il cervello senza riuscirci!!!
Non mi chiedo come hai fatto....mi accorgo solo che per arrivare a certi
livelli la mia strada è ancora lunga!!!
Ti faccio i miei complimenti e ti ringrazio x l'aiuto.
Ciao



Funziona si...ma mi sono dimenticato un "piccolo" particolare che forse
tanto piccolo non č.
La tabella1 che contiene le date replicate (e che grazie a te riesco a
replicare) č legata da una relazione uno-molti (di cui essa rappresenta il
lato molti) con una tabella tPrincipale.
In pratica i record non andrebbero eliminati in tabella1 ma accodati.
Inoltre questa tabella dovrebbe contenere un campo numerico legato ad una
chiave primaria presenta nella tabella tPrincipale.
Credi che sia possibile utilizzando il tuo codice? e se si come? devo
trovare una diversa soluzione????
Grazie ancora


 Grazie ancora
Prego.
