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