Newsgroup: it.comp.appl.access
Titolo: Problema con calcoli sulle date.

Ciao a tutti,
sicuramente è una stupidata ma io non capisco.
Ho una maschera che ha il campo [Datascadenza] nel quale deve comparire il
valore calcolato dato dalla formula   <Me!DataScadenza = DateAdd("yyyy", 1,
[DataStipula])>.
Prendendo il valore dal campo [Datastipula] che facendo un esempio è
25/10/2002 mi dovrebbe fare il calcolo della scadenza del contratto
presumendo che esso sia del tipo Annuale.
In poche parole dovrei ottenere il risultato 25/10/2003 invece ottengo
30/12/1900 !!
Se invece uso la seguente formula <Me!DataScadenza = DateAdd("yyyy", 1,
"25/10/2002")> e quindi preimpostando il valore di DATASTIPULA (che non
voglio preimpostare perchè variabile) ottengo il giusto risultato.
Cosa può essere . Io non riesco a capire dove sbaglio.
Grazie a tutti.
Ciao.
Con simpatia .Marco
**************************procedura su doppio click nel campo*********
Private Sub DataScadenza_DblClick(Cancel As Integer)
Dim DataScadenza, DataStipula, datacalcolata As Date
Dim contratto, Descrizione As String
contratto = tipocontratto.Column(1)
Descrizione = tipocontratto.Column(2)
If contratto = "ANNUALE" Then GoTo Annuale Else
If contratto = "MENSILE" Then GoTo mensile Else
If contratto = "TRIMESTRALE" Then GoTo trimestrale Else
If contratto = "SEMESTRALE" Then GoTo semestrale Else
If contratto = "PREPAGATO A ORE" Then GoTo prepagato Else GoTo fine
Annuale:
Me!DataScadenza = DateAdd("yyyy", 1, [DataStipula])
'Me!DataScadenza = DateAdd("yyyy", 1, "25/10/2002")
GoTo fine
mensile:
Me!DataScadenza = DateAdd("m", 1, DataStipula)
GoTo fine
semestrale:
Me!DataScadenza = DateAdd("m", 6, DataStipula)
GoTo fine
trimestrale:
Me!DataScadenza = DateAdd("m", 3, DataStipula)
GoTo fine
prepagato:
MsgBox "Il contratto è a ore prepagate e quindi non ha una data di scadenza
prestabilita."
GoTo fine
fine:
End Sub
***********fine procedura**************************

 sicuramente č una stupidata ma io non capisco.
Ma l'hai letta la risposta che ti hanno dato Alessandro e Maurizio al tuo messaggio delle
18:03?


Scusate ma vedete quando stavo postando il quesito ho annulato, almeno
credevo e mi sono
pure incazzato perchè pensavo di dover scrivere tutto da capo il mio
quesito.
Invece è stato publicato senza che io ne fossi consapevole, nel senso che
credevo di aver chiuso erroneamente il post da me scritto e quindi di
doverlo riscrivere e poi inviare.
Vi ringrazio , ho visto ora le risposte.
Scusatemi molto.
Sappiate che comunque ho nel frattempo risolto in questo modo ma vorrei
sapere se è meglio usare il sistema del CASE?
Grazie e scusatemi la gaf !!
Con simpatia Marco..
di seguito il codice del mio sistema funzionante .
*********************
Private Sub DataScadenza_DblClick(Cancel As Integer)
Dim contratto, Descrizione As String
contratto = tipocontratto.Column(1)
Descrizione = tipocontratto.Column(2)
If contratto = "ANNUALE" Then GoTo Annuale Else
If contratto = "MENSILE" Then GoTo mensile Else
If contratto = "TRIMESTRALE" Then GoTo trimestrale Else
If contratto = "SEMESTRALE" Then GoTo semestrale Else
If contratto = "PREPAGATO A ORE" Then GoTo prepagato Else GoTo fine
Annuale:
Me!DataScadenza = DateAdd("yyyy", 1, "" & [DataStipula] & "")
GoTo fine
mensile:
Me!DataScadenza = DateAdd("m", 1, "" & [DataStipula] & "")
GoTo fine
semestrale:
Me!DataScadenza = DateAdd("m", 6, "" & [DataStipula] & "")
GoTo fine
trimestrale:
Me!DataScadenza = DateAdd("m", 3, "" & [DataStipula] & "")
GoTo fine
prepagato:
MsgBox "Il contratto è a ore prepagate e quindi non ha una data di scadenza
prestabilita."
GoTo fine
fine:
End Sub
*********************************

MM ha scritto:

per la miseria e con "" soltanto funziona? Allora non ho capito un
Kaiser.
GoTo Fine? bleah????????????????'
Saresti un ottimo programmatore COBOL anni 70
--
a.cara

 Saresti un ottimo programmatore COBOL anni 70
