Шаг 9 - Создание таблиц. Ключи и индексы

В прошлом шаге я слепил довольно объемную таблицу. Спрашивается - зачем? Дело в том, что типы, описанные в ней, используются при создании полей.

Давайте определимся с номенклатурой. Поле - это ячейка в таблице. Запись - набор из полей. Так вот, существуют разные типы полей - обычные, индексные и ключевые. Обычные поля - просто данные. Индексное поле - поле, по которому данные сортируются. Ключевое - поле, значение которого уникально.

В общем-то четкого разделения нет. Ведь программа базы данных может сортировать таблицу и по обычным полям, а индексное поле может быть также уникальным.

В BDE достаточно логично поределена структура построения полей и их типов. Для этого имеются классы TxxxDef (три икса здесь обозначают подстановку, а то мало ли что Вы подумаете ;)), произведенные ото абстрактного базового класса TNamedItem. В компоненте TTable имеются и соответствующие свойства

Как и следовало предполагать, эти свойства содержат в себе определения индексных и обычных полей. Здесь нет свойства типа TKeyDefs, потому что в таблицах типа Парадокс индексные поля могут быть сами по себе уникальны. За счет этих свойств и задаются параметры таблицы, ее сетка. Создание таблицы довершает метод CreateTable.

Теории было много, теперь практика. Вот пример, честно скажу, взятый их Хелпа и перекомментированный автором (то есть мной).

if (!Table1->Exists) // Don't overwrite an existing table 
{
  Table1->Active = false; // Компонент TTable должен быть отключен.

  // Опишем параметры таблицы.
  Table1->DatabaseName = "BCDEMOS";//это по желанию
  Table1->TableType = ttParadox; //как обычно, Парадокс.
  Table1->TableName = "CustInfo";//имя создаваемой таблицы.

  // Опишем поля и их типы.
  Table1->FieldDefs->Clear();
  TFieldDef *pNewDef = Table1->FieldDefs->AddFieldDef();
  pNewDef->Name = "Field1";// имя, обычной строкой.
  pNewDef->DataType = ftInteger;//то, о чем я говорил.
 //установим, является ли поле обязательным
  pNewDef->Required = true;
 //еще одно поле.
  pNewDef = Table1->FieldDefs->AddFieldDef();
 
  pNewDef->Name = "Field2";
  pNewDef->DataType = ftString;
 //определим размер поля.
  pNewDef->Size = 30;

  // Теперь взялись за индексы

  Table1->IndexDefs->Clear();
  
 /* Первый индекс безымянный, поскольку это основной индекс Парадокса. */

  Table1->IndexDefs->Add("","Field1", TIndexOptions() <<ixPrimary << ixUnique); 

  Table1->IndexDefs->Add("Fld2Index","Field2", TIndexOptions() << ixCaseInsensitive);

  // Ну и наконец, создаем таблицу.

  Table1->CreateTable();

Это все еще объяснять и объяснять. Но, я надеюсь, общая логика понятна. Продолжим в следующем шаге.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Аванесов Самвел - 4.01.2002