Newsgroup: it.comp.lang.delphi
Titolo: proprietà filter

Salve a tutti, ripropongo un problema irrisolto già postato il giorno 17
c.m. Riguarda sempre la proprietà filter di TTable. Ho la
necessità di scrivere attraverso codice un filtro che agisca su un campo di
database di Tipo Data (paradox - database desktop ver. 7.0). Il filtro deve
agire su un intervallo di data, perciò deve filtrare i records dalla data1
alla data2. Tutto bene quando la data viene scritta  direttamente sul
codice, non funziona   invece quando voglio che le date vengano prese da due
oggetti di tipo TEdit. Il codice che funziona è il seguente:
Table1.Filter:='(NomeCampoData>=''01/01/2004'')
and(NomeCampoData<=''31/01/2004'')';
Filtered:=true;
questo che segue e che mi interessa invece non funziona (intendo che viene
sollevato un Exception Class EConvertError StrToDate(edit1.text) is not a
valid date):
Table1.Filter:='(NomeCampoData>=''FormatDateTime('dd/mm/yyyy',StrToDate(edit
1.text))''
and (NomeCampoData<=''FormatDateTime('dd/mm/yyyy',StrToDate(edit2.text)'')';
Non funziona nemmeno se invece dei TEdit uso 2 TDateTimePicker e perciò
tento di passare alla procedure i valori DateTimePicker1/2.Date, e neanche
assegnando tale valore ad una variabile per poi passare quest'ultima alla
procedura.
Non funziona nemmeno usando la sintassi indicata nella guida di Delphi e
cioè
Table1.Filter:='(NomeCampoData>='+QuotedStr('FormatDateTime('dd/mm/yyyy',Str
ToDate(edit1.text)) ecc
In quest'ultimo caso riesco a fargli accettare il valore di un solo
componente TEdit e infatti mi cerca quel valore, se però chiedo un intevallo
con AND, niente da fare il programma mi dice o unterminated string o
comunque errore di sintassi.
Mi era stato consigliato da Morde di invertire il formato della data in
questo modo mm/dd/yyyy ma non va bene perchè viene sollevato un errore di
eccezione riguardo al formato appunto.
Comunque ho provato a filtrare un intervallo di un campo di tipo integer e
il problema è analogo, il problema quindi è di sintassi, come fare per far
accettare a run time un intervallo di valori che devono passare per
componenti TEdit ????????
Ringrazio anticipatamente.

 comunque errore di sintassi.
non ho ben capito come usi l'AND, credo dovresti fare qualcosa di questo 
tipo:
Table1.Filter:='(NomeCampoData >= ';
Table1.Filter:= Table1.Filter + QuotedStr(
		FormatDateTime('dd/mm/yyyy',StrToDate(edit1.text));
Table1.Filter:= Table1.Filter + ' AND ';
Table1.Filter:= Table1.Filter + 'NomeCampoData <= ';
Table1.Filter:= Table1.Filter + QuotedStr(
		FormatDateTime('dd/mm/yyyy',StrToDate(edit2.text));
Table1.Filter:= Table1.Filter + ');
Facci sapere se funge.
Ciao


credo sia
Table1.Filter:='(NomeCampoData>=' + 
FormatDateTime('dd/mm/yyyy',StrToDate(edit1.text))
   +' ) and (NomeCampoData<=' + 
FormatDateTime('dd/mm/yyyy',StrToDate(edit2.text)+' )';
Comunque EconvertError te lo dà quando cerca di convertire il testo in data 
, quindi controlla che la data sia scritta giusta (meglio usare qualche 
componente che la inserisca già corretta , io uso quelli rxlibrary or jedi).
Giulio


credo sia
Table1.Filter:='(NomeCampoData>=' +
FormatDateTime('dd/mm/yyyy',StrToDate(edit1.text))
   +' ) and (NomeCampoData<=' +
FormatDateTime('dd/mm/yyyy',StrToDate(edit2.text)+' )';
Comunque EconvertError te lo dà quando cerca di convertire il testo in data
, quindi controlla che la data sia scritta giusta (meglio usare qualche
componente che la inserisca già corretta , io uso quelli rxlibrary or jedi).
Giulio
PS : mi scuso se forse il messaggio appare due volte , ma oggi il pc fa le 
bizze ... :-)

 > componente TEdit e infatti mi cerca quel valore, se però chiedo un
