К сожалению, использование свойства Filter фильтра TClientDataSet для сравнения целочисленных значений не работает должным образом, поскольку базовая обработка выражений не поддерживает преобразование типов из строковых представлений в целочисленные значения. Гораздо проще оставить свойство Filter пустым и использовать событие OnFilterRecord
, чтобы определить, соответствуют ли записи вашему целочисленному критерию фильтра. Примерно так:
var
iStartID : Integer; // a field of your form or datamodule
[...]
StartID := 5123456;
iStartID := StrToInt(StartID);
procedure TForm1.CDS1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
// set Accept to True if the current record matches the filter condition(s)
begin
// Set iStartID from your StartID value before activating the filter
// CDS1ID is a persistent field defined for the ID. Otherwise, use
// CDS1.FieldByName('ID').AsInteger
Accept := CDS1ID.AsInteger > iStartID;
end;
Когда вы хотите изменить StartID, выключите CDS1.Filtered (False), измените значения StartID / iStartID, а затем снова включите Filtered (True).
Обратите внимание, я использовал переменную iStartID, чтобы избежать снижения производительности при выполнении CDS.FieldByName для каждой строки в наборе данных.