Autore Topic: [risolto] sqlite formato data  (Letto 5191 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
[risolto] sqlite formato data
« il: 23 Dicembre 2009, 20:20:12 »
ciao raga

mi sono impantanato con sqlite e le date.
per semplificare creo il campo data come testo e finora funzionava, ora devo fare delle query fra date e cominciano le rogne.

come faccio a far cercare la query fra la data 07/25/2003 e la data 05/21/2009 ?

mi conviene cambiare il formato del campo? e se si in quale formato? avevo anche pensato di creare un campo numerico e prima di salvare le date convertirle in seriali.

sicuramente qualcuno di voi ci è già passato su questo problema, mi suggerite la soluzione migliore?

Offline claudio

  • Gambero
  • **
  • Post: 57
    • Mostra profilo
Re: sqlite formato data
« Risposta #1 il: 23 Dicembre 2009, 21:16:27 »
Fai in questo modo:

1) Sul database il campo deve essere di tipo date.

2) Il record si salva in questo modo (DataOp è il campo con la data):
    strSQL = "INSERT INTO Operazioni (DataOp)"
    strSQL = strSQL & " VALUES('"
    strSQL = strSQL & Format(DataOpValueBox.Value, "yyyy-mm-dd") & "')"

3) Per la query:
    strSQL = "SELECT Operazioni.DataOp FROM Operazioni "
    strSQL = strSQL & "WHERE Operazioni.DataOp >= '
    strSQL = strSQL & Format(ME.ValueBoxInizio.Value, "yyyy-mm-dd") & "' "
    strSQL = strSQL & "AND Operazioni.DataOp <= '"
    strSQL = strSQL & Format(ME.ValueBoxFine.Value, "yyyy-mm-dd") & "'"

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: sqlite formato data
« Risposta #2 il: 23 Dicembre 2009, 22:37:25 »
Scusa la domanda, la query funziona anche se inizio/fine sono in un textbox invece di valuebox?

Offline claudio

  • Gambero
  • **
  • Post: 57
    • Mostra profilo
Re: sqlite formato data
« Risposta #3 il: 23 Dicembre 2009, 23:02:05 »
Puoi anche utilizzare una textbox, però devi controllare che sia una data valida prima di passarla alla query, e poi la devi formattare nel formato anno-mese-giorno  yyyy-mm-dd
Uso la valuebox perchè mi restituisce sempre una data valida.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: sqlite formato data
« Risposta #4 il: 24 Dicembre 2009, 00:03:03 »
@ cbsoft

[OT]

Non so se ne sei a conoscenza ma la struttura dell'operatore

strsql = strsql & stringa_generica

può essere sostituito con
strsql &= stringa_generica...

;-)

[/OT]

Offline claudio

  • Gambero
  • **
  • Post: 57
    • Mostra profilo
Re: sqlite formato data
« Risposta #5 il: 24 Dicembre 2009, 09:53:50 »
@ Ceskho
Hai ragione, solo che quando scrivo di getto mi escono in stile vb6, poi rileggo e correggo tutto.

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: sqlite formato data
« Risposta #6 il: 24 Dicembre 2009, 23:06:43 »
@cbsoft

Codice: [Seleziona]
strSQL = strSQL & Format(DataOpValueBox.Value, "yyyy-mm-dd") & "')" 


su sqlite ho notato che il formato delle date è "mm/dd/yyyy" questo formato viene passato al database direttamente dalla valuebox.

inoltre io creo il database da codice in questo modo:

Codice: [Seleziona]
sql = "CREATE TABLE 'ddt' ( 'idddt' INTEGER PRIMARY KEY," &
          "'numero' VARCHAR(10) DEFAULT NULL," &
          "'data' VARCHAR(15) DEFAULT NULL," &
          "'utente' VARCHAR(55) DEFAULT NULL," & ecc..


nel campo data invece di varchar devo inserire date?

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: sqlite formato data
« Risposta #7 il: 25 Dicembre 2009, 02:55:46 »
Per una questione di "comodità" conviene trattare le date come semplici stringhe in modo da poterle leggere, scrivere ed editare con più facilità....questo è un mio consiglio e pare che non sia l'unico a fare così....

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: sqlite formato data
« Risposta #8 il: 25 Dicembre 2009, 03:17:19 »
Citazione

