Newsgroup: it.comp.appl.access
Titolo: convertire una stringa di testo in data (per Federico Luciani)

 > Federico
[cut]
se il formato e' cosi' "20200", cioe' "gmmaa", potresti aggiungere un
controllo
sulla lunghezza della stringa e aggiungere uno zero iniziale.
.....
strData = rst![campoDataVecchia]
if len(strData) = 5 then strData = "0" & strData
g = mid(strData,1,2)
m = mid(strData,3,2)
a = mid(strData,5,2)
rst![campoDataNuova] = format(DateSerial(a, m, g), "dd/mm/yyyy")
...
riguardo all'errore, mi mancano informazioni per poterti dire qualcosa,
magari
posta il codice che hai scritto e dimmi dove viene generato l'errore.
--
Federico
ebbene, per fare una prova, ho creato una tabella con due campi: "vecchia" e
"nuova" entrambi string
quindi in una form un bottone al quale nell'evento su click è associato
questo codice:
Private Sub Comando0_Click()
Dim archivi As Database
Dim tabe As Recordset
Dim vecchia As String
Dim nuova As String, g As String, m As String, a As String
Set archivi = DBEngine.Workspaces(0).Databases(0)
Set tabe = archivi.OpenRecordset("tabella1", dbOpenTable)
tabe.MoveFirst
Do While Not tabe.EOF
tabe.Edit
tabe("nuova") = tabe("vecchia")
If Len(tabe("nuova")) = 5 Then tabe("nuova") = "0" & nuova
g = Mid("nuova", 1, 2)
m = Mid("nuova", 3, 2)
a = Mid("nuova", 5, 2)
nuova = Format(DateSerial(a, m, g), "dd/mm/yyyy")
Loop
End Sub
provando ad eseguirlo mi da il seguente errore:
Errore di run time n, 13 tipo cono corrispondente
eseguendo il debug la riga incriminata è
nuova = Format(DateSerial(a, m, g), "dd/mm/yyyy")
Saresti così gentile da indicarmi dove ho sbagliato ad interpretare le tue
istruzioni?
Ti ringrazio calorosamente.
Antonio

 nuova = Format(DateSerial(a, m, g), "dd/mm/yyyy")
Che faccio Federico... rispondo o non rispondo? :-)))
Mah sì... rispondo.
Ciao Antonio,
se avessi guardato sull'help in linea, avresti notato che dice testualmente:
year Obbligatoria; Integer. Numero compreso tra 100 e 9999 inclusi, oppure
un'espressione numerica.
month Obbligatoria; Integer. Qualsiasi espressione numerica.
day Obbligatoria; Integer. Qualsiasi espressione numerica.
Come vedi parla sempre di numeri o di espressioni numeriche, non di testo.
Quindi prova con:
nuova = Format(DateSerial(Val(a), Val(m), Val(g)), "dd/mm/yyyy")
oppure dimensioni le variabili a, m, g come interi e modifichi così
g = Val(Mid("nuova", 1, 2))
m = Val(Mid("nuova", 3, 2))
a = Val(Mid("nuova", 5, 2))
nuova = Format(DateSerial(a, m, g), "dd/mm/yyyy")
Inoltre, guardando anche il resto della routine che hai postato, non ho
capito se nel campo [nuova] vuoi mettere la data (in formato data) presente
nel campo [vecchia].
Se fosse così, modificherei il tutto in:
    Private Sub Comando0_Click()
    Dim archivi As Database
    Dim tabe As Recordset
    Dim vecchia as String, g As Integer, m As Integer, a As Integer
    Set archivi = DBEngine.Workspaces(0).Databases(0)
    Set tabe = archivi.OpenRecordset("tabella1", dbOpenTable)
    tabe.MoveFirst
    Do While Not tabe.EOF
        tabe.Edit
        vecchia = tabe("vecchia")
        If Len(vecchia) = 5 Then vecchia = "0" & vecchia
        g = Val(Mid(vecchia, 1, 2))
        m = Val(Mid(vecchia, 3, 2))
        a = Val(Mid(vecchia, 5, 2))
        tabe("nuova") = Format(DateSerial(a, m, g), "dd/mm/yyyy")
        tabe.Update
    Loop
    End Sub
Cioé:
- la data (in formato data) la inserivi in una variabile testo;
- non riportavi il valore nel campo [nuova];
- non salvavi il contenuto del buffer di transito (metodo Update).
Naturalmente controlla perché sono andato a braccio, senza provarla.
--
Silvio
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access

 [cut]
Perfetto ;-)
solo una cosa per quanto riguarda i 'numeri'.
Mid restituisce un variant, quindi, generalmente non uso Val per le
conversioni, ma naturalmente
le variabili bisogna dichiararle correttamente:
Dim g As integer, m As integer, a As integer
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------

[cut]
i ringraziamenti non sono mai abbastanza...
siete speciali
grazie
Antonio