В прошлом шаге я слепил довольно объемную таблицу. Спрашивается - зачем? Дело в том, что типы, описанные в ней, используются при создании полей.
Давайте определимся с номенклатурой. Поле - это ячейка в таблице. Запись - набор из полей. Так вот, существуют разные типы полей - обычные, индексные и ключевые. Обычные поля - просто данные. Индексное поле - поле, по которому данные сортируются. Ключевое - поле, значение которого уникально.
В общем-то четкого разделения нет. Ведь программа базы данных может сортировать таблицу и по обычным полям, а индексное поле может быть также уникальным.
В 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();
Это все еще объяснять и объяснять. Но, я надеюсь, общая логика понятна. Продолжим в следующем шаге.