Newsgroup: it.comp.appl.access
Titolo: Formato Campi data passati a stringa SQL

Ciao !
Formato del database Access 97 con installata la SR-2.
Problema:
Ho due campi in una maschera, Data1 e Data2, maschera input 99/99/9999,
Formato data in cifre; Impostazioni internazionali, di data e di sistema, in
italiano.
Scrivo su Data1 05/07/2000 e su Data2 31/07/2000
Compongo la stringa SQL "SELECT * FROM TABELLA1 WHERE CampoData BETWEEN # "
& Data1 & "# AND #" & Data2 & "#"
Passo la stringa alla RowSource di una casella di riepilogo, eseguo la
Requery, ma i risultati partono dal 7 maggio 2000 (!!!) fino al 31 luglio
2000. Insomma, qualsiasi data inserisco, se il giorno di uno dei due campi è
minore o uguale a 12, viene interpretrato come mese,e, quindi, inverte i
valori del giorno e del mese !
Le ho provate un pò tutte, Format compreso, ma non ne vengo fuori !
Dove sbaglio o cosa non ricordo ?
GRAZIE A TUTTI
Ciao
Nicola

 Le ho provate un pņ tutte, Format compreso, ma non ne vengo fuori !


Requery, ma i risultati partono dal 7 maggio 2000 (!!!) fino al 31 luglio
come sai l'sql lo hanno inventato gli statunitensi.  costoro, come
tutti gli altri anglofoni, scrivono le date cosi': mese giorno anno.
perché?  boh, per lo stesso motivo per cui non adotta(va)no un sistema
decimale per pesi, lunghezze e valuta.  so' gente strana.
fattostà che l'sql delle impostazioni internazionali se ne frega, e
come potrebbe essere altrimenti!
però è abbastanza intelligente da accorgersi se una data che non
funziona come mese giorno anno funziona come giorno mese anno.  se il
primo gruppo di cifre è maggiore di 12 probabilmente lo stravagante
utente l'ha immessa nel formato europeo, giorno mese anno.  se invece
ci sono ambiguità sql pensa che il formato è quello anglofono.
allora tu fai una bella cosa: inserisci le date con questo formato:
yyyy/mm/dd, cioè anno in quattro cifre, mese, giorno.
per fare ciò puoi usare la funzione format, o volendo anche le
datepart.
--
make it idiot proof and someone will make a better idiot.
--
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/


Mi sono costruito un esempio che rispecchi il tuo caso, e a me funziona
tutto bene.
In una maschera (Maschera1) ho inserito due caselle di testo non associate
(Data1 e Data2) ed una casella di riepilogo non associata.
Il codice SQL della query, il cui nome ho indicato come "Origine riga "
della casella di riepilogo, č il seguente:
SELECT *
FROM Tabella1
WHERE (((Tabella1.CampoData) Between [Forms]![Maschera1]![Data1] And
[Forms]![Maschera1]![Data2]));
Per ogni evenienza ho inviato al tuo indirizzo e-mail il mio esempio, cosě
potrai trovare dove sono le differenze con il tuo DB.
Roberto

GRAZIE A TUTTI e BUON FERRAGOSTO !!!
;-)
Nicola


Ciao sono K, e sono nuovo del gruppo.
Volevo rispondere al tuo interrogativo in quanto in passato mi ero
impantanato sullo stesso problema.
Stai molto attento perchè ti stai muovendo su uno dei terreni più melmosi.
Queste sono le indicazioni che posso darti:
 - quando specifichi una data in una stringa SQL con il "#" devi usare il
formato MM/GG/AAAA, che essendo il formato nativo è meglio di AAAA/MM/GG che
ha bisogno di una conversione interna ma che funziona comunque anche se
leggermente più lenta;
 - qualora tu scriva una data in una variabile di tipo string essa verrà
interpretata secondo il formato internazionale scelto, quindi tienine conto
se costruisci le tue stringhe SQL usando variabili di tale tipo;
 - qualora una stringa contenga un campo data non "corrispondente" alle
specifiche, access cercherà di correggerlo, se non ci riuscirà ti darà un
errore, se la stessa stringa cerchi di passarla direttamente a SQLserver
otterrai sempre un errore (non cerca di ottenere nessuna data valida);
 - evita l'uso del Format e di operazioni stringa direttamente sulle
variabili stringhe in quanto il Format viene influenzato dalle impostazioni
internazionali e l'utente potrebbe avere impostazioni internazionali diverse
da quelle che ti aspetti;
 - evita nel modo più assoluto i formati di date a 6 cifre, cioè con l'anno
a 2 cifre. In questo caso ti accorgerai che usando anni che vanno dal 2001
in poi ti puoi trovare i risultati più disparati (forse non ti eri ancora
accorto?);
 - in linea di massima, come pure per il tuo caso specifico ti consiglio di
crearti una funzioncina che restituisca sempre una STRINGA nel formato
MM/GG/AAAA.
Consapevole che queste considerazioni non esauriscono assolutamente il
problema delle DATE, spero che ti siano di aiuto per il tuo lavoro. Se hai
ancora problemi ...... sono qui.
ciao da K.