Программное создание базы данных

Павел Сурменок

Часто нужно создать новую базу данных по ходу выполнения программы. Как же это
сделать? Об этом будет рассказано в статье.

Создание базы данных производится с помощью библиотеки DAO. Для начала нужно
подключить эту библиотеку. Для этого в меню Project/References отметьте пункт "Microsoft
DAO 3.6 Objects Library". В составе Visual Basic 6.0 поставляется библиотека
версии 3.6. Если у Вас более ранняя версия - отметьте её, особых различий нет.

» Создание копии имеющейся базы данных

Сделать копию имеющейся базы данных с сохранением структуры и данных
относительно просто. Во-первых, можно просто скопировать файл базы данных:

FileCopy "C:\db1.mdb", "C:\db2.mdb"

А во-вторых, для этого можно использовать метод CompactDatabase объекта верхнего
уровня DBEngine библиотеки DAO. Преимущество использования этого метода перед
простым копированием файла состоит в том, что база не только копируется, но и
производится сжатие (физическое удаление всех удаленных записей) и
дефрагментация базы данных. А это увеличивает скорость работы с базой данных и
уменьшает её размер.

DBEngine.CompactDatabase "C:\db1.mdb", "C:\db2.mdb"

Также при использовании метода CompactDatabase можно изменить версию базы данных,
изменить пароль базы данных и установить язык базы.

» Создание новой базы данных

Для создания новой базы тоже есть два способа. Если Вам заранее известна
структура базы данных (кол-во и имена таблиц, полей, индексов), то можно при
создании программы подключить файл ресурсов с базой данных, имеющей нужную
структуру. Затем, когда нужно создать базу данных с этой структурой, извлекаем
её из файла ресурсов и сохраняем на диск в нужном месте:

Dim a() As Byte
Dim fn As Integer

a() = LoadResData(101, "CUSTOM")

fn = FreeFile
Open "C:\db1.mdb" For Binary Access Write As fn
Put #fn, , a()
Close #fn

А если структура базы данных заранее неизвестна? Тогда используем более гибкий
способ.
Начнём с того, что создадим пустую базу. Для этого у объекта DBEngine имеется
метод CreateDatabase. Он создает новый экземпляр объекта Database, сохраняет его
на диск и возвращает открытый объект. Обязательными параметрами этого метода
являются name (определяет путь и имя создаваемой БД) и locale (параметры). В
параметре locale обязательно нужно указать язык БД. Он определяется константами,
имя которых начинается на dbLang. Русскому языку соответствует константа
dbLangCyrillic.

Dim db As DAO.Database
Set db = DAO.CreateDatabase ("C:\test.mdb", dbLangCyrillic)

Также можно установить пароль на создаваемую БД. Для этого к параметру locale
необходимо добавить строку ";pwd=ВашПароль"

Set db = DAO.CreateDatabase ("C:\test.mdb", dbLangCyrillic & ";pwd=Бейсик")

Параметр options необязательный. Он позволяет изменить версию БД и зашифровать
БД.

Set db = DAO.CreateDatabase ("C:\test.mdb", dbLangCyrillic, dbVersion30 &
dbEncrypt)

Список констант, которые можно использовать в параметре options:

Константа Значение Описание
dbEncrypt 2 Для создания зашифрованной БД.
dbVersion10 8 Для создания БД версии 1.0.
dbVersion11 16 Для создания БД версии 1.1.
dbVersion20 32 Для создания БД версии 2.0.
dbVersion30 64 Для создания БД версии 3.0 (совместима с версией 3.5).

База данных создана. Теперь нужно заполнить её структуру (создать таблицы, поля,
индексы). Для этого воспользуемся такими объектами библиотеки DAO, как TableDef
(этот объект содержит таблицу), Field (содержит поле) и Index (содержит индекс).
Для начала разберёмся с таблицами.

Итак, сначала создаём таблицу. Для этого воспользуемся методом CreateTableDef
объекта Database. Он создаёт новый экземпляр объекта TableDef и возвращает его
нам. Этот метод имеет 4 параметра. Все они необязательные. Первый параметр -
name указывает имя создаваемой таблицы.

Dim tbd As DAO.TableDef
Set tbd = db.CreateTableDef ("Таблица1")

Параметр attributes позволяет задать атрибуты таблицы. Для того чтобы создать
копию имеющейся таблицы нужно установить параметр source равным имени таблицы -
источника данных. Эта таблица обязательно должна присутствовать в базе данных.

