Newsgroup: it.comp.lang.visual-basic
Titolo: problemi con le date + domanda su select

Ho un db con un campo formattato come date / Time.
Ora vorrei fare una select su questo db prendendo in il campo date facendo
un filtro del tipo
select * from * where dataarchivio >=  '" & data1  and  & "' dataarchivio
<= '" &data2 & "'
ma mi da sempre l'errore
"The conversion of a char data type to a datetime resulted in an out-of-
range datetime value"
ho provato a cambiare il tipo di data1 e data2 ma sempre lo stesso
Altra domanda:
è possibile su una select mettere una condizione?
nel senso : "se trovi un valore in un campo prendilo o ponilo = 0"
Grazie Anticipatamente


specifica quale DB usi....
--
bye BlackMagic
ICQ#:85485468

 nel senso : "se trovi un valore in un campo prendilo o ponilo = 0"
Non so se il tuo DBMS lo supporta ma io userei una IIF, cercala nell'help...
la sintassi dovrebbe essere IIF(espressione;partevera;partefalsa)
Buon lavoro, Giorgio.

 range datetime value"
Le select con le date vanno scritte cosi':
"select * from tabella where datevalue(dataarchivio)>=#" & 
format(data1,"mm/dd/yyyy") & "# AND datevalue(dataarchivio)<=#" & 
format(data2,"mm/dd/yyyy") & "#"
Se vuoi considerare non solo la data ma anche l'ora togli datevalue e 
modifica la stringa dela funzione format
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 format(data2,"mm/dd/yyyy") & "#"
meglio format$ O:-)

 meglio format$ O:-)
Ah si? Ma sai che non lo sapevo? Scusa eh, ma non e' che io abbia tutta
questa esperienza... :-)
In ogni caso c'è differenza? Mi interessa saperlo, perché mi sembra a prima
vista che la sintassi sia uguale e anche da MSDN mi sembra di capire che sia
la stessa cosa... io ho sempre usato solo il format() :-(
Grazie, Giorgio.

 ha scritto nel messaggio
news:RmMC9.31702$744.1...@news1.tin.it...


 riesco nemmeno a scrivere correttamente quello che leggo......
Sto preparando l'estintore.
Alberto

 capire che sia la stessa cosa... io ho sempre usato solo il format()
Non sono la stessa cosa! Uno ritorna un variant ti tipo stringa... l'altro
restituisce una stringa! Lo stesso dicasi per mid e mid$, left e left$
ecc... ;)
hth

 ha scritto nel messaggio
news:RmMC9.31702$744.1...@news1.tin.it...


> Se non ci fosse differenza l'avrei scritto secondo te? ;-)
[cut]
Appunto perché so che non scrivi cose insensate  te l'ho chiesto ;-)
ehehe grazie per la spiegazione... da adesso mi metto a usare format$ pure
io :-)))

 dove sto facendo la select su un nomecontrollo.recourdsource= select......
per favore, indica (assolutamente):
1) L'errore che viene generato e un estratto del codice in cui viene
indicato l'errore
2) Su che tipo di database ti appoggi
poi, opzionalmente (ma non troppo) cerca di quotare "come si deve"
Una volta fatto questo vedremo che cosa si può fare.....
Salutoni
Sergio

 pure io :-)))
Anch'io quando l'ho letto sul NG sono rimasto colpito! O:-)

 gg/mm/aaaa
Come ti anno gia' detto: quota correttamente, cioe' inserisce le tue 
risposte, osservazioni subito dopo il testo del messaggio a cui rispondi.
Per controllare dove sta il problema nel debugger ferma il programma nel 
punto in cui la query e' pronta. Dovrai ottenere, visualizzadola nella 
finestra immediata qualcosa di simile a questo:
Select * from tabella WHERE datevalue(dataarchivio)>=#10/27/2002# AND 
datevalue(dataarchivio)<=#11/20/2002#
Nota bene il formato della data. E' all'inglese!
Se la query non e' scritta cosi' hai commesso qualche errore nella 
formazione della stessa nel codice precedente.
Se posti il tuo codice e' anche meglio ... Non essere timido/a! ;-)


