Newsgroup: it.comp.appl.access
Titolo: comando DATEADD su valore composto .....

Buonasera a tutto NG
Mi capita il seguente problema:
ho una tabella collegata in cui esiste un campo LDATE (impostato a testo)
che contiene una data in questo formato
20715  che corrisponderebbe al 15 del 07 del 02
mi ritrovo a dover calcolare in una query basata su questo campo codesta
data sottratta di sette giorni. Come posso fare??
Ho provato con:
data: DateAdd("g";-7;Date())
ed ho visto che è fattibile eseguirlo (infatti restituisce la data oddierna
sottratta di 7 giorni), quindi da qui ho costruito il resto:
data: DateAdd("g";-7;Right(LDATE;2) & "/" & Mid(LDATE;2;2) & "/0" &
Left(LDATE;1))
RISULTATO:
Errore, tipi di dati non corrispondenti nell'espressione criterio...
Come posso fare??  Sicuramente non mi viene riconosciuto tale dato
'costruito' come una DATA, mi consigliate qcosa??
Grazie
Tony

 ha scritto nel messaggio
news:Ctqk9.12703$Eu.2...@twister1.libero.it...

data:
=DateAdd("g";-7;DateSerial(Val(Left([LDATE];1));Val(Mid([LDATE];2;2));Val(Ri
ght([LDATE];2))))
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

....
Siccome l'espressione mi incuriosiva molto ( anche se non ho in mente
un campo di applicazione , ma non si sa mai ) l'ho provata.
Premetto che la prima di Marco non mi da cmq "tipo di dati non
corrispondenti", ma puň essere benissimo che i miei campi siano
impostati in modo diverso.
Ecco il malloppone:
Tabella1: ID ( contatore , PK ) mi serve a tener traccia dei record ,
LDATE (testo), LDATE1(numerico, formattato come "00000")
Dati di prova:
"ID"    "LDATE"    "LDATE1"
1        "20715"	20715
2        "10802"	10802
5	null	10912
6         "00912"	00912
7         "20512"	0
---------------------------
Query1 con l'espressione di Marco:
data: DateAdd("g";-7;Right(LDATE;2) & "/" & Mid(LDATE;2;2) & "/0" &
Left(LDATE;1))
 
data1: DateAdd("g";-7;Right(LDATE1;2) & "/" & Mid(LDATE1;2;2) & "/0" &
Left(LDATE1;1))
Risultato:
ID     "data"	   "data1"
1    08/07/2002    08/07/2002
2    26/07/2001    26/07/2001
5     errore            05/09/2001
6    05/09/2000    05/12/2009
7    05/05/2002    errore
-----------------------------
Query2 con l'espressione di Robč:
espr1:DateAdd("g";-7;DateSerial(Val(Left([LDATE];1));Val(Mid([LDATE];2;2));Val(Ri
ght([LDATE];2))))
espr2:DateAdd("g";-7;DateSerial(Val(Left([LDATE1];1));Val(Mid([LDATE1];2;2));Val(Ri
ght([LDATE1];2))))
risultato:
"ID"   "Espr1"	    "Espr2"
1    08/07/2002	  08/07/2002
2    26/07/2001	  26/07/2001
5     errore	  05/09/2001
6    05/09/2000	  05/12/2009
7    05/05/2002	  23/11/1999
---------------------------
Insomma sembra proprio, a una prima analisi, che sia il valore Null
nella prima epressione ( di Marco ) a mettere in crisi la query,
oltrettutto l'espressione da un risultato non coerente con lo "0"
davanti al campo LDATE1 (numerico ), nel caso dell'espressione di Robč
i problemi sono simili , tranne che per il valore Null sul campo
LDATE1 (numerico) che cmq non č corretto.
Come conclusione parziale direi che tale espressione si puň usare per
gli anni diversi dal 2000 ( non ho ancora provato per gli anni del
secolo scorso ) e non Null.
TUTTO da prendere con le pinze , perchč ancora non mi ci sono messo ,
ma sto aspettando il capo e mi andava di provare questa espressione.
Ciao. Fabrizio

 'costruito' come una DATA, mi consigliate qcosa??
