Счетчик HotLog

На главнуюЧто я делаю...Программы автора и не только...Творчество
Статьи автораКнига отзывов и предложенийОбо мне, любимомФотоальбом

 
 

Как создать базу данных 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 слишком обширная и сложная для одной маленькой статьи.

 
 

4.10.2007

 
     
Hosted by uCoz