Newsgroup: it.comp.appl.access
Titolo: Estrazione giorni del mese - Per Roberto dalla campagna

Ti ringrazio tantissimo!!!
Il tuo codice relativo all'estrazione dei giorni per mese mi è stato
utilissimo.
Scusa se non ti ho ringraziato per tempo ma non ho avuto la
possibilità di collegarmi prima.
Un'ultima richiesta:
Nella tabella ho anche un campo chiamato descr_mese (di tipo testo) in
cui vorrei memorizzare il relativo mese (es. gennaio, febbraio...).
Ti scrivo il codice che mi avevi inviato, sperando che ti possa
ricordare il tuo precedente aiuto.
Se la tabella che contiene i dati anagrafici si chiama tblAnagrafe ed
ha una
struttura simile a questa:
cod_paziente  Testo e chiave primaria
Cognome       Testo
Nome            Testo
DataInizio       Data/ora
DataFine        Data/ora
ecc. ecc.
Se la tabella che conterrà il risultato dell'elaboarazione si chiama
tblTrattamento ed ha una struttura simile a questa:
IdTrattamento            Contatore e chiave primaria
cod_paziente             Testo
mese                         Testo
n_giorni_trattamento  Numerico
Se l'aggiornamento della tabella tblTrattamento deve avvenire ogni
volta che
si digita una data in DataFine.
Creati una maschera con visualizzazione maschera singola che abbia
tblAnagrafe come origine record.
A fronte dell'evento "prima di aggiornare" della casella di testo
DataFine
(associata al campo DataFine di tblAnagrafe) genera il seguente codice
VBA:
Private Sub DataFine_BeforeUpdate(Cancel As Integer)
If DataFine < DataInizio Then
    MsgBox "DataFine è minore DataInizio", _
    vbCritical
    Cancel = True
End If
End Sub
e a fronte dell'evento "Dopo aggiornamento" della stessa casella di
testo
genera il seguente codice VBA:
Private Sub DataFine_AfterUpdate()
Dim rst As DAO.Recordset
Dim MeseInizio As Date
Dim MeseFine As Date
Dim Da As Date
Dim A As Date
Dim Mese As Date
DoCmd.SetWarnings False
DoCmd.RunSQL "Delete * FROM tblTrattamento WHERE cod_paziente= '" &
Me!cod_paziente & "'"
DoCmd.SetWarnings True
If Not IsNull(Me!DataFine) Then
Set rst = CurrentDb().OpenRecordset("tblTrattamento")
MeseInizio = DateSerial(Year(Me!DataInizio), _
Month(Me!DataInizio), 1)
MeseFine = DateSerial(Year(Me!DataFine), _
Month(Me!DataFine), 1)
Mese = MeseInizio
Do Until 1 = 2
    If Mese = MeseInizio Then
        Da = Me!DataInizio
    Else
        Da = Mese
    End If
    If Mese <> MeseFine Then
        A = DateSerial(Year(Mese), _
        Month(Mese) + 1, 0)
    Else
        A = Me!DataFine
    End If
    rst.AddNew
    rst!cod_paziente = Me!cod_paziente
    rst!Mese = Format(Mese, "mmmm yyyy")
    rst!n_giorni_trattamento = _
    ContaLavorativi(Da, A, True)
    rst.Update
    If Mese = MeseFine Then
        Exit Do
    End If
    Mese = DateAdd("m", 1, Mese)
Loop
Set rst = Nothing
End If
End Sub
Nel codice VBa di cui sopra si fa riferimento alla libreria Microsoft
DAO,
quindi se usi una versione di Access successiva ad Access 97 devi
aggiungere
ai riferimenti del tuo database tale libreria.
Naturalmente in un modulo del tuo database memorizzerai il codice VBA
che è
pubblicato sul Sito Comune, nella Sezione General, nella FAQ di G.
Paolo
Bizzaro e Silvio Mazzetto intitolata "Conteggio dei giorni lavorativi
tra
due date". Ti ricordo che tale funzione non considera festivo il santo
patrono.
Fammi saper se il tutto funziona.
GRAZIE ANCORA

 GRAZIE ANCORA