Option Compare Text: Option Explicit
Public Function test()
  Dim sDate As String
  sDate = "20715"
  Debug.Print _
    DateSerial( _
          Left$(sDate, 1) _
        , Mid$(sDate, 2, 2) _
        , Right$(sDate, 2) _
        ) - 7
  Debug.Print _
    DateSerial( _
          Left$(sDate, 1) _
        , Mid$(sDate, 2, 2) _
        , Val(Right$(sDate, 2)) _
        - 7)
  Debug.Print _
      Eval( _
            "DateSerial(" _
          & Format$(sDate, "\0@\,@@\,@@") _
          & " - 7)")
  Debug.Print _
    DateAdd( _
          "d" _
        , -7 _
        , DateSerial( _
              Left$(sDate, 1) _
            , Mid$(sDate, 2, 2) _
            , Right$(sDate, 2)))
End Function
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

cut

Appena posso provo ... e si mi sono installato in questo 3d, mo' so'
cazzi ... non ho tempo ma devo provare , capire .... dannazione perchč
un giorno č fatto di sole 24 h ?
Ciao. Fabrizio

Un ringraziamento a tutti per le risposte,
attualmente ho addottato la prima soluzione di Roberto (grazie Roby), poiche
č la piů immediata e considerando che i dati da considerare sono solo
inerenti al post 2001 tutto dovrebbe funzionare senza problemi (almeno fino
al 2010 poi credo saranno di nuovo ca**i, ma magari nel frattempo ho
cambiato lavoro... ;)) )
Ciao e grazie ancora
Tony

