Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VB6 ACCESS e le date. AIUTO!!

40 views
Skip to first unread message

gigi

unread,
Oct 21, 1999, 3:00:00 AM10/21/99
to
Salve,
qualcuno di voi sa dirmi come si fa da VB6 una query che estragga da un DB
access i record che hanno un campo data comreso fra due date diverse?

Io ho provato cose tipo
select * form xxx where cdata>=#12/10/1999# and cdata<=#21/10/1999#

con questa query ho dei maldìfunzionamenti e spesso fallisce. Ci sto
diventando matto.

Grazie in anticipo e se potete rispondetemi via e-mail a:
gigil...@iol.it

gigi

Pasquale

unread,
Oct 22, 1999, 3:00:00 AM10/22/99
to

gigi <gigil...@iol.it> wrote in message
eSGP3.33386$i06.3...@typhoon.libero.it...

> Salve,
> qualcuno di voi sa dirmi come si fa da VB6 una query che estragga da un DB
> access i record che hanno un campo data comreso fra due date diverse?
>
> Io ho provato cose tipo
> select * form xxx where cdata>=#12/10/1999# and cdata<=#21/10/1999#
>
> con questa query ho dei maldìfunzionamenti e spesso fallisce. Ci sto
> diventando matto.
>


"SELECT * FROM Tabella WHERE CampoData BETWEEN #12/10/1999# AND
#21/10/1999#"
__ __
<o> <o>
[]
\____/ ......(Statti bene!)

Pasquale Minerva
mine...@libero.it

Steama

unread,
Oct 22, 1999, 3:00:00 AM10/22/99
to
...dunque

io ho perso piu' di 1 giorno a combattere con le date di Access lette da
VB6.

Le mie personalissime conclusioni sono state le seguenti:

Tutto funziona perfettamente quando il numero del giorno ed il numero del
mese non sono ...ambigui, cioe' il giorno numero 13 non puo' essere confuso
con il mese numero 13 perche' non esiste.
Ad esempio la data 13/05/1999 e' sicuramente il 13 maggio del 99.
Nel caso di coppia giorno-mese ambigua (data 04/05/1999 considerata per noi
il 4 maggio 1999, ma nel formato americano 5 aprile 1999) VB6 interpreta
questa data nel formato americano, andandoselo a prendere chissa dove
(...forse nelle impostazioni internazionali ??)

...in questo modo si corre il rischio che la tua applicazione possa
funzionare su un PC si e su un PC no, in funzione delle impostazioni
internazionali impostate.

La soluzione che io ho adottato e' la seguente:

Prendi la data e, avendo l'accortezza di aggiungere lo 0 per i giorni e mese
con una sola cifra, la trasformi in stringa oppure Long e la ribalti:
es:

data: 5/11/1999
Long : 19991105
Stringa : "19991105" (N.B. ricorda di aggiungere lo 0)

in questo modo potrai fare tutti i confronti diretti (=) o Between che vuoi
poiche' lavorerai non piu' su tipi DATE ma su tipi STRING o LONG

N.B.
La data va necessariamente ribaltata per dargli il giusto ordinamento,
es:
19991105 e' piu' grande di 19991104, infatti il 5 novembre viene dopo il 4
novembre.

Ciao

Stefano

gigi <gigil...@iol.it> wrote in message
eSGP3.33386$i06.3...@typhoon.libero.it...
> Salve,
> qualcuno di voi sa dirmi come si fa da VB6 una query che estragga da un DB
> access i record che hanno un campo data comreso fra due date diverse?
>
> Io ho provato cose tipo
> select * form xxx where cdata>=#12/10/1999# and cdata<=#21/10/1999#
>
> con questa query ho dei maldìfunzionamenti e spesso fallisce. Ci sto
> diventando matto.
>

pal

unread,
Oct 23, 1999, 3:00:00 AM10/23/99
to
mi sembrava che l'impostazione americana "mese giorno, anno" fosse
abbastanza intrinseca a vb e se non sbaglio sql. se e' cosi', nel select qui
sotto "21.10.1999" difficilmente dovrebbe essere gestibile in confronto con
cdate. se usi cdate() su una data che sai come e' stata immessa (in che
ordine G,M,A), come si comporta? cioe cosa restituisce?
ovvero, con un campo di testo in cui la data verra' immessa in forma
localizzata (e quindi non si sa come), cosa restituisce cdate(txtData) ?
il problema mi sembra sorga soprattutto quando non si riesce a sapere con
certezza se 5/6 e' 5 giugno o 6 maggio. allora conviene forse controllare i
campi di immissione. io quando voglio proprio essere sicuro continuo a fare
3 campi come si usava in cobol (pero' col 3. a 4 cifre). e davanti ci metto
3 etichette "DD" "MM" "YYYY" (si potrebbe usare un mask), poi ricompongo la
data, cercando di controllarne la coerenza. pero' vorrei alla fine sempre
avere un tipo data, con le funzioni annesse. anche "ribaltando" la data,
cioe' girandola in fto ansi, con uno string i datediff ecc bisogna
calcolarseli da soli. e se si usa un valore numerico, dubito che 19991022 -
19090101 dia risultati attendibili.

Steama <s.a...@eis.it> wrote


> data 04/05/1999 considerata per noi il 4 maggio 1999, ma nel formato
americano 5 aprile 1999) VB6 interpreta questa data nel formato americano,

andandoselo a prendere chissa dove ...in questo modo si corre il rischio che


la tua applicazione possa funzionare su un PC si e su un PC no, in funzione
delle impostazioni internazionali impostate.

> La soluzione che io ho adottato e' Prendi la data e, avendo l'accortezza


di aggiungere lo 0 per i giorni e mese con una sola cifra, la trasformi in

stringa oppure Long e la ribalti: data: 5/11/1999 > Long : 19991105 >
Stringa : "19991105"


> in questo modo potrai fare tutti i confronti diretti (=) o Between che
vuoi poiche' lavorerai non piu' su tipi DATE ma su tipi STRING o LONG

> La data va necessariamente ribaltata per dargli il giusto ordinamento,

> 19991105 e' piu' grande di 19991104,

> gigi <gigil...@iol.it> wrote in message

0 new messages