Часто нужно создать новую базу данных по ходу выполнения программы. Как же это сделать? Об этом будет рассказано в этой статье.
Введение
Часто нужно создать новую базу данных по ходу выполнения программы. Как
же это сделать? Об этом будет рассказано в статье.
Создание базы данных производится с помощью библиотеки 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
» Заключение
База данных создана. В ней появилась таблица, поля, индекс. Теперь остаётся
заполнить её. Как это сделать я рассказывать не буду, поскольку я уже рассказывал
об этом в статье 'Работа с базами с помощью DAO'. Если
Вы чего-нибудь не поняли в этой статье или просто лень разбираться, то можете
посмотреть пример.
Возникнут проблемы - пишите
\n Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
'>мне, вместе
разберёмся!
Пример можно скачать здесь.
VB Студия |