03/04/2026 - lele2006 ha scritto:
02/04/2026 - Pensionato ha scritto:
In seguito mi dovrò scontrare con i report
Piano piano, c'è la faremo. Tienici aggiornati.
Non so se è corretto continuare sullo stesso thread ma volevo rimanere nella storia.
Continuando a studiare la conversione del codice da Access a VB(poi vedremo C#), sono incappato sulla gestione date.
Nelle tabelle Access sono presenti campi di tipo data. Per rappresentarli e aggiornarli ho scelto di usare il DateTimePicker.
Al momento sono alle prese con la scheda anagrafica delle persone trattate nel db.
Nel record sono presenti alcuni campi di tipo data che oltre all'assegnazione agli elementi della maschera valorizzano delle stringhe usate per il controllo delle modifiche.
Le stringhe copie dei campi della maschera vengono usate per determinare se i campi vengono modificati rispetto a quelli presenti nel db. Esiste un metodo più veloce e sicuro per avere lo stesso tipo di controllo?
Tornando all'acquisizione del dato, i campi DateTimePicker sono impostati con un formato Custom nullo per non visualizzare nessuna data se non presente sul db. Al momento di inserire una data si modifica il formato.
il codice che legge e visualizza è il seguente(è presente solo un campo data)
Using sqlConnessione As New OleDbConnection(Comuni.strConnect)
sqlConnessione.Open()
Using CommandSql As New OleDbCommand(strQuery, sqlConnessione)
Dim DataRead As OleDbDataReader = CommandSql.ExecuteReader()
If DataRead.Read() Then
If DataRead("DataScadDoc").ToString() <> "" Then
dtpAPScadDoc.Format = DateTimePickerFormat.Short
'------------------------------------------------------- primo tentativo
wAPScadDoc = DataRead("DataScadDoc").ToString()
'------------------------------------------------------- secondo tentativo
wAPScadDoc = DataRead("DataScadDoc").ToString("dd/mm/yyyy")
'------------------------------------------------------- terzo tentativo
Dim ScadDoc As DateTime = CType(DataRead("DataScadDoc"), DateTime)
wAPScadDoc = ScadDoc.ToString("dd/mm/yyyy")
'wAPScadDoc = Convert.ToDateTime(DataRead("DataScadDoc")).ToString("dd/mm/yyyy")
dtpAPScadDoc.Text = DataRead("DataScadDoc").ToString
Else
wAPScadDoc = dtpAPScadDoc.Text
End If
Dim Variato As Boolean = False
End If
End Using
End Using
dtpAPScadDoc è il campo della maschera che assume il valore corretto con il formato "dd/mm/yyyy"
wAPScadDoc è di tipo stringa(copia del valore iniziale acquisito dal db)
ScadDoc è di tipo Date
Primo tentativo
wAPScadDoc = DataRead("DataScadDoc").ToString()
restituisce la data esatta con il formato "dd/mm/yyyy hh:mm:ss".
Secondo tentativo
wAPScadDoc = DataRead("DataScadDoc").ToString("dd/mm/yyyy")
genera l'eccezione

Terzo tentativo
Dim ScadDoc As DateTime = CType(DataRead("DataScadDoc"), DateTime)
wAPScadDoc = ScadDoc.ToString("dd/mm/yyyy")
il formato della data è esatto, ma al posto del mese compare sempre "00" con qualsiasi formato("mm/dd/yyyy","yyyy/mm/dd")
Esiste sicuramente la soluzione, spero