Gestione campi data

  1. last week

    Nedi F

    Dec 5 Europe (Italy, Bologna)

    Ciao a tutti! Ho ancora bisogno di voi per un problema che non riesco a capire e a risolvere.
    Ho una tabella SQL Server con un campo DateTime. Ho una classe con una proprietà "DataFrom" di tipo Date.
    Ho queste semplici righe di codice:
    Dim d As New Date
    classe.DataFrom = d

    e, in un metodo "Save" eseguo un INSERT con uno statement SQL usando la proprietà classe.DataFrom

    Dal debug risulta tutto corretto: lo statement SQL riporta correttamente il valore da inserire nel campo data '2017-12-05 ......'
    Vado a vedere il record inserito e trovo la data '2017-05-12 ...' (nel formato americano).

    Non so come fare per risolvere la questione: qualcuno mi può aiutare?

    Grazie mille.

    Nedi

    Dopo una lunga ricerca ho risolto il problema: nello statement SQL bisogna convertire la data da inserire nel formato italiano.
    In pratica occorre prima predisporre una stringa con la data nel formato "yyyymmdd", dopo di che la si inserisce con CONVERT(DATETIME, 'data', 105)

    Sperando che possa servire a qualcuno...

  2. Nedi F

    Dec 6 Answer Europe (Italy, Bologna)

    Dopo una lunga ricerca ho risolto il problema: nello statement SQL bisogna convertire la data da inserire nel formato italiano.
    In pratica occorre prima predisporre una stringa con la data nel formato "yyyymmdd", dopo di che la si inserisce con CONVERT(DATETIME, 'data', 105)

    Sperando che possa servire a qualcuno...

  3. Antonio R

    Dec 7 Pre-Release Testers, Xojo Pro Europe (Italy)

    No, non farlo.

    Il formato yyyy-mm-dd è il formato data sql (così non ci sono problemi di interpretazione)
    La lettura la puoi fare con CONVERT (per averla in italiano) o meglio ancora la fai fare a Xojo leggendo la data con:
    dim dataNuova as Xojo.Core.Date=Xojo.Core.Date.fromText('...la data nel formato yyyy-mm-dd')
    e poi mostrandola come preferisci usando i parametri di toText

    O con l'oggetto date del vecchio framework
    dim d as new date
    d.sqlDate="... la data nel formato yyyy-mm-dd"
    e poi usi i vari metodi per mostrarla

    Non confondere mai come viene mostrato un dato con come viene visualizzato.
    Ad esempio salvandole in SQLite come yyyy-mm-dd hai dopo a disposizione una marea di funzioni per le query che altrimenti non potrebbero lavorare.

  4. Nedi F

    Dec 7 Europe (Italy, Bologna)

    Ciao Antonio, grazie per la risposta. Il mio problema non è la lettura dei campi data, ma la scrittura su SQL Server: senza la funzione CONVERT il formato delle date scritte sui record è sempre yyyy-dd-mm. Se il giorno è un valore compreso tra 1 e 12 il record viene scritto nel formato yyyy-dd-mm; ma se il giorno supera 12 il programma va in errore.
    L'unico sistema che sono riuscito a trovare è eseguire INSERT/UPDATE con statements SQL usando la funzione CONVERT: se conosci altri sistemi sarò ben lieto di adottarli.
    Tempo fa mi accennavi qualcosa in merito alla licenza di Xojo (sto ancora utilizzando il vecchio RealBasic 2012): è giunto il momento per me di passare a Xojo 2017r3, che mi sembra, a prima vista, molto veloce e stabile.
    Grazie ancora.
    Nedi

  5. Antonio R

    Dec 7 Pre-Release Testers, Xojo Pro Europe (Italy)

    Il formato standard è SQLDate ovvero YYYY-MM-DD
    Controllerei i parametri del db.
    In ogni caso puoi provare con YYYYMMDD => ovvero sqlDate.replaceAll("-", "")

    o anche utilizzando la convert migliore: CONVERT(DATETIME, 'data', 120)

    Per la licenza ti scrivo in privato domani

  6. Nedi F

    Dec 7 Europe (Italy, Bologna)

    Grazie Antonio!

or Sign Up to reply!