Ceskho ha scritto:
Per una questione di "comodità" conviene trattare le date come semplici stringhe in modo da poterle leggere, scrivere ed editare con più facilità....questo è un mio consiglio e pare che non sia l'unico a fare così....


era quello che facevo prima, ora il problema è nato quando devo fare una query in periodi specifici.

ho seguito il consiglio di  cbsoft e mi si è presentato un nuovo e strano problema, se inserisco una nuova data tutto funzionam, ma se cerco di modificare la data inserita và in errore, non riesco a capire che succede.

allego il codice

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: sqlite formato data
« Risposta #9 il: 25 Dicembre 2009, 09:41:26 »
direi che l'errore risiede nel codice di modifica del record :
Codice: [Seleziona]
MyRS = MyConn.edit("provadate")


non hai indicato il record da modificare :

Codice: [Seleziona]
MyRS = MyConn.edit("provadate","iddate=" & indice_del_valore_da _modificare)


ho visto che per inserire i dati usi una query , sevuoi modificarli anche con una queri puoi usare:

Codice: [Seleziona]
sqls = "UPDATE provadate SET data=" & (Format(ValueBox1.Value, "yyyy-mm-dd")) & " WHERE iddate=" & indice_valore_da_variare 

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: sqlite formato data
« Risposta #10 il: 25 Dicembre 2009, 11:00:06 »
@ fsurfing

ho modificato come hai detto, ma niente da fare, con la modifica della query salva i dati ma con una data stramba.

penso che il problema sia la valuebox, non so il perchè, ma quando la data si digita da tastiera (nuova), funziona, quando la data viene letta prima dal database e poi modificata (modifica) va in tilt.

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: sqlite formato data
« Risposta #11 il: 26 Dicembre 2009, 21:27:26 »
raga ho risolto

ho cambiato il campo in numeric e converto le date in seriali prima di salvarle.

Offline claudio

  • Gambero
  • **
  • Post: 57
    • Mostra profilo
Re: [risolto] sqlite formato data
« Risposta #12 il: 27 Dicembre 2009, 14:14:24 »
@ desadex
Il codice di esempio che ho postato lo ho utilizzato su un database sqlite3, mentre mi pare che tu utilizzi sqlite2.

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto] sqlite formato data
« Risposta #13 il: 27 Dicembre 2009, 20:59:27 »
@cbsof
no, utilizzo sqlite3, ne sono ultrasicuro.

secondo me è un problema delle valuebox, ho fatto altri test su nuovi programmi con sqlite e valuebox, stranamente le valuebox quando ricevono i dati dal database li leggono bene ma li trasmettono male.

ti faccio un esempio entrambi con il format:
dati nuovi immessi da tastiera e mandati a sqlite mm/dd/yyyy
dati letti dal database e mandati a sqlite yyyy

secondo caso:

dati nuovi immessi da tastiera e mandati a sqlite mm/dd/yyyy (con il format)
dati letti dal database e mandati a sqlite yyyy/mm/dd 00:00:00 (senza format)

nel secondo caso funzionava ma mi aggiungeva il tempo e questo mi incasinava le query fra i campi immessi la prima volta e quelli modificati

non ho provato con le textbox in quanto nel mio progetto devo per forza usare le valuebox.

se hai news in proposito tienimi aggiornato

by e grazie per l'interessamento

Offline claudio

  • Gambero
  • **
  • Post: 57
    • Mostra profilo
Re: [risolto] sqlite formato data
« Risposta #14 il: 27 Dicembre 2009, 23:33:18 »
@ desadex
ho provato l'esempio che hai allegato e subito mi ha dato il messaggio di errore:
componente gb.db.sqlite2 non trovato.

Nella sezione progetti in corso di aiuto, ho allegato il sorgente della versione definitiva del mio software "Primanota contabile" in cui gestisco le date con la valuebox in formate date, e ci sono anche le query per ricercare le date incluse in un intervallo temporale.

Ho utilizzato sqlite3 e gambas 2.16, e nel sorgente ho incluso anche il database.