Scusami, forse non capisco la tua domanda, ma nella tabella TblTrattamento
già esiste un campo di tipo testo che contiene la descrizione del mese:
detto campo si chiama appunto Mese, quindi non saprei proprio cosa
risponderti.
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

...

Si, infatti è così, ma il codice riportato sopra non mi scrive il mese
relativo nel campo mese. Infatti mi riempie il campo relativo all'anno
e al numero dei trattamenti, ma non il mese.
CIAO


Penso che tu abbia copiato male qualcosa in quanto il campo Mese viene
riempito dalla descrizione del mese seguita dall'anno (es.: gennaio 2004);
per scrupolo ho provato a realizzare in un database di esempio ciò che ti ho
suggerito ed a me funziona tutto bene, quindi hai sbagliato tu a copiare
qualcosa, e non posso immaginare cosa.
Sperando che ti aiuti nella ricerca dell'errore, la riga di codice VBA che
scrive in tabella TblTrattamento la descrizione del mese seguita dall'anno
è:
rst!Mese = Format(Mese, "mmmm yyyy")
Non so che altro dirti.
Se pensi ti possa essere utile, posso inviare al tuo indirizzo e-mail il
database di esempio in cui ho testato la soluzione che ti ho suggerito.


Roberto dalla campagna ha scritto:




non è che il campo relativo al mese sia troppo corto? come spazio nella
tabella o nella form e quindi non viene visualizzata completa?
è un'ipotesi mia!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 è un'ipotesi mia!
Per verificare se invece se hai commesso un errore nel copiare  il codice
VBA, sarebbe opportuno che tu, con un banale copia/incoola, postassi il
codice VBA che hai generato a fronte dell'evento "Dopo aggiornamento" del
controllo DataFine.


 controllo DataFine.
Si. avevi ragione. era corto il campo. Mea culpa!!!
Ti devo chiedere un ultimo favore:
La stessa funzione può essere utilizzata per ricavarmi il numero delle
settimane (anzichè dei giorni) per mese?
Mi potresti indicare il modo? 
GRAZIE GRAZIE GRAZIE

 GRAZIE GRAZIE GRAZIE


 > GRAZIE GRAZIE GRAZIE
In effetti hai ragione!!!
Dunque, la situazione è la seguente:
Gli utenti devono effettuare dei trattamenti riabilitativi che hanno
frequenze diverse.
Nel caso in cui questi trattamenti vengano fatti quotidianamente, per
calcolare quanti trattamenti ogni mese deve fare un utente a partire
da una data ad un'altra, la problematica viene tranquillamente risolta
con il calcolo dei giorni lavorativi.
Es. Il signor Mario Rossi deve effettuare dei trattamenti giornalieri
dal 13/09/2004 al 12/10/2004.
La funzione che mi avevi suggerito va benissimo perchè ho il seguente
risultato:
Utente         Mese       N. Trattamenti
Rossi Mario   Settembre     16
Rossi Mario   Ottobre       10
Il numero dei trattamenti include anche il sabato per tutti i
trattamenti ed esclude la domenica ad eccezione del trattamento con
internato (il paziente viene ricoverato) che include anche la
domenica.
E tutto questo lo gestisco bene.
Il problema ora è che questi il paziente, oltre ad distinguersi per
essere ricoverato o meno, può avere frequenze differenti:
- Quotidiana (e questo lo calcolo tranquillamente)
- Bimensile
- Bisettimanale
- Monosettimanale
- Pentasettimanale
- Quadrisettimanale
- Trisettimanale
Bisettimanale vuol dire che l'utente fruisce di due trattamenti alla
settimana e così via.
Quindi alla fine il calcolo dei trattamenti varia a seconda della
prescrizione.
E' più chiaro adesso?
In effetti riconosco che la problematica è incasinata parecchio!!!
Ti chiedo aiuto.
Ciao

 Ciao
