Filtrere en allerede filtreret tabel

Tags:    delphi

Jeg har en ADOTable som jeg i forvejen har filtreret med koden ADOTable3.Filtered := true

og

procedure TForm1.ADOTable3FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept := DateOf(DataSet['Dato']) = DateOf(Now);
end;

Nu vil jeg så gerne have den til at filtrere den igen med med en kode lignende denne:

ADOTable3.Filter:= HourOf(Now))+':'+DateTimeToStr(MinuteOf(Now));

Men problemet er at det felt der bliver filtreret i tabellen er et Dato felt så derfor kan jeg åbenbart ikke filtrere det med en string.
Det lader det ihvertfald ikke til for når ovenstående kode bliver udføre kommer programmet med en fejl om at argumenterne har en forkert type eller er uden for det angivne område eller der er opstået en konflikt mellem dem.

Nogen der kan hjælpe?

Mvh.
Rune Jensen
---------------------------------------------------------------------------
##The one who laugh last is the one who think slowest!##
---------------------------------------------------------------------------



2 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Der er flere problemer med dit filter. Først og fremmest mangler Felt-angivelsen. Dermæst filtrerer du på Hour + Min, men da feltet er en TDateTime mangler dato-delen og endelig kalder du DateTimeToStr med et Word, hvor funktionen kræver en TDateTime (=Double)...

Filter property'en er kun til (forholdsvis) simple filtreringer.
OnFilterRecord er typisk beregnet til de mere avancerede. Hvis du anvender begge samtidigt skal du passe meget på de ikke konflikter, hvilket resulterer i et tomt datasæt.

Ok, slut med pedanteriet:

Umiddelbart kunne du omskrive

ADOTable3.Filter:= HourOf(Now))+':'+DateTimeToStr(MinuteOf(Now));

til
Fold kodeboks ind/udKode 

Filtret ville så blive noget i retning af 'Dato = 03-01-2005 22:24:00'

Om dette så løser dit problem er en anden sag. Hvis du anvender dette filter skal Datotids-feltet i databasen matche nøjagtigt når filteret sættes. Dvs. tidspunktet skal være 22:24:00 som i eksemplet. Det må ikke være 22:24:35, så bliver datasættet tomt...

Hvis du f.eks. ønsker at filtrere, således at der ikke tages hensyn til sekunderne. Dvs. alle tider >= 22:24:00 og < 22:24:59 medtages gør du flg.:
1. Glemmer ADOTable3.Filter og bruger OnFilterRecord
2. Ændrer OnFilterRecord til

Fold kodeboks ind/udKode 

3. Styrer evt. opdateringen af datasættet/filtreringen ved at kalde ADOTable3.Refresh med mellemrum f.eks. via en timer el. på anden vis.

mvh.
hsv


[Redigeret d. 03/01-05 23:04:20 af HSV]

[Redigeret d. 03/01-05 23:06:27 af HSV]



Der er flere problemer med dit filter. Først og fremmest mangler Felt-angivelsen. Dermæst filtrerer du på Hour + Min, men da feltet er en TDateTime mangler dato-delen og endelig kalder du DateTimeToStr med et Word, hvor funktionen kræver en TDateTime (=Double)...

Filter property'en er kun til (forholdsvis) simple filtreringer.
OnFilterRecord er typisk beregnet til de mere avancerede. Hvis du anvender begge samtidigt skal du passe meget på de ikke konflikter, hvilket resulterer i et tomt datasæt.

Ok, slut med pedanteriet:

Umiddelbart kunne du omskrive

ADOTable3.Filter:= HourOf(Now))+':'+DateTimeToStr(MinuteOf(Now));

til
Fold kodeboks ind/udKode 

Filtret ville så blive noget i retning af 'Dato = 03-01-2005 22:24:00'

Om dette så løser dit problem er en anden sag. Hvis du anvender dette filter skal Datotids-feltet i databasen matche nøjagtigt når filteret sættes. Dvs. tidspunktet skal være 22:24:00 som i eksemplet. Det må ikke være 22:24:35, så bliver datasættet tomt...

Hvis du f.eks. ønsker at filtrere, således at der ikke tages hensyn til sekunderne. Dvs. alle tider >= 22:24:00 og < 22:24:59 medtages gør du flg.:
1. Glemmer ADOTable3.Filter og bruger OnFilterRecord
2. Ændrer OnFilterRecord til

Fold kodeboks ind/udKode 

3. Styrer evt. opdateringen af datasættet/filtreringen ved at kalde ADOTable3.Refresh med mellemrum f.eks. via en timer el. på anden vis.

mvh.
hsv


[Redigeret d. 03/01-05 23:04:20 af HSV]

[Redigeret d. 03/01-05 23:06:27 af HSV]


Troede det var omvendt med Filter og OnRecordFilter ;)
Men tak for "teorien" :)

Og mange tak for svaret :D det virker helt perfekt!

Mvh.
Rune Jensen
---------------------------------------------------------------------------
##The one who laugh last is the one who think slowest!##
---------------------------------------------------------------------------



t