Как создать базу данных Access
Обидно, но в среде Visual Basic это делается чрезвычайно просто:
Dim NewDB As Database
Dim NewWs As Workspace
Dim lngDBOpts As Long
' Установить опции создания базы данных.
Set lngDBOpts = dbVersion30 + dbEncrypt
' Создать рабочее пространство.
Set NewWs = DBEngine.Workspaces(0)
' Создать базу данных.
Set NewDB = NewWs.CreateDatabase(strDBPath, dbLangCyrillic, lngDBOpts)
Call MsgBox "База данных создана.", vbInformation, "Создание базы данных"
' Освободить объекты.
Set NewDB = Nothing
Set NewWS = Nothing
|
К сожалению, в среде Delphi так просто этого не добиться. Один из способов -
воспользоваться объектной моделью DAO. По сути, мы просто переписываем приведенный
выше пример на язык Delphi:
uses
ComObj;
function CreateDatabase(const FileName: String): Boolean;
const
CYRILLIC_LANGUAGE = ';LANGID=0x0419;CP=1251;COUNTRY=0';
DATABASE_VERSION_30 = 32;
DATABASE_ENCRYPT = 2;
var
DBEngine, Workspace: Variant;
begin
try
DBEngine := CreateOleObject('DAO.DBEngine.35');
try
Workspace := DBEngine.Workspaces[0];
Workspace.CreateDatabase(FileName, CYRILLIC_LANGUAGE,
DATABASE_VERSION_30 + DATABASE_ENCRYPT);
Result := True;
finally
VarClear(WorkSpace);
VarClear(DBEngine);
end;
except
Result := False;
end;
end;
|
Аналогично поступаем и далее. Используя методы объектов создаем нужные таблицы, поля
и так далее. Но проще уже подключиться к созданной базе данных и дальнейшие манипуляции
производить, например, через ADO, благо Delphi предоставляет набор классов для
работы с базами Access с помощью этой технологии.
Приведенный пример кода - далеко не самый лучший вариант решения задачи. Позднее
связывание и работает медленнее, и пользоваться им неудобно, но иначе необходимо
описание интерфейсов DAO. Когда я его найду, перепишу пример лучше.
Я нашел способ, как можно провернуть эту операцию «красиво». Дляя этого нужно
экспортировать библиотеку типов Microsoft DAO 3.51 Object Library (DAO350.dll). После этого полученный
модуль DAO_TLB.pas подключить к проекту. Теперь можно пользоваться объектной моделью. В
примере не будем ограничиваться созданием пустой базы данных, создадим в ней тестовую
таблицу:
uses
DAO_TLB;
function CreateDatabase(const FileName: String): Boolean;
const
CYRILLIC_LANGUAGE = ';LANGID=0x0419;CP=1251;COUNTRY=0';
var
ADBEngine: DBEngine;
AWorkSpace: Workspace;
ADatabase: Database;
ATableDef: TableDef;
AField: Field;
begin
try
ADBEngine := CoDBEngine.Create;
try
AWorkSpace := ADBEngine.Workspaces.Item[0];
// Создаем базу данных.
ADatabase := AWorkSpace.CreateDatabase(FileName, ';LANGID=0x0419;CP=1251;COUNTRY=0',
dbVersion30);
// Создаем таблицу NewTable.
ATableDef := ADatabase.CreateTableDef('NewTable', EmptyParam, EmptyParam, EmptyParam);
// Создаем поле типа "Дата".
AField := ATableDef.CreateField('ADate', dbDate, EmptyParam);
ATableDef.Fields.Append(AField);
// Создаем целочисленное поле.
AField := ATableDef.CreateField('AInteger', dbInteger, EmptyParam);
ATableDef.Fields.Append(AField);
// Создаем текстовое поле длиной 100 символов.
AField := ATableDef.CreateField('AText', dbText, 100);
ATableDef.Fields.Append(AField);
ADatabase.TableDefs.Append(ATableDef);
Result := True;
finally
AField := nil;
ATableDef := nil;
AWorkSpace := nil;
ADBEngine := nil;
end;
except
Result := False;
end;
end;
|
Дополнительную информацию искать следует в MSDN,
технология DAO слишком обширная и сложная для одной маленькой статьи.
|