Создание таблиц и индексов в реалтайме

Delphi и базы данных
Создание таблиц и индексов в реалтайме:

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

Logo
Рис 1. Форма

Для примера я бросил на форму две кнопки, один TEdit, TTable, TDataSource и DBGrid (см. рисунок 1). У DataSource1 свойство DataSet я поставил в Table1 , а у DBGrid в DataSource засунул DataSource1 . Всё это я сделал, чтобы можно было сразу увидеть созданную таблицу.

Кнопки у меня такие: первая для создания таблицы, а вторая для индексирования.

По нажатию первой, я намулевал вот что:

procedure TForm1.Button1Click(Sender: TObject);
begin
 with Table1 do
  begin
   Active := False;//Отключаю базу
   TableName := Edit1.Text;//Задаю имя новой базы
   FieldDefs.Clear;//Очищаю все текущие поля
   with FieldDefs.AddFieldDef do//Добавляю новое поле
    begin
     Name := 'Field1';//Задаю имя нового поля
     DataType := ftAutoInc;//Задаю тип autoincrement
     Required := True;// Делаю поле обязательным
    end;
   with FieldDefs.AddFieldDef do//Добавляю ещё новое поле
    begin
     Name := 'Field2';
     DataType := ftInteger;//Тип integer
    end;
   with FieldDefs.AddFieldDef do//Добавляю новое поле
    begin
     Name := 'Field3';
     DataType := ftString;//Тип строка
     Size := 30;// Размер строкового поля
    end;
  CreateTable;//Создаю новую базу с этими полями
  Active:=true;//Активирую её.
 end;
end;

В самом начале я устанавливаю Table1.Active в False, потому что создание таблицы можно производить только при отключённом компоненте. Если у тебя несколько компонентов ТTable связаны с базой, то нужно отключить их все.

Теперь процедура для кнопки 2, где я добавляю индексы. Обрати внимание, что таблица снова отключается Active := False.

procedure TForm1.Button2Click(Sender: TObject);
begin
 with Table1 do
  begin
   Active := False;//Отключаю таблицу
   IndexDefs.Clear;//Очищаю текущие индексы
   with IndexDefs.AddIndexDef do //Добавляю индекс
    begin
     Name := '';//Имя индекса. Это главный индекс, поэтому имя пустое
     Fields := 'Field1';//Индексируемое поле
     Options := [ixPrimary];//Тип индекса - главный
    end;
   with IndexDefs.AddIndexDef do//Добавляю ещё индекс
    begin
     Name := 'Fld2Indx'; //Имя индекса
     Fields := 'Field3'; //Индексируемое поле
     Options := [ixCaseInsensitive]; //Тип индекса (это вторичный)
    end;
   Active := true; //Активирую базу
  end;
end;

В моем примере я очищаю текущие индексы. Если ты хочешь сохранить их, то можно не очищать, а просто добавить.

Первый индекс я создаю главным. Для этого я указал ixPrimary. Если этот параметр не указан, то индекс будет вторичным.

Всё остальное описано в коментариях. Удачи!!!

 Исходники примера забирай здесь



Опубликовал admin
13 Май, Вторник 2003г.

Комментарии

Друг, наиогромнейшее спасибо. Исчерпывающий и подробный ответ.

Втулка для мясорубки бриз аксион втулка шнека мясорубки аксион бриз купить zipinsk.ru.


Программирование для чайников.