Итак, данная статья будет посвящена расширению компонентов ADO - ADOX. Библиотека ADOX, возможно в настоящее время, не очень используется, тут скорее всего больше ее заменяют SQL-запросы, но все же, мы ее поверхностно рассмотрим.
Данная библиотека, поможет нам, с помощью компонентов, классов, создавать базу данных MS Access, создавать таблицы MS Access, а также поля, в том числе и ключевые. На самом деле мне нравится данный инструмент, так как с помощью него, можно спокойно делать резервные копии БД MS Access, это мы рассмотрим дальше, после того, как научимся получать список таблиц, а также список полей в БД.
В этой статье, мы рассмотрим, как импортировать данную библиотеку в проект Delphi, на примере IDE Delphi 7. С другой IDE , проблем возникнуть, я думаю, не должно.
Ну, что приступим. Выполним команду Project-Import Type Library…, после чего появится окно и в данном окне, выбираем Microsoft ADO Ext. 6.0 for DLL and Security (Version 6.0), после чего нажимаем Create Unit, если у Вас в списке только более ранняя версия или наоборот, выбирайте ее:
После, создаем проект и в него подключаем модуль, в uses, ADOX_TLB, кроме этого на форму нашего проекта я поместил TButton.
Теперь, давайте определимся, что у нас будет происходить по нажатию на кнопку, я составил следующее:
- создаваться БД (файл MDB)
- создаваться таблица (TestTable)
- создаваться ключевое поле (id-счетчик)
- создаваться поля, других типов данных (Фамилия-Текстовый, Возраст-Целочисленный)
Тут, мы определились. Теперь начнем с создания нашей БД. Для создания новой БД, в модуле ADOX_TLB, описан тип — _Catalog, вот им мы и воспользуемся. Для создания правильного файла БД, необходимо написать следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
DB:Catalog;
Tables:Table;
Columns:Column;
begin
DB:=CoCatalog.Create;
DB.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb');
DB.Set_ActiveConnection('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb');
end;
Тут все очень просто, при помощи функции Create, создаем наш mdb-файл, при этом указывая тип подключения, а также расположение нашей БД. Если файл, уже существует, то естественно будет ошибка. Дальше, при помощи процедуры Set_ActiveConnection устанавливаем активное подключение к нашей БД, чтобы можно было с ней работать, в дальнейшем. Думаю тут все понятно
Теперь приступим к созданию нашей таблицы, в наше БД. Для этого существует тип _Table. Необходимо вначале проинициализировать переменную, после чего указать имя таблицы, а также указать имя БД, к которой будет принадлежать наша таблица, вот такой код это делает:
procedure TForm1.Button1Click(Sender: TObject);
var
DB:Catalog;
Tables:Table;
Columns:Column;
begin
DB:=CoCatalog.Create;
DB.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb');
DB.Set_ActiveConnection('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb');
Tables:=CoTable.Create;
Tables.Name:='TestTable';
Tables.ParentCatalog:=DB;
DB.Tables.Append(Tables);
end;
Инициализируем переменную Tables, затем с помощью свойства Name - задаем имя нашей таблицы, а с помощью свойства ParentCatalog, указываем базу данных, к которой будет принадлежать наша таблица, затем просто добавляем таблицу в нашу БД.
Теперь приступаем к созданию наших полей, для этого существует тип — _Column, но можно обойтись и без него, что дальше мы и рассмотрим это. Начнем мы с создания ключевого поля, для этого необходимо задать его имя, задать ему тип данных, а также указать, что оно будет автоматически увеличиваться, при добавлении новой записи в БД, то есть increment, ну и добавить описание данного поля. Делается это, следующим образом:
procedure TForm1.Button1Click(Sender: TObject);
var
DB:Catalog;
Tables:Table;
Columns:Column;
begin
DB:=CoCatalog.Create;
DB.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb');
DB.Set_ActiveConnection('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb');
Tables:=CoTable.Create;
Tables.Name:='TestTable';
Tables.ParentCatalog:=DB;
DB.Tables.Append(Tables);
Columns:=CoColumn.Create;
with Columns do
begin
ParentCatalog:=DB;
Name:='id';
type_:=adInteger;
Properties['Autoincrement'].Value:=True;
Properties['Description'].Value:='Ключевое поле';
end;
Tables.Columns.Append(Columns,0,0);
end;
С помощью свойства Name - указываем имя нашего поля, затем с помощью свойства ParentCatalog - указываем БД, где находится наша таблица, с помощью свойства _type - указываем тип нашего поля, а с помощью свойства Properties - указываем описание поля, а также его тип, в нашем случае increment.
В самом конце добавляем в нашу таблицу поле, с помощью процедуры Append, где последние 2 параметра — 0, так как, мы уже указали тип нашего поля.
Ну, а теперь создадим оставшиеся поля — это Фамилия и Возраст, но уже не будем использовать тип _Column. Для этого, сразу воспользуемся процедурой Append объекта CoTable.
procedure TForm1.Button1Click(Sender: TObject);
var
DB:Catalog;
Tables:Table;
Columns:Column;
begin
DB:=CoCatalog.Create;
DB.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb');
DB.Set_ActiveConnection('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb');
Tables:=CoTable.Create;
Tables.Name:='TestTable';
Tables.ParentCatalog:=DB;
DB.Tables.Append(Tables);
Columns:=CoColumn.Create;
with Columns do
begin
ParentCatalog:=DB;
Name:='id';
type_:=adInteger;
Properties['Autoincrement'].Value:=True;
Properties['Description'].Value:='Ключевое поле';
end;
Tables.Columns.Append(Columns,0,0);
Tables.Columns.Append('Фамилия',adVarWChar,255);
Tables.Columns.Append('Возраст',adInteger,0);
end;
В итоге, у меня получилось следующее: