Autore Topic: Uso del filtro nelle query  (Letto 5021 volte)

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Uso del filtro nelle query
« il: 15 Febbraio 2008, 06:09:53 »
Devo fare una query parametrica che estragga solo alcuni record ma non trovo la sintassi da usare per le date. Esempio banale:

Codice: [Seleziona]
dim miasql as string
miasql="SELECT * FROM nometabella WHERE campodata='12/02/08'"


in questo formato la query mi da' errore

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Uso del filtro nelle query
« Risposta #1 il: 15 Febbraio 2008, 14:46:56 »
I parametri delle query ai metodi EXEC, FIND, ecc.. degli oggetti CONNECTION non vanno mai passati tal quali nella query stessa ma vanno usati sempre gli argomenti.

Così la tua query deve diventare:
Codice: [Seleziona]

DIM Connessione as NEW CONNECTION
DIM Risultato AS RESULT

  Connessione.Name = ....
  Connessione.Type = ....
  Connessione.OPEN
  Risultato = Connessione.Find ("SELECT * FROM nometabella WHERE campodata= &1", DataOperazione)
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Uso del filtro nelle query
« Risposta #2 il: 15 Febbraio 2008, 16:55:05 »
E comunque, il formato dipende dal database che si stà usando, tra quelli previsti dal motore o, a volte dalla configurazione del server (vedi per Oracle e PostgreSQL).

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Uso del filtro nelle query
« Risposta #3 il: 15 Febbraio 2008, 17:49:46 »
infatti....in access ad esempio le date nelle query parametriche sono inserite tra cancelletti...#mm/dd/aaaa#....provate ad aprire il database di gambas e ad inserire una sql da linea di testo con una data...tipo il mio esempio..volevo cche qualcuno riuscisse ad estrarre il recordset

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Uso del filtro nelle query
« Risposta #4 il: 15 Febbraio 2008, 18:15:02 »
Le date sono un tipo di.... dato ostico da trattare in Gambas. Se non si usano i metodi con i parametri non si ottengono mai i risultati sperati.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Uso del filtro nelle query
« Risposta #5 il: 15 Febbraio 2008, 18:34:21 »
proviamo a vedere no? un bel db da creare direttamnte con il database di gambas, una tabella con un campo data e una query...io non riesco ad estrarre, secondo me c'è una sintassi. se non riusciamo chiedo direttamente attraverso la mailing list di gambas

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Uso del filtro nelle query
« Risposta #6 il: 15 Febbraio 2008, 20:05:06 »
SELECT * FROM nometabella WHERE campodata = '2007-09-23'

Funziona, l'ho provata nel mio DB Mysql.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Uso del filtro nelle query
« Risposta #7 il: 15 Febbraio 2008, 20:18:31 »
con sqlite non va

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Uso del filtro nelle query
« Risposta #8 il: 15 Febbraio 2008, 20:30:27 »
tempo fa realizzando un programma di fatturazione per la mia ditta mi sono imbattuto nello stesso problema ,
io lo risolto in modo molto brutale ....
il campo del tatabase lo inditato come stringa è ho trattato la data come tale.
certo non è molto elegante

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Uso del filtro nelle query
« Risposta #9 il: 15 Febbraio 2008, 20:41:47 »
Con la sintassi che vi ho dato funziona benissimo.
Basta usare i parametri nelle query Sql al posto dei valori nudi e crudi.

Il DB del mio gestionale contiene anche date e lo gestisco senza problemi.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Uso del filtro nelle query
« Risposta #10 il: 15 Febbraio 2008, 20:49:14 »
attenzione...trovata l'alchimia: e funziona

Codice: [Seleziona]
SELECT campodata FROM nometabella WHERE datetime(campodata) = '2008-02-15 00:00:00'


io per abitudine preferisco costruire la stringa sql e poi mandarla in pasto alla conenssione

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Uso del filtro nelle query
« Risposta #11 il: 17 Febbraio 2008, 10:54:59 »
Ho letto in ritardo i vostri post, e purtroppo sono arrivato tardi a dare una mano.
A questo punto, scrivo solo una nota a livello generale.
Le date negli rdbms sono, come ha giustamente scritto il webmaster, un tipo di dato molto ostico; in realtà il valore ciene memorizzato in formato binario, e tradotto a livello leggibile tramite algoritmi. Il formato di traduzione, però, è di norma, nello standard, in formato inverso ovvero 'YYYY-MM-DD', il fatto poi che un'applicazione client lo visualizzi in formato diverso dipende dall'impostazione che gli viene data.
E' da ricordare che, nei dbms relazionali di oggi, una data viene sempre memorizzata in un formato contenente anche le informazioni orarie 'HH:MM:SS.CCC'.
In oracle, per fare un esempio, esiste un solo tipo: date, che è un tipo particolare che contiene tutto di una data, e deve essere trattato come tale, dall'altra parte postgresql gestisce ulteriori particolarità sul tipo 'data' di base, dando la possibilità di esclusione della parte oraria; queste opzioni però non sono altro che trattamenti particolari che lavorano comunque su data intera.
Come ha scritto leo, probabilmente sqlite non rispetta integralmente questo standard; infatti, dopo una letta veloce alla doc, sono arrivato a capire che sqlite tratta tutto (numeri stringhe e date) in un tipo unico: testo.
L'unica cosa che non sò' è se poi sqlite agisce in qualche modo, tramite appositi algoritmi, a eseguire qualche trasformazione durante l'estrazione di un dato.
Secondo me, in sqlite, forse potrebbe essere conveniente trattare le date proprio come stringhe, come suggerito da fsurfing, anche non elegante, potrebbe ovviare alle mancanze di sqlite.

Scusate per l'intervento in ritardo... :-(

Bye

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Uso del filtro nelle query
« Risposta #12 il: 17 Febbraio 2008, 11:19:16 »
ciao, nel formato che ho postato funziona benissimo. Quando creo la sql tratto la data come una stringa, utilizzando quel formato.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Uso del filtro nelle query
« Risposta #13 il: 17 Febbraio 2008, 11:44:45 »
Ciao andy, vedo che anche tu la domenica... insomma matto come me... (senza offessa ovviamente :-) ).

Sì, il formato che hai trovato è giusto, se lo provi con altri db (es. MySQL e PostgreSQL) funziona.

Buona domenica!!!

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Uso del filtro nelle query
« Risposta #14 il: 17 Febbraio 2008, 14:28:28 »
In effetti sto realizzando un software misto (nutrizionale+gestione attività sportiva) e quindi mi sono imbattuto nel problema. In particolare mi fa piacere mettere a disposizione di tutti gli amici questo codice:
Codice: [Seleziona]
PUBLIC Currdate as String

PUBLIC SUB DateChooser1_Change()
  '============================================
  'Info: formatta la data corrente nel modo
  '      corretto per essere inserita nella
  '      query di lettura dei dati.
  '      Es. di formato accettato:
  '      2008-02-12 00:00:00
  '============================================
Currdate = Str(Year(DateChooser1.Value)) & "- "
Currdate=Currdate & "Format$(Month(DateChooser1.Value), "0#") & "- "
Currdate=Currdate & Str$(Day(DateChooser1.Value)) & " 00:00:00"
........... altro codice .............
END


da notare che il mese è formattato con lo zero davanti quindi il mese di Febbraio è trattato come '02' e non '2'. Es. di stringa sql:

Codice: [Seleziona]
sql="SELECT * FROM nometabella WHERE datetime(campodata) = '" & currdate & "' " 


Buona Domenica :-)