Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: gianpa - Settembre 18, 2013, 04:40:24 pm

Titolo: filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 18, 2013, 04:40:24 pm
ciao
riesco a filtrare una tabella ottenendo i record prima di una certa data così:
clientdataset1.Filter:='DATA<''18/09/2013''';
però vorrei scegliere a runtime la data che voglio o con un tedit o con il DTPicker però ottengo sempre errori soprattutto con le virgolette !
qualcuno di voi sà la sintassi corretta ?

Grazie

ciao
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: xinyiman - Settembre 18, 2013, 05:34:53 pm
ciao, hai già provato con la sintassi Between ?!
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 18, 2013, 08:59:09 pm
scusa , ma ho postato già quello che vorrei ,cioè che mi ritorni la lista dei record dove la data è precedente a oggi (per esempio) . Con between mi pare che si possa indicare un intervallo di tempo che non mi serve!
Vorrei sapere come sfruttare il suddetto componente (comodo perchè visualizza un calendario da cui estrarre la data voluta)

ciao
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: Stilgar - Settembre 18, 2013, 10:20:57 pm
La butto a sentimento:
Codice: [Seleziona]
clientdataset1.Filter:=Format('DATA<"%s"',[datetostr(data)]);

la variabile data è un datetime.
Eventualmente espora come chiedere a dateToStr come ottenere la data nel formato che vuoi. (Italiano suppongo dall'esempio)

Stilgar
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: brunello - Settembre 19, 2013, 10:21:31 am
così su SQLSERVER funziona, ciao Brunello

clientdataset1.Filter := 'DATA<' + QuotedStr(FormatDateTime('yyyy/mm/dd', giorno));
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 19, 2013, 04:58:23 pm
Grazie Brunello era quello che mi serviva; purtroppo però mi dice:

[Pascal Error] Unit1.pas(62): E2250 There is no overloaded version of 'FormatDateTime' that can be called with these arguments

grazie lo stesso!
ciao
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 19, 2013, 05:01:29 pm
ho provato anche la sintassi suggerita da Stilgar ,ma:
[Pascal Error] Unit1.pas(64): E2250 There is no overloaded version of 'DateToStr' that can be called with these arguments

----stesso identico errore------

sob!!!
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: Legolas - Settembre 19, 2013, 06:56:22 pm
Sia DateToStr che FormatDateTime richiedono come parametro una variabile di tipo TDateTime. Che cosa passi come parametro?
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: brunello - Settembre 19, 2013, 07:20:58 pm
Non ho verificato con DTPicker ma con un semplice componente DateEdit1 passi il parametro Date non ci sono problemi, ciao Brunello

clientdataset1.Filter := 'DATA<' + QuotedStr(FormatDateTime('yyyy/mm/dd', DateEdit1.Date));
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: Legolas - Settembre 19, 2013, 08:06:36 pm
Tra l'altro notavo ora una cosa: quell'errore [Pascal Error] non mi pare di averlo mai incontrato in Lazarus e/o freepascal, così come non mi risulta ci sia un TDateTimePicker in lazarus. Stai usando per caso Delphi?
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 20, 2013, 09:12:03 am
Grazie Brunello ,ora provo !
Sì Legolas li uso entrambi ...

Ciao
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: Antonello - Settembre 20, 2013, 11:05:08 am
lazarus + sqlite + ztable

procedure TForm1.Button1Click(Sender: TObject);
begin
  if CalendarDialog1.Execute then
  begin
    ZTable1.Filter := 'Data < ''' + DateToStr(CalendarDialog1.Date) + '''';
    ZTable1.Filtered := true;
  end else
    ZTable1.Filtered := false;
end; 

funziona
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 20, 2013, 11:04:16 pm
ho modificato così per il delphi2007 : procedure TForm1.Button1Click(Sender: TObject);
begin

  if monthcalendar1.ExecuteAction=1 then
  begin
    sqldataset1.Filter := 'Data < ''' + DateToStr(monthcalendar1.Date) + '''';
    sqldataset1.Filtered := true;
  end else
    sqldataset1.Filtered := false;


end;

end.

ma mi da' errore su executeaction (non c'è execute) --> not enough parameters !
La sintassi richiede un parametro booleano(ho messo=1)

ciao
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: Legolas - Settembre 21, 2013, 09:05:57 am
TCalendarDialog e TMonthCalendar sono due componenti differenti, quindi non puoi utilizzarli allo stesso modo!

Il primo è un dialog, e per questo motivo ti è stato mostrato un esempio che ne prevede l'apertura per l'utilizzo (CalendarDialog1.Execute). Il secondo invece è già visibile sul form, quindi non devi richiamare nessun codice per mostrarlo a schermo. Probabilmente potrebbe bastare

Codice: [Seleziona]
    sqldataset1.Filter := 'Data < ''' + DateToStr(monthcalendar1.Date) + '''';
    sqldataset1.Filtered := true;
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 21, 2013, 11:22:00 pm
con questa istruzione :

edit1.Text:=dateTostr(monthcalendar1.Date);

sono riuscito a passare il valore cliccato sul monthcalendar1 al componente edit1 che mi visualizza la data che ho scelto!
ora non mi resta che passare la data al filtro per ottenere i record che hanno la data inferiore ...
provo perchè ancora trovo errori ... poi posto il risultato!
ciao


Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 21, 2013, 11:35:11 pm
alla fine la sintassi che mi dà meno problemi è :   
clientdataset1.Filter:='DATA<''dateTostr(monthcalendar1.Date)''';
ma mi dà comunque errore di conversione di tipo(ole-str)

tutte le altre che ho provato compreso la tua suggerita sopra mi danno errori di sintassi...

ciao
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: Antonello - Settembre 22, 2013, 11:11:15 am
clientdataset1.Filter:='DATA<''dateTostr(monthcalendar1.Date)''';
ma mi dà comunque errore di conversione di tipo(ole-str)

gianpa,
ho fatto una prova con gli esempli  che riguardano il TClientDataSet inclusi in D6,
un semplicissimo TEdit in cui inserire la data nel formato gg/mm/aaaa e al click su un TButton
ClientDataSet1.Filter := 'ShipDate <= '''+Edit1.Text +'''';
ClientDataSet1.Filtered := True;
il tutto funziona perfettamente.
Se a te continua a dare problemi dovresti controllare il formato delle date.
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 22, 2013, 11:18:33 am
Provo come dici poi ti faccio sapere ! Ma che cosa e' SHIPDATE ?
Ciao
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: Antonello - Settembre 22, 2013, 12:46:31 pm
Provo come dici poi ti faccio sapere ! Ma che cosa e' SHIPDATE ?
Ciao
è il nome del campo nella tabella sulla quale applichi il filtro, quindi  per te diventa
ClientDataSet1.Filter := 'Data <= '''+Edit1.Text +'''';
ClientDataSet1.Filtered := True;
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 22, 2013, 05:51:49 pm
e infatti così come lo scrivi è perfetto ,non devo correggere nulla !!!
purtroppo mi torna questo errore:
First chance exception at $7C812FD3. Exception class EVariantTypeCastError with message 'Could not convert variant of type (OleStr) into type (Date)'. Process sviluppo.exe (3456)

se è il formato della data a dare problemi posso assegnarlo nella createForm o c'è una proprietà (che non trovo) nel componente ?
Ciao
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: Antonello - Settembre 22, 2013, 09:36:58 pm
che dati e come li carichi nel clientdataset?
l'errore in quale momento si presenta?
se a design time nella proprietà filter scrivi Data <= '31/12/2012' imposti la proprietà filtered a true e attivi il clientdataset che succede?
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 23, 2013, 12:04:09 pm
posto tutto:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
edit1.Text:=dateTOstr(monthcalendar1.Date);

end;

procedure TForm1.BitscadenzaClick(Sender: TObject);
//     var data,giorno:string;
begin
// sqldataset1.commandtext:='SELECT * from INTERVENTO where DATA< date';
// clientdataset1.Filter:='DATA<''datetimepicker1.text''';
// clientdataset1.Filter:=DATA<'18/09/2013';
// clientdataset1.Filter := 'DATA<' + QuotedStr(FormatDateTime('yyyy/mm/dd', giorno));
// clientdataset1.Filter := 'DATA<' + QuotedStr(FormatDateTime('yyyy/mm/dd', Edit1.Text));
// ClientDataSet1.Filter := 'Data <= '''+Edit1.Text +'''';
clientdataset1.Filter:='DATA<''18/09/2013''';
//    clientdataset1.Filter:=Format('DATA<"%s"',[datetostr(date)]);
 clientdataset1.Filtered:=true;
end;

le righe con i/commenti/ sono il codice che mi da errore che ho provato ! le righe senza le barre di commento sono giuste; vengono eseguite! praticamente al posto della data scritta per esteso(18/09/2013) vorrei mettere una variabile perchè ovviamente possa cambiarne il valore !
ciao
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: brunello - Settembre 23, 2013, 12:32:54 pm
clientdataset1.Filter := 'DATA<' + QuotedStr(FormatDateTime('dd/mm/yyyy', Edit1.Text));

prova così e vedi se funziona
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: brunello - Settembre 23, 2013, 12:38:24 pm
clientdataset1.Filter := 'DATA<' + QuotedStr(FormatDateTime('dd/mm/yyyy', monthcalendar1.Date));

scusa ma non  avevo visto il tedit quello non lo puoi formattare a piacimento mentre il valore riportato dal componente si
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: Antonello - Settembre 23, 2013, 02:17:08 pm
clientdataset1.Filter:='DATA<''18/09/2013''';
clientdataset1.Filtered:=true;
end;

le righe con i/commenti/ sono il codice che mi da errore che ho provato ! le righe senza le barre di commento sono giuste; vengono eseguite! praticamente al posto della data scritta per esteso(18/09/2013) vorrei mettere una variabile perchè ovviamente possa cambiarne il valore !
ciao
usa un TMaskEdit imposta la proprietà Maskedit a !99/99/0000;1;_
ClientDataSet1.Filter := 'Data < '''+MaskEdit1.Text +'''';
ClientDataSet1.Filtered := True;
oppure la soluzione proposta da brunello
Titolo: Re:filtrare tabella per data con datetimepicker
Inserito da: gianpa - Settembre 23, 2013, 06:49:38 pm
Ho provato per prima il suggerimento di Brunello e funziona già magnificamente così ... comunque grazie TANTISSIMO a tutti e due !

ciao