VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






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

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

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

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


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©