Newsgroup: it.comp.appl.access
Titolo: Query aggiornamento data

Ciao a tutti,
ho un campo data in tabella che probabilmente in seguito ad una
conversione del formato del campo contiene date di nascita degli utenti
maggiori della data attuale(il che è impossibile ovviamente!)
Gli utenti sono molti,dovrei quindi trasformare una data 01/01/2020 in
01/01/1920
Esiste un modo con la query di aggiornamento?
il criterio sarebbe >=01/01/2000 se non sbaglio,ma nella sezione
"aggiorna a" cosa devo inserire?
Grazie mille

 ha scritto nel messaggio 
news:1169124133.7...@l53g2000cwa.googlegroups.com...

Grazie mille
A mio avviso è meglio costruirsi una funzione pubblica da passare poi alla 
query di aggiornamento.
Per esempio:
In un modulo pubblico:
Public Function CambiaData(UnaData As Date) As Date
CambiaData = Mid(UnaData, 1, 6) & "19" & Mid(UnaData, 9, 2)
End Function
La query di aggiornamento diventa, ad esempio (ricorda di cambiare i nomi di 
tabella e campo):
UPDATE Prova SET Prova.Data = CambiaData([DATA])
WHERE (((Year([Data]))>2000));
Oppure:
UPDATE Prova SET Prova.Data = CambiaData([DATA])
WHERE (((Prova.Data)>#1/1/2000#));
Ciao, Carlo

Grazie per l'aiuto Carlo,
posso rubarti altri 5 minuti della tua competenza per capire come
funziona logicamente quello che mi hai suggerito?
Cosi la prossima volta so come modificarla
Più che altro la parte del modulo che non conosco molto,per la query
ok!!
Grazie ancora
Carlo Costarella ha scritto:


Non fa niente ho capito,
mi sono un pò documentato,non conoscevo la funzione mid() e anche
senza usare il modulo si può risolvere cosi con una query di
aggiornamento (ovviamente con nomi dei campi adattati alle mie
esigenze):
UPDATE [Tab Principale] SET [Tab Principale].[Data NASCITA] = Mid([data
nascita],1,6) & "19" & Mid([data nascita],9,2)
WHERE ((([Tab Principale].[Data NASCITA])>=#1/1/1900#));
un saluto a tutti

 ha scritto nel messaggio 
news:1169131856.1...@a75g2000cwd.googlegroups.com...
Grazie per l'aiuto Carlo,
posso rubarti altri 5 minuti della tua competenza per capire come
funziona logicamente quello che mi hai suggerito?
Cosi la prossima volta so come modificarla
Più che altro la parte del modulo che non conosco molto,per la query
ok!!
Grazie ancora
Ciao Bizio,
ti ricordo di scrivere dopo la risposta e non in testa come hai fatto ora.
Volentieri ti spiego la funzione.
La riscrivo:
Public Function CambiaData(UnaData As Date) As Date
CambiaData = Mid(UnaData, 1, 6) & "19" & Mid(UnaData, 9, 2)
End Function
Innanzi tutto si tratta di una funzione pubblica in un modulo pubblico, 
richiamabile quindi da tutto il db. La funzione obbliga l'utilizzatore a 
passargli un valore di tipo data (UnaData as Date) e restituisce "as" una 
data.
Brevissima disgressione: le funzioni si differenziano dalle Sub perchè 
restituiscono un valore.
La funzione MID restituisce un valore variant di tipo stringa e richiede che 
gli si dica quale è la stringa da esaminare, da dove deve iniziare a leggere 
(da quale carattere) e quanto lunga deve essere la stringa restituita. 
Tipicamente:
Mid(StringaDaleggere,InizioLettura,LunghezzaLettura).
Nella funzione gli abbiamo detto di restituire dal primo al sesto carattere 
della "stringa" (in questo caso la data la tratta come una stringa) UnaData. 
Se UnaData era per esempio 01/12/2004 restituiva 01/12/ (sei caratteri). A 
questo punto tu volevi che il 20 di 2020 venisse cambiato in 19, dunque con 
& "19", aggiungo alla stringa restituita da MID anche la stringa 19. Ora la 
stringa restituita fino a questo punto è 01/12/19, ma non basta perchè avevi 
anche bisogno delle ultime due cifre dell'anno.
Riecco che ci viene in soccorso la funzione MID. Infatti Mid(UnaData, 9, 2) 
restituisce proprio, a partire dal carattere 9, le due cifre finali di 
UnaData.
Usando la funzione nella query, questa, la funzione, sarà richiamata da ogni 
singolo record processato, e la query gli passarà (gli dara in pasto) alla 
funzione stessa il campo "data".
Per l'uso delle funzioni, delle sub o di MID puoi tranquillamente leggere ed 
approfondire dalla guida in linea dei moduli.
Ciao, Carlo 

 ha scritto nel messaggio 
news:1169133090....@v45g2000cwv.googlegroups.com...
Non fa niente ho capito,
------------------------
ti avevo già risposto....
mi sono un pò documentato,non conoscevo la funzione mid() e anche
senza usare il modulo si può risolvere cosi con una query di
aggiornamento (ovviamente con nomi dei campi adattati alle mie
esigenze):
------------------------------
Sì è vero si può fare anche così ed era così che stavo per risponderti. C'è 
però un problema quando distribuisci il db: se un riferimento dovesse essere 
mancante, saltano tutte le funzioni incorporate come per esempio Mid() e la 
query non funzionerebbe. Con la funzione non avresti problemi che, come 
vedi, ricalca esattamente la sintassi che hai usato nella query. E poi vuoi 
mettere saper usare il codice?.......
un saluto a tutti
Anche a te,
Carlo

Carlo Costarella ha scritto:

Grazie Carlo,
ovviamente grazie per l'aiuto e la spiegazione,ora ho le idee più
chiare sicuramente!!
Ho capito il problema di cui mi parlavi nel caso avessi dovuto
distribuire il db.
A tal riguardo puoi dirmi qual'è il riferimento di cui mi parlavi?
E' per caso, Microsoft DAO 3.6 Object Library?
E' lì che risiedono le funzioni?
Scontato dirti che sei stato molto gentile ma te lo dico lo stesso e ti
ringrazio ancora
Ciao Fabrizio

 ha scritto nel messaggio 
news:1169137845.7...@v45g2000cwv.googlegroups.com...
Carlo Costarella ha scritto:


------------------------------
No la libreria è VBA332.DLL (Visual Basic For Applications) che non può 
essere rimossa.
Il problema non è la libreria che contiene la funzione Mid() o Mid$() ma un 
qualsiasi riferimento mancante (come Microsoft DAO 3.6 Object Library), 
anche di quelli che aggiungi come comdlg32.ocx, comctl32.ocx e qualsiasi 
altra libreria, se manca ed esegui la query ti darà l'errore su Mid() 
funzione non trovata...o su qualsiasi altra funzione incorporata nella 
libreria di sistema (non nel riferimento mancante).
Questo comportamento di Access, nel riferire l'errore al mancato 
riconoscimento di una funzione interna al sistema al posto della vera causa 
del problema, è, credo, un bug.
Ciao, Carlo