cambiato lavoro... ;)) )
Se vuoi provare con un codice a sei cifre , per tenerti il posto di
lavoro un po' più a lungo  e arrivare tranquillamente alla pensione (
malgrado DateSerial abbia cmq delle limitazioni nell'intervallo di
tempo che accetta con Win98 o Win2000( guarda l'help )).
Impostando il campo come testo ( se lo imposti come numerico da dei
risultati strani , appena ho tempo provo a vedere dove sbaglio ):
Espr1:
DateAdd("g";-7;DateSerial(Val(Left([LDATE];2));Val(Mid([LDATE];3;2));Val(Right([LDATE];2))))
Come vedi ho tenuto l'espressione di Roberto modificando solo LEFT e
MID  . Il vero apporto che ho portato è stato verificare su quale tipo
di campo tale espressione funziona, per cui mi aggiungo a Marco per
ringraziare Roberto.
Ciao. Fabrizio

Ciao. Fabrizio
Ho provato il codice , naturalmente mi restituisce sempre 08/07/2002 ,
il che significa che tutte le espressioni sono corrette.
Ho voluto poi modificare le varie funzioni per accettare un codice a
sei cifre : per quelle che usano LEFT, MID e RIGHT mi sono limitato a
fare così:
Left$(sDate, 2)  , Mid$(sDate, 3, 2) , Right$(sDate, 2) 
Mi manca da comprendere ancora qlc , ma sto guardando .
Con la funzione Eval ho avuto qlc probelma in più , se infatti la
modificavo così:
Eval(  "DateSerial (" & Format$(sDate, "\@@\,@@\,@@") & " - 7)")
mi dava errore , invece così:
Eval( "DateSerial ("  & Format$(sDate, "@@\,@@\,@@") & " - 7)")
Tornava tutto a posto , evidentemente non l'ho ancora capita molto
bene questa funzione e me la studierò meglio.
Grazie Maurì
p.s. Ho particolarmente apprezzato Debug.Print : è stato un gesto
molto carino da parte tua portare il codice in un "campo amico" ,
grazie. 
(  " Adesso dagli pure un bacino"   
... non ti ci mettere anche tu Amanda con questa storia , già c'è Biso
che ha la fissa dei baci ...  
 " Ah Biso, quel caro ragazzo che mi ha risvegliato dal tuo inconscio
con i suoi bacini, come la bella addormentata" 
.... già proprio lui : che Dio l'abbia in gloria anche per questo .. )
Ciao. Fabrizio

cut
E' tutto chiaro , se ti dico dov'ero perplesso ... ma no č meglio non
sputtanarsi ulteriormente : oltre alle cozze nel cervello , ho da
togliermi una ton. di ruggine dal capino .
Ciao. Fabrizio

    Poi mi spiegate perche' continuate a preferire la formula con DateAdd e
DateSerial ( chiamata di *due* funzioni! ) invece della formula che usa solo
DateSerial !...


 bene questa funzione e me la studierò meglio.
    Non e' Eval che devi "capire" ma Format. ;-)


DateSerial !...
Perchč prima avevo provato la soluzione di Robč , rompiballe. ;-)
Espr1:
DateSerial(Val(Left([LDATE];2));Val(Mid([LDATE];3;2));Val(Right([LDATE];2)))-7
Ciao. Fabrizio

    Non e' Eval che devi "capire" ma Format. ;-)
Si si hai ragione , ho una capacità di sintesi diabolica :  devo
capire bene a cosa serve Eval ( serve a restituire l'espressione , e
va bene , ma dove usarla e quando ?) ,  voglio capire meglio come hai
messo quel DateSerial ( perche '&' ?  e perchè senza mi da errore di
sintassi ?)e perchè Format fa così con '\' : sto facendo delle prove ,
aiutandomi con la guida in linea ( sta' troia!! , ci faccio su un bel
post OT un giorno così vi raconto le mie dissavventure)
Non mi dire nulla , se proprio non ce la faccio ti chiedo altri
riferimenti IO, grazie Maurì
Ciao. Fabrizio

 Ciao. Fabrizio
Ottima la questa soluzione senza dateadd...
Il problema delle 5 cifre purtroppo però permane e permarrà a inoltranza,
trattandosi di dato proveniente da una tabella collegata ad AS/400.. e di
cui oltre a non avere autorizzazioni per modificarne la struttura, non oso
pensare a cosa incapperei dovendoci invece riuscire..
Morale, se il lavoro ce l'ho assicurato per altri 8 anni, non vedo perche
devo farmi licenziare domani...!!
1K Tanks ancora
Tony

 devo farmi licenziare domani...!!
    Scusa ma non capisco cosa intendi dire.
    Per caso stai dicendo che *non puoi usare* la formula con la sola
DateSerial a causa del fatto che la tua stringa e' di 5 caratteri invece che
6? Se e' cosi' allora sperimenta con:
DateSerial(Left$([LDATE];1);Mid$([LDATE];2;2);Right$([LDATE];2))-7
e, visto che ci sei, rileggi tutto il 3d ed esercitati con il tasto F1.
    Se invece ho capito male, scusami tanto. :-)


 ha scritto nel messaggio
news:an3ovh$al6e3$1...@ID-52090.news.dfncis.de...

Mi riferivo ad un post di Fabbrizio il quale mi consigliava di utilizzare un
formato a 6 cifre..
Bye e tank's ancor
Tony

Tony
.
Ciao. Fabrizio

Tony
Perdonalo , la vecchiaia ..... cmq si č scusato: bisogna prenderlo
cosě oppure arrangiarsi. :-)
Ciao. Fabrizio

 Ciao. Fabrizio
Cordialmente ringraziamenti a tutti
Ciao,  Tony

cut
Non capisco però perchè rischi tu che cerchi di mettere un po' di
ordine e non "loro" che hann fatto casino , misteri della fede 2 ? 
Ciao. Fabrizio