Newsgroup: it.comp.lang.visual-basic
Titolo: Datediff e sql

In ASP sto cercando di utilizzare una query per estrarre un elenco di 
file da un database access:
SCADENZA ï¿œ il nome del campo nel database.Campo tipo data (data in cifre 
formato breve:31/12/09) che comunque viene salvato nel formato 09/12/31
dim ladata
ladata=ladata=FormatDateTime(Year(Date()) &"/" & Month(Date()) &"/"& 
Day(Date()),vbShortDate)
sql = "SELECT * FROM pdf WHERE DateDiff(dd,'SCADENZA','ladata')>= 1 And 
APPROVED='SI' And TIP='AVV' ORDER BY DATA DESC,TITOLO"
Dove sbaglio?
Grazie

 Dove sbaglio?
Ma che pasticcio � questo?
Dove sbaglio?
    Dim ladata As Date
    ladata = FormatDateTime(Date, vbShortDate)
    sql = "SELECT * FROM pdf WHERE DateDiff(dd," & SCADENZA & "," & ladata & 
")>= 1 And APPROVED='SI' And TIP='AVV' ORDER BY DATA DESC,TITOLO"
-- 
Ciao Fede
By Chicco Production
http://bcp.freetools.it

    sql = "SELECT * FROM pdf WHERE DateDiff(dd," & SCADENZA & ",Now)>= 1 


 Dove sbaglio?
Praticamente ogni dieci lettere c'ï¿œ un errore o un'imprecisione.
Diventiamo costruttivi:
1) studia i tipi
2) studia la sintassi sql di Access facendo le query direttamente nelle 
finestrelle sql di Access
3) studia la concatenazione di stringhe in vb6
4) impara che se hai bisogno di aiuto, dovresti almeno indicare 
l'errore che ti viene restituito, l'anomalia, il malfunzionamento, 
ecc..., altrimenti il 'dove sbaglio' puï¿œ essere vago.
Alberto
-- 
Georges Pompidou: Un uomo di stato ï¿œ un politico che dona se stesso al 
servizio della nazione. Un politico ï¿œ un uomo di stato che pone la 
nazione al suo servizio.

 
SCADENZA ï¿œ un nome di campo, non una variabile, perchï¿œ sta tra segni di & ?
Io ho fatto cosï¿œ:
sql = "SELECT * FROM pdf WHERE DateDiff('d',SCADENZA,'" & ladata & 
"')>-1 And APPROVED='SI' And TIP='AVV' ORDER BY DATA DESC,TITOLO"
perï¿œ ammetto che anche se non fa errori di sintassi sulla query, non 
funziona bene in quanto alcune date scadute passano ugualmente e me le 
ritrovo visualizzate....
Mi scuso per l'errore "matematico": >=1 quando invece ï¿œ piï¿œ corretto >-1

 
Persino i professori oltre ad invitarti ad approfondire, quando sbagli 
ti segnano l'errore senza paura di dare "troppo". Comunque grazie.

 Mi scuso per l'errore "matematico": >=1 quando invece � pi� corretto >-1
...
Pero' le due espressioni danno due risultati diversi!
x >= 1 , x non puo' essere 0
x > -1 , x puo' anche essere 0
e non stiamo prendendo in considerazione i valori decimali!
Per cio' che riguarda la stringa sql, andrei a rileggere quanto scritto da 
Albe
Ciao 

 Albe
Ho riletto il post che ï¿œ molto "costruttivo"...pardon istruttivo.
Grazie.
Ciao

 cosa?
E' certa la seconda.

 Ho riletto il post che � molto "costruttivo"...pardon istruttivo.
...
Quello che dice Albe e' che, prima di scrivere "a tastoni", sarebbe bene 
capire i concetti fondamentali.
Quando viene detto che la data viene salvata nel formato x, si commette un 
errore abbastanza grave di concetto (che poi influisce sulla comprensione 
del problema).
La data NON e' una stringa, ma un valore numerico. il formato dd/mm/yyyy o 
qualunque altro formato e' semplicemente la *rappresentazione* della data 
che, sia in VB, sia in SQL e' memorizzato come un numero decimale.
Per la stringa sql, io farei qualche cosa di diverso, cioe'...
" where ladata >= ... " dove al posto dei puntini, ci bisogna metterci la 
rappresentazione della data in formato stringa, in base al motore scelto.
Se fosse sql server, scriverei " where ladata >= '20090929' " (condierando 
la data di oggi )
Per Access, come dice Albe, dovrebbe essere #mm/dd/yyyy#
 

 ti segnano l'errore senza paura di dare "troppo". Comunque grazie.
Ma non si pu� pretendere di copia/incollare codice senza conoscere come
"ragionano" gli strumenti utilizzati e pretendere che la gente ti posti
codice corretto su cui rifare copia/incolla.
Nel tuo caso hai messo ladata= (ladata=FormatDateTime...)
Questa ti restituisce True o False essendo un confronto.
Sicuramente ci sar� una funzione tipo CURRENT_DATE o DATE_CURRENT che ti
permette di fare tutto da SQL.
In firebird es. per fare una cosa del genere mi basta fare
SELECT * FROM TABELLA WHERE DATASCAD-CURRENT_DATE <=1
Poi il tuo problema si risolve semplicemente, si vede la stringa SQL che
viene creata, la si prova in access (se quello � il tuo DB), e si vede cosa
non gli va bene.