534______________________________________________Глава 9

Например, операторы

Tablel->IndexFieldNames = "Fam";

Tablel->SetRangeStart () ;

Tablel->FieldByName("Fam")->AsString = "A";

Tablel->SetRangeEnd() ;

Tablel->FieldByName("Fam")->AsString = "Г";

Tablel->ApplyRange() ;

приведут к тому, что доступными будут только записи сотрудников, фамилии ко-
торых начинаются с букв «А», «Б», «В».

На результаты работы методов SetRangeStart и SetRangeEnd для числовых по-
лей влияет свойство набора данных KeyExclusive. Оно определяет, будут ли считать-
ся сами заданные границы входящими в диапазон (при KeyExclusive = false, это
значение принято по умолчанию), или не входящими (при KeyExclusive = true).
Иначе говоря, при KeyExclusive = false используются операции отношения >, <, а
при KeyExclusive = true — >, <• Например, если вы хотите отобрать записи, в кото-
рых год рождения сотрудников лежит в определенных пределах, то при коде

Tablel->IndexFieldNames = "Year b";

Tablel->SetRangeStart();       ~
Tablel->FieldByName("Year_b")->AsInteger = 1950;

Tablel->SetRangeEnd() ;

Tablel->FieldByName("Year_b")->AsInteger = 1960;

Tablel->ApplyRange() ;

будут отобраны записи, в которых год рождения лежит в пределах 1950 — 1960,
включая годы 1950 и 1960. А при коде

Tablel->IndexFieldNames = "Year_b";

Tablel->SetRangeStart() ;

Tablel->FieldByName("Year_b")->AsInteger = 1950;

Tabiel->KeyExclusive = true;

Tablel->SetRangeEnd();

Tablel->FieldByName("Year_b")->AsInteger = 1960;

Tablel->ApplyRange() ;

записи, соответствующие 1950 году, не войдут в число отобранных.

Имеется и более простой способ установки диапазона — метод SetRange. Он
определен следующим образом:

void   fastcall SetRange(const System::TVarRec * StartValues,
const int StartValues Size,
const System:: TVarRec * EndValues,
const int EndValues Size) ;

Открытые массивы StartValues и EndValues должны содержать соответствен-
но нижние и верхние значения диапазонов полей, являющихся ключевыми. Та-
ким образом, метод SetRange заменяет последовательное обращение к методам
SetRangeStart, SetRangeEnd и ApplyRange. Например, приведенные ранее опе-
раторы, задающие диапазон фамилий в отобранных записях, могут быть заменены
следующими:

Tablel->IndexFieldNames = "Fam";

Tablel->SetRange(&TVarRec("A"),0,&TVarRec("Г") ,0);

Можно, конечно, использовать и другие способы работы с открытыми массивами
типа TVarRec (в частности, макрос OPENARRAY), рассмотренные в разделе 9.11.6.

Если вы хотите работать не просто со всеми сотрудниками, фамилии которых
начинаются на «А» — «В», а с теми из них, которые работают в цехе 1, то приве-
денные выше операторы можно изменить следующим образом:

Tablel->IndexFieldNames = "Dep;Fam";

Tablel->SetRange(OPENARRAY(TVarRec,("Цех I","A")),

OPENARRAY(TVarRec,("Цех 1","Г")));