Sono nato in quei anni, e all'età di 11 anni programmavo parecchio in Pascal
e succesivamente Turbo Pascal e poi Turbo Vision.
Ho poi lasciato perdere il tutto causa un tumore al cervello che non mi ha
facilitato la vita in questi anni.
Recentemente mi sono promesso di riprovare perchè lasciarsi andare non mi
piace e quindi ho ripreso a programmare vedendo un grosso abbisso rispetto a
quello che conoscevo ma cerco di CAPIRE.
Non voglio fare l'esperto anche se cerco di aiutare anche chi sa meno di me.
Grazie comunque.
Fammi sapere eventuali migliorie visto che non sembra piacerti molto il mio
sistema.
Ciao e grazie.
Con simpatia.

 sapere se č meglio usare il sistema del CASE?
Ti consiglio senz'altro una struttura Select Case!
Ciao. Claudio.

"Claudio" <cld@NOSPAM&COsupereva.it> ha scritto nel messaggio
news:S0ju9.33828$aL4.1...@news1.tin.it...

Grazie Claudio.
Infatti ho utilizzato il CASE, mi sembrava piů pulito e scorrevole il
codice.
Sai a cosa si riferisse Alessandro Cara per il commento : e funziona solo
con "".
forse si riferisce al seguente codice ? --> Me!DataScadenza = DateAdd("m",
3, "" & [DataStipula] & "")
Cosa cč di sbagliato ?
Ciao con simpatia.
Marco

Dimenticavo....
attualmente il codice finale è diventato questo :
******inizio codice
Private Sub TipoContratto_Change()
Dim contratto, Descrizione As String
contratto = TipoContratto.Column(1)
Descrizione = TipoContratto.Column(2)
Me![Descrizione] = [Descrizione]
          Select Case Me!TipoContratto.Column(1)
          Case "ANNUALE"
            Me!DataScadenza.Enabled = True
            Me!DataScadenza = DateAdd("yyyy", 1, Me!DataStipula)
          Case "MENSILE"
            Me!DataScadenza.Enabled = True
            Me!DataScadenza = DateAdd("m", 1, Me!DataStipula)
          Case "TRIMESTRALE"
            Me!DataScadenza.Enabled = True
            Me!DataScadenza = DateAdd("m", 3, Me!DataStipula)
          Case "SEMESTRALE"
            Me!DataScadenza.Visible = True
            Me!DataScadenza = DateAdd("m", 6, Me!DataStipula)
          Case "PREPAGATO A ORE"
            Me!DataScadenza.Enabled = False
          Case Else
          End Select
End Sub
*********fine codice************
Se avete suggerimenti......fatemelo sapere prego.
Ciao.
Con simpatia.
Marco

 sistema.
Che mi piaccia o meno non deve fare differenza. Le Goto , come le if, se
puoi 
evitale aumentano la complessita' del sistema e lo rendono meno
"robusto" 
ciao
--
a.cara

 Cosa cè di sbagliato ?
