
- •1. Наборы данных
- •Var I: integer;
- •1.1. Состояния наборов данных
- •If not CheckBoxl.Checked then Abort;
- •If not CheckBoxl.Checked then begin
- •If CheckBox2.Checked then
- •If CheckBox2.Checked then begin
- •1.2. Режимы наборов данных
- •1.3. Доступ к полям
- •Var n: integer;
- •Var X: integer;
- •Var X: integer;
- •1.4. Особенности набора данных Table
- •If OpenDialogl.Execute then begin
- •Var n: integer;
- •If Editl.CanFocus then Editl.SetFocus;
- •1.5. Особенности набора данных Query
- •Interface
- •Implementation
- •2. Объекты поля
- •2.1 Редактор полей
- •2.2. Операции с полями
- •Var X: integer;
- •Var s: string;
- •X: real;
- •Var s: string;
- •X: real;
- •If not Tablel.Fields[2].IsValidChar(Editl.Text[1]) then
- •If (TablelCode.Required) and (TablelCode.IsNull)
- •3. Источник данных
- •Var n: integer;
- •1. Отображение и редактирование значения логического поля
- •2. Отображение и выбор значения поля
- •3. Отображение и выбор значения поля из списка
- •3.1. Простой и комбинированный списки
- •3.2. Списки, сформированные по значениям поля набора данных
- •4. Представление записей в табличном виде
- •4.1 Характеристики сетки
- •Var r :tRect;
- •4.2. Столбцы сетки
- •Var c, n :integer;
- •4.3. Использование модифицированной сетки
- •5. Использование навигационного интерфейса
- •6. Вывод графических изображений
- •Interface
- •Implementat ion
- •If OpenPictureDialogl.Execute then
- •If SavePictureDialogl.Execute then
- •7. Построение диаграмм
- •Var n: integer;
Var n: integer;
begin
for n:=0 to Tablel.IndexDefs.Count-1 do begin
ListBoxl.Items.Add(Tablel.IndexDefs[n].Name);
ListBox2.Items.Add(Tablel.IndexDefs[n].Fields);
end;
end;
Рис. 7.2. Получение списка индексов и полей
Для получения списка имен индексов можно использовать метод GetItemNames(List: TStrings). Он возвращает список имен индексов через параметр List, в качестве которого можно использовать любой объект типа TStrings, например, ListBoxItems.
Получение списка имен индексов в программе может выглядеть так:
ListBoxl.Items.Clear;
Tablel.GetItemNames(ListBoxl.Items);
Для добавления и удаления индексов используются методы Add и Clear. Процедура Add (const Name, Fields: String; Options: TIndexOptions) добавляет новый индекс. Параметры этой процедуры не отличаются от параметров метода Addindex набора данных Table, однако для метода Add не требуется перевод таблицы в режим монопольного доступа, что делает его использование более удобным.
Замечание
Для таблиц Paradox при определении ключа (главного индекса) название индекса не задается, т. к. этот индекс не именуется.
Процедура Clear удаляет все индексы, содержащиеся в списке индексов. Вот как удаление и добавление индексов к таблице реализуется в программе:
Tablel.IndexDefs.Clear;
Tablel.IndexDefs.Add('' , 'Number', [ixPrimary, ixUnique]);
Tablel.IndexDefs.Add('indMain', 'Code;Position',
[ixDescending, ixCaseInsensitive]);
В этом примере из набора данных Tablel, связанного с таблицей Paradox, удаляются все индексы и создаются два новых индекса: первичный индекс, построенный по полю Number, и вторичный индекс indMain, построенный по полям Code и Position.
Ряд методов предназначен для поиска индексов в списке, например, IndexOf, Find и FindIndexForFields. Их удобно использовать в случае, когда индексы или их поля вводятся пользователем на этапе выполнения приложения. Перед использованием таких индексов целесообразно проверять, существуют ли они в списке индексов, т. к. в противном случае мы рискуем получить исключительную ситуацию.
Функция IndexOf (const AName: String): Integer осуществляет поиск индекса по имени, заданному параметром AName. В качестве результата возвращается номер индекса в свойстве items. В случае неудачного поиска возвращается значение -1.
Рассмотрим следующий пример на поиск индекса:
procedure TForml.Button2Click(Sender: TObject);
begin
if Tablel.IndexDefs.IndexOf(Editl.Text) = -1 then begin
MessageDlg('Индекс отсутствует!', mtError, [mbOK], 0);
If Editl.CanFocus then Editl.SetFocus;
end;
end;
Здесь при нажатии кнопки Button2 выполняется проверка существования индекса, имя которого введено в поле редактирования Editl. При отсутствии в наборе данных Tablel указанного индекса выдается сообщение об ошибке, и фокус ввода устанавливается на Editl.
Функция FindIndexForFields (const Fields: String): TIndexDef осуществляет поиск индекса по списку полей, заданному параметром Fields. В случае успешного поиска функция возвращает информацию об индексе, если же индекс отсутствует, то генерируется исключительная ситуа-ция.
Замечание
Если не найден индекс, поля которого полностью совпадают с заданными, но есть индексы, которые включают в себя все заданные поля, то в качестве результата возвращается первый такой индекс.
При запуске приложения информация об индексах таблицы считывается с диска из соответствующих индексных файлов. При динамическом, т. е. в процессе выполнения приложения, изменении индексов содержимое индексных файлов остается прежним. При необходимости программист должен предусмотреть сохранение новой информации на диске для ее последующего применения. Для этого можно использовать свойство StoreDefs типа Boolean, которое указывает, нужно ли сохранять информацию об индексах на диске. При любых изменениях в индексах этому свойству нужно установить значение True, и тогда информа-ция об индексах будет автоматически сохранена на диске. Если изменения в индексах сохранять не нужно, то достаточно установить свойству StoreDefs значение False, и изменения в индексах будут действовать только при выполнении приложения.