I have a problem when it comes to filter a .csv file uploaded in TJvCsvDataSet. The following is a MCVE to explain
program Project3;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
JvCsvData,
data.DB;
var
FJvCsvDataSet: TJvCsvDataSet;
I:Integer;
begin
;
FJvCsvDataSet := TJvCsvDataSet.Create(nil);
FJvCsvDataSet.CsvFieldDef :=
'VTHB:%,VTHS:%,VTHBBP:&,VTBBSP:&,VTHBLP:&,VTHBLS:&,VTHTS:@';
FJvCsvDataSet.FieldDefs.Add('VTHB', ftInteger, 0, False);
FJvCsvDataSet.FieldDefs.Add('VTHS', ftInteger, 0, False);
FJvCsvDataSet.FieldDefs.Add('VTHBBP', ftFloat, 0, False);
FJvCsvDataSet.FieldDefs.Add('VTBBSP', ftFloat, 0, False);
FJvCsvDataSet.FieldDefs.Add('VTHBLP', ftFloat, 0, False);
FJvCsvDataSet.FieldDefs.Add('VTHBLS', ftFloat, 0, False);
FJvCsvDataSet.FieldDefs.Add('VTHTS', ftDateTime, 0, False);
FJvCsvDataSet.FileName :=
'E:\...\abc.csv';
FJvCsvDataSet.Open;
FJvCsvDataSet.First;
// FJvCsvDataSet.Sort('VTHB,VTHBBP', True);
FJvCsvDataSet.Filtered := False;
FJvCsvDataSet.Filter := '';
for I := 1 to 1093 do
begin
FJvCsvDataSet.Filter:='VTHB=' + IntToStr(I);
FJvCsvDataSet.Filtered := True;
end;
FJvCsvDataSet.Free;
end.
and the following is a sample of abc.csv uploaded by FJvCsvDataSet
VTHB,VTHS,VTHBBP,VTBBSP,VTHBLP,VTHBLS,VTHTS
1,1,3.05,279.86,3.1,115.98,2019-08-10 14:28:47.505
1,2,3.9,259.65,3.95,237.73,2019-08-10 14:28:47.52
1,3,3.9,136.48,3.95,31.97,2019-08-10 14:28:47.52
1,5,10.5,68.83,11,52.03,2019-08-10 14:28:47.52
1,4,12.5,41.4,13,47.75,2019-08-10 14:28:47.52
2,1,3.05,279.86,3.1,115.98,2019-08-10 14:28:47.863
2,2,3.9,259.65,3.95,237.73,2019-08-10 14:28:47.863
2,3,3.9,136.48,3.95,31.97,2019-08-10 14:28:47.863
2,5,10.5,68.83,11,52.03,2019-08-10 14:28:47.863
2,4,12.5,41.4,13,47.75,2019-08-10 14:28:47.863
When the statement FJvCsvDataSet.Filter:='VTHB=' + IntToStr(I); is executed FJvCsvDataSet.RecordCount does not change therefore the filter is not performed
What am I doing wrong ?