Allora Riscrivo tutto
HO questo codice
La parte in grassetto è inerente al problema
Dim dataup As String
Dim datadown As String ' ho provato anche a dare as Date
dataup = Form2.MaskEdBox1
datadown = Form2.MaskEdBox2 ' dove maskedbox2.mask = ##/##/### e
maskedbox2.format=dd/mm/yyyy
Takingsql.ConnectionString = "dsn=taking;uid=sa;pwd=;"
Takingsql.RecordSource = "select *,(oclrighe.quantita - oclrighe.qtagiacons)
as pezzi " & _
"from cfanagra inner join oclrighe on cfanagra.clifor = oclrighe.cliente," &
_
"articoli inner join artmerce on articoli.articolo = artmerce.articolo " & _
"where articoli.articolo = oclrighe.articolo and " & _
"cfanagra.tipoclifor = '" & tipoclfor & "' and " & _
"oclrighe.giaconsegn = '" & giacon & "' and oclrighe.rigaann = '" & rigan &
"' and " & _
"(oclrighe.tiporiga = '" & tiporgmer & "' or oclrighe.tiporiga = '" &
tiposervi & "') and " & _
"((oclrighe.articolo >= '" & Form2.Text6 & "') and (oclrighe.articolo <= '"
& Form2.Text5 & "')) and " & _
"((oclrighe.cliente >= '" & Form2.Text4 & "') and (oclrighe.cliente <= '" &
Form2.Text3 & "')) and  " & _
"oclrighe.dtaprevcon >= #" & dataup & #" and " & _
"oclrighe.dtaprevcon <= #" & datadown & #" " & _
"order by oclrighe.cliente,oclrighe.idordcli,oclrighe.posiz"
se tolgo dalla select la parte dei controlli sulle date funziona tutto,
cosi mi da "incorrect syntax near #"
se uso datevalue(oclrighe.dtaprevcon) mi da "datevalue is a not recognized
function name"

 function name"
allora, forse, come visto sopra stai usando un database diverso da access
(ma dillo una buona volta), in questo caso ti consiglierei di verificare se,
per il tuo db, è corretto utilizzare i # come delimitatori di date
Salutoni
Sergio

 "oclrighe.dtaprevcon <= #" & datadown & #" " & _
Sei sicuro che quel # fuori dagli apici sia quello che ti hanno suggerito?
Alberto

 "where articoli.articolo = oclrighe.articolo
Mi permetto anche di criticare questa terribile sintassi dell'inner join a
quattro tabelle, splittato in due inner join corretti e uno, incrociato,
vecchio stile.
A meno che il tuo DB (sempre che tu prima o poi riesca a capire che DB usi e
a postarlo) non supporti l'inner join su 4 tabelle...
Ciao
Alberto

il db che sto usando è Sql
i cancelletti messi fuori o dentro non funzionano.
Le date sono registrate sul db in formato 21/11/2002 e i campi del DB sono
tipo DATE / TIME 8 caratteri
Grazie comunque a tutti

 e i campi del DB sono tipo DATE / TIME 8 caratteri
questo va bene.
Ciao
Alberto

 i cancelletti messi fuori o dentro non funzionano.
SQL: Ne hai abbreviato la parte iniziale (My) o quella finale (Server)?
Prova con 'aaaammgg'

grazie e scusa a tutti per l'ignoranza.
Per la cronaca ho risolto mettendo nel formato yyyy/mm/dd
quindi ho fatto
dim data up as string
dim datdown up as string
dataup = format(form2.maskedbox1, "yyyy/mm/dd")
dataup = format(form2.maskedbox2, "yyyy/mm/dd")
..
.
. sulla where poi
"oclrighe.dtaprevcon >= '" & dataup & "' and " & _
"oclrighe.dtaprevcon <= '" & datadown & "'"
Thanks to all
SONO SALVO

[Roby]
(snip)
Siamo (sono, per lo meno) contento per te, spero che questa esperienza ti
sia servita per imparare, oltre a come si fa un where con le date, come si
pongono le domande su un NG di programmazione:
1) confessare subito tutto il confessabile
2) rispondere alle domande di chiarimenti
3) leggere attentamente le risposte
Salutoni
Sergio