Newsgroup: it.comp.lang.delphi
Titolo: query intervallo date

ciao a tutti,
sapete per caso qual è la sintassi corretta per selezionare tutti i record
che hanno il campo "Data" compreso in un certo intervallo. Per intenderci:
ho due Edit (data1 e data2) nei quali scrivo le due date; cliccando su un
tasto la query deve eseguire la selezione dei record che hanno la data
compresa fra data1 e data2.
Purtroppo la query viene eseguita ma non mostra alcun record...
Ecco il codice:
code:
procedure TForm1.Button1Click(Sender: TObject);
var
num_and: integer;
begin
with ADOQuery1 do begin
  with SQL do begin
    Clear;
    Add('SELECT *');
    Add('FROM tabella1');
    Add('where');
    num_and:=0;
    if checkbox1.Checked then
  begin
  if num_and > 1 then
    begin
    SQL.Add ('AND ');
       end;
    SQL.Add('data>='+edit1.text);
     num_and:=num_and+1;
      end;
   if checkbox2.Checked then
  begin
    num_and:=num_and+1;
    if num_and>1 then
    begin
    SQL.Add ('AND ');
       end;
    SQL.Add('data<='+edit2.text);
      end;
  end;
  Open;
 num_and:=0;
end;
ciao!

 Purtroppo la query viene eseguita ma non mostra alcun record...
in sql le date vanno sempre nel formato americano: mm/gg/aa


Molto discutibile, io la pensavo come tè ma MS-SQL Server è
veramente BASTARDO, facendo una INSERT (non una
SELECT) passando la data in formato Americano la
interpreta un pò come gli pare:
  se 07/15/2002  Fa giusto!
  se 07/11/2002  La gira (= 11/07/2002) AHHHHH!
a questo punto hò provato di tutto (anche con una conversione
esplicita al formato USA nella query con il comando
CONVERT. Poi ho semplicemente detto a delphi di utilizzare,
per convertire le date, il formato "c", che è l'impostazione locale
fatta da Impostazioni Internazionali, e magicamente tutto a
funzionato!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  Ciao
  Marco

 ha scritto nel messaggio
news:iUY%8.118932$Jj7.2...@news1.tin.it...

Premesso che non uso i componenti ADO,
Che db usi?
Hai provato ad usare diverse formattazioni per la data?
Hai provato magari a passare le date come se dovessi passare delle stringhe
e scrivere:
    ADOQuery1.SQL.Add ('SELECT ......WHERE');
    ADOQuery1.SQL.Add ('DATA>=''' + EDIT1.TEXT + ''' ');
    ADOQuery1.SQL.Add ('AND DATA<=''' + EDIT1.TEXT + ''' ');
Fammi sapere,
  ciao ciao

...


 che hanno il campo "Data" compreso in un certo intervallo. 
La cosa migliore e' usare i parametri.  Le date hanno rappresentazioni
tipicamente differenti da sistema a sistema.  Usa qualcosa del genere:
var 
  MyDate: TDateTime;
...
MyQuery.SQL.Text := 'select * from tabella where miadata >=
:pmiadata';
MyQuery.ParamByName('pmiadata').AsDateTime := MyDate;


uso access come DB. Si, ho provato a passarle come stringhe ma mi dava una
"non corrispondenza di tipi"....

 ha scritto nel messaggio
news:eae5f7a6.02072...@posting.google.com...


Come ti ha detto Andrea il metodo migliore per non avere mai problemi
con le date è quello di usare i parametri.
Per quanto riguarda la query puoi usare il between :
SELECT * FROM TABELLA1 WHERE DATA BETWEEN :PARDATA1 AND :PARDATA2.
Ciao, Rocco.

 interpreta un pò come gli pare:
la roba m$ non fa testo...

Anch'io sono per i Parametri, comunque guarda come è impostato il campo
data/time nel database e mettilo a shortdate
La gestione delle date in access fa veramente schifo!!!!!
Se ti servono altre informazioni chiedimelo che ho già affrontato questo
problema.
Ciao

 ha scritto nel messaggio
news:ahqs0g$vetfq$1...@ID-109392.news.dfncis.de...


 la roba m$ non fa testo...
Oh certo che lo fa ;) e' tipicamente la "roba" piu' utilizzata ;)

 che hanno il campo "Data" compreso in un certo intervallo.
Io non ho mai usato i database Access, quindi non so darti un consiglio
specifico per questo caso, però ti posso dire un trucco che funziona sempre
e cioè invece di utilizzare un campo data, nel database, metti un campo
stringa e quando vai a inserire o a ricercare nel database inverti l'anno
con i giorni(es.: 31/12/2002 diventerà 2002/12/31) prima di lanciare la
query.
Se non mi sono spegato bene, chiedi pure.
Bye.
Daniel.
--------------------------------
Inviato via 
http://usenet.libero.it

 ha scritto nel messaggio
news:iUY%8.118932$Jj7.2...@news1.tin.it...


prima e dopo la data.
Ora vai sulle impostazioni internazionali e cambia la modalita' con cui 
viene rappresentata la data. 
Bang !
Il tuo sistema non funziona piu'.
Il metodo migliore per impartire le date con SQL e' quello di usare i 
parametri.
-------------------------------
Message Posted by  <dedGateway>
http://www.dedonline.com/forump

 Oh certo che lo fa ;) e' tipicamente la "roba" piu' utilizzata ;)
si ma non e' lo standard, sono bug