Newsgroup: it.comp.appl.access
Titolo: AS400, ODBC, Access e date

Salve a tutti,
ho un problema con una query da Access97 su una tabella(file) AS400
collegata tramite ODBC. E' veramente parecchio che tento di risolvere
questo problema ed ormai tutto il lavoro e' bloccato su quella
che sembrava essere una piccolezza.
Premetto che il collegamento non da nessun problema ed infatti
una query (sotto Access) tipo:
SELECT * FROM Tabella_AS400;
restituisce correttamente tutte le righe della tabella (circa 30000).
Il problema nasce quando voglio applicare una selezione sul campo
MTDT10 (data della registrazione) ad esempio:
SELECT *
FROM Tabella_AS400
WHERE MTDT10 > #1/1/2001#;
In questo caso il risultato restituito mostra che le date sono
state interpretate in modo completamente sbagliato.
Il risultato non cambia ne' utilizzando una CDate(MTDT10) ne' attraverso
le varie permutazioni di giorno/mese/anno: vengono selezionate
tuple sia con la data posteriore sia con la data precedente al
#1/1/2001#.
Poiche' non posso modificare la struttura del db su AS400, ne'
potrei farlo non avendo esperienza di tale sistema, non so piu'
a che santo votarmi.
Vi ringrazio anticipatamente.
Paolo Laurita

 ha scritto nel messaggio
news:3bb48080$1@news...

ti consiglio di usare it.comp.as400 ad esempio
almeno la qualcuno ti potrebbe dire che il formato data è in stile americano
e comunque molto strano
comunque se hai una softwarehouse che ti segue puoi chiederlo ad un
programmatore RPG
Ciao



Sei sicuro che MTDT10 sia in formato data nella tabella?
Potresti accodare tutti i dati in una tabella di appoggio locale e con
MTDT10 sicuramante impostato a data. Poi fai una query su questa nuova
tabella.
Se non ti accoda i dati nella nuova tabella cambia il formato di MTDT10
nella nuova tabella in formato testo e riprova.
Ora puoi operare direttamente con la struttura di Access.
Ciao, Carlo

 
Ciao Carlo,
grazie del consiglio, di fatto e' la soluzione che avevo gia'
implementato:
SELECT * 
INTO Tabella_Access
FROM Tabella_AS400;
SELECT *
FROM Tabella_Access
WHERE DataMov > #1/10/2001# 
Purtroppo la tabella di origine su AS400 cresce di parecchie migliaia di
righe all'anno e oggi e' dell'ordine di 30mila tuple. Io cercavo proprio
di evitare l'importazione (inutile) di tutte le tuple che di volta in
volta erano gia state elaborate dato che il collegamento ODBC attraverso
la rete e' parecchio lento.
L'elaborazione dei dati importati, inoltre, passa attraverso query molto
pesanti (PIVOT, Query innestate con query in NOT IN etc.) e anche se
questa operazione di importazione non e' frequente io vorrei fornire una
soluzione pulita.
Su it.comp.as400 mi hanno detto che spesso il campo Data (effettivamente e
stranamente quasi mai utilizzato come tipo built-in) viene scritto come
String o addirittura come Int o Long e quindi il famigerato 1 ottobre 2001
dovrebbe trasformarsi nel numero 20011001.
Questa cosa non mi pare proprio "bella"... comunque messa cosi' date
consecutive hanno effettivamente ordinamenti numerici crescenti, ma se
dovessi progettare un sistema io non ci penserei proprio a fare cosi'.
La cosa mi lascia perplesso, comunque dovrei utilizzare un
INT(DataMov/10000) per avere lo stesso effetto di una piu'
leggibile e trasportabile YEAR(DataMov).
ci tentero'.
ciao a tutti.