Dim tbd As DAO.TableDef
Set tbd = db.CreateTableDef ("Таблица2",, "Таблица1")

Четвёртый параметр connect используется при создании связанных таблиц. В данной
статье это рассмотрено не будет.

Созданная таблица пока ещё не присутствует в базе данных. Для добавления таблицы
в БД нужно добавить её в коллекцию TableDefs. Но это мы сделаем только после
того, как будут созданы все поля и индексы.
Добавим в таблицу поля. Поля создаются методом CreateField объекта TableDef. Он
имеет 3 параметра. Параметр name устанавливает имя создаваемого поля. Параметр
type устанавливает тип поля. Он может принимать значения одной из следующих
констант:

Константа Значение Описание
dbBigInt 16 Большой целочисленный.
dbBinary 9 Двоичные данные.
dbBoolean 1 Логический. Может принимать значения True/False.
dbByte 2 Байт. Это число от 0 до 255.
dbChar 18 Текстовый фиксированной длины. Длина устанавливается параметром size.
dbCurrency 5 Денежный. Может содержать до 15 знаков слева от запятой и до 4
справа.
dbDate 8 Дата и время.
dbDecimal 20 Десятичный.
dbDouble 7 Числовой тип двойной точности.
dbFloat 21 С плавающей точкой.
dbGUID 15 128 битный глобальный универсальный идентификатор.
dbInteger 3 Целочисленный.
dbLong 4 Длинный целочисленный.
dbLongBinary 11 Длинные двоичные данные.
dbMemo 12 В поле этого типа можно хранить любые данные.
dbNumeric 19 Числовой.
dbSingle 6 Числовой тип одинарной точности.
dbText 10 Текстовый. Длина устанавливается параметром size. Может содержать
больше 255 символов.
dbTime 22 Время.
dbTimeStamp 23 Дата и время.
dbVarBinary 17 Двоичный фиксированной длины.

Но из этих констант с базами MSAccess работают только dbBoolean, dbByte,
dbInteger, dbLong, dbCurrency, dbSingle, dbDouble, dbDate, dbText, dbLongBinary,
dbGUID и dbMemo. Остальные константы припасены для баз данных другого формата (под
управлением ODBCDirect).

Параметр size определяет размер поля.

Dim fld As DAO.Field
Set fld = tdf.CreateField ("Поле1", dbText, 50)

Все аргументы метода CreateField необязательные, поскольку задать имя, тип и
размер можно после создания поля с помощью соответствующих свойств.

Set fld = tdf.CreateField ()
fld.Name = "Поле"
fld.Type = dbText
fld.Size = 100

После создания поля нужно добавить его в коллекцию Fields объекта TableDef. Для
этого используем метод Append коллекции.

tdf.Fields.Append fld

Поле добавлено. Можем создать ещё несколько полей.

Set fld = tdf.CreateField ("Поле2", dbInteger)
tdf.Fields.Append fld
Set fld = tdf.CreateField ("Поле3", dbBoolean)
tdf.Fields.Append fld

Поля созданы. Осталось создать индексы. Для создания индекса используется метод
CreateIndex объекта TableDef. Он создаёт экземпляр объекта Index и возвращает
его. Метод CreateIndex имеет всего один параметр - name. Он устанавливает имя
создаваемого индекса.

Dim inx As DAO.Index
Set inx = tdf.CreateIndex ("Index1")

Добавим в индекс поля. Создадим поле с помощью метода CreateField объекта Index
и добавим поле в его коллекцию Fields. В качестве аргумента name метода
CreateField задаём имя имеющегося поля, которое добавляем в индекс.

Set fld = inx.CreateField ("Поле2")
inx.Fields.Append fld

Всё готово. Теперь нужно добавить таблицу в коллекцию TableDefs и дело в шляпе!

db.TableDefs.Append tdf
db.TableDefs.Refresh

Теперь, когда база данных уже создана, закрываем объекты и освобождаем память.

rs.Close
db.Close
Set rs = Nothing
Set inx = Nothing
Set fld = Nothing
Set tdf = Nothing
Set db = Nothing

» Заключение

База данных создана. В ней появилась таблица, поля, индекс. Теперь остаётся
заполнить её. Как это сделать я рассказывать не буду. Возникнут проблемы -
пишите мне, вместе разберёмся!

 


Страница сайта http://silicontaiga.ru
Оригинал находится по адресу http://silicontaiga.ru/home.asp?artId=6266