Beh, non vorrei parlare per Alessandro, ma visto che me lo chiedi posso presumere che si
sia stupito di vedere il solo doppio doppio apice ("") intorno allo [DataStipula]. Penso
però che si sia stupito perché forse immaginava che fosse necessaria la sintassi """" &
[DataStipula] & """", e avesse creduto che si potesse mettere "" al posto di """". In
realtà credo che il doppio doppio apice sia quello che appare, e cioè superfluo. Non so se
ho capito quello che ho detto :-) Quindi Alessandro non non ha capito un Kaiser (notare la
doppia negazione), ma è rimasto folgorato inutilmente. A questo punto, se io non ho capito
un Kaiser, chiedo venia e invoco l'ora tarda ;-).
Ciao. Claudio

>anche quando "sembro" (o sono?) aggressivo
A me non sembri agressivo , anzi mi pare tu sia spiritoso !! Non ho detto
che sei agressivo,...se ti riferisci a me.
Comunque , cio' che preoccupa me, è sempre trovare il metodo meno doloroso e
più efficiente possible mantenendo la semplicità.
.....un po' come avere la moglie ubriaca ma la botte piena !!!
Ti ringrazio molto della risposta e ringrazio tutti coloro che hanno fatto
chiarezza alle mie domande, forse un po'
troppo contorte o forse un po' troppe banali, ma pur sempre domande alle
quali vorrei potermi dare delle risposte valide da ricordare.!!
Scusate se rompo tanto e cerco la precisione, ma quando trovo la soluzione
ad un problema cerco di memorizzarla e succesivamente archivio la risposta
corretta con relativa domanda , in modo tale da poter
riguardarla nel caso no mi ricordassi.
A volte però.......non ricordo di ricordarmi !! Capita anche nelle migliori
famiglie Italiane e NON.
Grazie di cuore a tutti.
Con simpatia.  Marco.
PS: A risentirci presto.


Mi sembra già meglio, tu che dici?
Però non sei stato a sentire Maurizio quando ti ha spiegato che la tua Dim, scritta come
l'hai scritta tu, è equivalente a:
Dim contratto As Variant, Descrizione As String
che probabilmente non è quello che vuoi. O no?
Ciao. Claudio.

 Ciao. Claudio
Caro Claudio,
sinceramente non ho capito quello che hai scritto anche se ho capito che
pure tu non ti sei capito.
Ma sono cose che succedono, specialmente quando si inzia a fare tardi la
notte, come tutti noi ...credo!!
Sei stato simpatico..
Ciao.
Con simpatia. Marco.

 notte, come tutti noi ...credo!!
Spero che Alessandro mi dia un conforto sulla faticosa interpretazione ;-)
Quando avrai a che fare con le funzioni di aggregazione, con apici e doppi
apici nelle stringhe, sarà più chiaro anche a te.
Ciao. Claudio.

 che probabilmente non è quello che vuoi. O no?
Devo studiarci su un attimo perchè non capisco cosa intendi dire.
Io ho messo la dichiarazione Dim contratto As Variant, Descrizione As String
pensando sia neccesario definire che tipo di oggetto sia contratto e
descrizione.
Se mi dici che funziona anche senza, lo tolgo anche perchè se non serve
significa
che comunque mi creava delle variabili con valori in memoria con il
conseguente (anche se minima)
spreco di ram.
Grazie.
Con simpatia.
Marco.


Cercherò di spiegarmi meglio. Presumo che la tua intenzione fosse di dichiarare
due variabili di tipo stringa, giusto?
Ma se tu usi la sintassi:
Dim Var1, Var2 as String
è come se tu scrivessi, su due righe:
Dim Var1
Dim Var2 as String
Come vedi alla variabile Var1 non è stato assegnato nessun tipo String. Poiché
il default, quando non si specifica nulla, è Variant, torniamo al tuo caso.
Quindi sarebbe stato necessario scrivere:
Dim Var1 as String, Var2 as String
Chiaro?
Dai un'occhiata all'help per quanto riguarda l'istruzione Dim, e da lì,
utilizzando il link "Vedere anche", la sezione "Riepilogo dei tipi di dati".
Ciao. Claudio.

 Chiaro?
Tutto chiaro!!
Grazie dell'aiuto.
Ora la funzione è così :
*******inizio**********
Private Sub TipoContratto_Change()
Me!Descrizione = TipoContratto.Column(2)
          Select Case Me!TipoContratto.Column(1)
          Case "ANNUALE"
            Me!DataScadenza.Enabled = True
            Me!DataScadenza = DateAdd("yyyy", 1, Me!DataStipula)
          Case "MENSILE"
            Me!DataScadenza.Enabled = True
            Me!DataScadenza = DateAdd("m", 1, Me!DataStipula)
          Case "TRIMESTRALE"
            Me!DataScadenza.Enabled = True
            Me!DataScadenza = DateAdd("m", 3, Me!DataStipula)
          Case "SEMESTRALE"
            Me!DataScadenza.Visible = True
            Me!DataScadenza = DateAdd("m", 6, Me!DataStipula)
          Case "PREPAGATO A ORE"
            Me!DataScadenza.Enabled = False
          Case Else
          End Select
End Sub
********fine*******
Grazie grazie grazie......
Con simpatia.
Marco.

 superfluo.
Public Function xMM_Test()
   On Error GoTo erh
   Const c_sInterval = "m"
   Const c_dNumber = 1#
   Const c_sDTFormat = "Long Date"
   Const c_sYNFormat = "Yes/No"
   Dim tDate As Date
   Dim vDate As Variant
   tDate = DateSerial(Year:=2000, Month:=1, Day:=31)
   Debug.Print Format$(tDate, c_sDTFormat)
   Debug.Print _
       "<Data> è una data? " _
     ; Format$(IsDate(tDate), c_sYNFormat)
10 vDate = DateAdd(c_sInterval, c_dNumber, tDate)
   Debug.Print Format$(vDate, c_sDTFormat)
   vDate = Empty
   Debug.Print _
       "<"""" & Data & """"> è una data? " _
     ; Format$(IsDate("" & tDate & ""), c_sYNFormat)
20 vDate = DateAdd(c_sInterval, c_dNumber, "" & tDate & "")
   If IsDate(vDate) Then Debug.Print Format$(vDate, c_sDTFormat)
   vDate = Empty
   Debug.Print _
       "<"""""""" & Data & """"""""> è una data? " _
     ; Format$(IsDate("""" & tDate & """"), c_sYNFormat)
30 vDate = DateAdd(c_sInterval, c_dNumber, """" & tDate & """")
   If IsDate(vDate) Then Debug.Print Format$(vDate, c_sDTFormat)
   vDate = Empty
ext:
   Debug.Print
   Exit Function
erh:
   With err
     Debug.Print _
         "ERL#"; CStr(Erl); ";" _
       ; "ERR#"; CStr(.Number); ":" _
       ; .Description; "."
   End With
   Resume Next
End Function
OUTPUT:
lunedì 31 gennaio 2000
<Data> è una data? Sì
martedì 29 febbraio 2000
<"" & Data & ""> è una data? Sì
martedì 29 febbraio 2000
<"""" & Data & """"> è una data? No
ERL#30;ERR#13:Tipo non corrispondente.
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------