C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 9 - Создание таблиц. Ключи и индексы / BDE / Borland C++

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

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

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

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

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

  • TIndexDefs
  • TFieldDefs

Как и следовало предполагать, эти свойства содержат в себе определения индексных и обычных полей. Здесь нет свойства типа 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();

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


| |
Автор Аванесов Самвел.
[AD]