Программное изменение структуры и схемы данных
Для изменения схемы данных создан язык определения данных (DDL, Data-Definition Language). Инструкции на языке DDL позволяют выполнять действия по изменению схемы данных и структуры объектов данных, например:
- создавать и удалять таблицы;
- добавлять и удалять из таблиц поля и индексы;
- создавать и удалять связи между таблицами.
В интерфейсе DАО имеется набор специальных объектов, который является интерфейсом для доступа к средствам DDL. Таким образом, с помощью объектов DАО можно управлять структурой таблиц и схемой данных, не составляя самих инструкций на языке DDL.
Следующий пример программного кода (программа 16.4) взят из процедуры initGame сервера приложения "Игра в доминирование". Этот пример иллюстрирует использование инструкций на языке DDL для удаления таблицы со старой структурой и создания новой таблицы с заданной структурой. Аналогичные действия можно выполнить, пользуясь объектно-ориентированным интерфейсом DАО. Целью этой процедуры является изменение структуры таблицы "ПолеИгрок", поэтому, вообще говоря, можно было бы изменить набор полей этой таблицы с помощью инструкции DDL ALTER TABLE. Эта инструкция позволяет удалить или добавить в таблицу поле или составной индекс. Удаление и добавление полей в таблицу средствами DDL через интерфейс DАО представлено в программе 16.5.
Замечание
Необходимо помнить о том, что изменение структуры связанных таблиц запрещено. Поэтому в примере (программы 16.4 и 16.5) для доступа к таблице "ПолеИгрок" открывается база данных DominationGame.mdb, в которой сохранена эта таблица, а не используется текущая база данных DominationGameServer.mdb, в которой установлена связь с этой таблицей.
Программа 16.4. Удаление и создание таблицы с помощью инструкций DDL
Dim
db
As
Database
Dim
fieldSize
As
Long
, i
As
Long
Dim
strDDL
As
String
'Узнаем линейный размер игрового поля, выраженный в клетках
fieldSize =
CLng
(get_parameter(
"РазмерПоля"
))
'Открываем базу данных, в которой хранится нужная таблица
Set
db = OpenDatabase(CurrentProject.Path &
"\DominationGame.mdb"
)
'Удалить старую таблицу "ПолеИгрок" strDDL = "DROP TABLE ПолеИгрок;"
'Если таблица не существует, удаление вызовет ошибку
On
Error
GoTo
the_next_2
db.Execute strDDL the_next_2:
On
Error
GoTo
0
'Создать новую таблицу "ПолеИгрок"
strDDL =
"CREATE TABLE ПолеИгрок"
For
i = 1
To
fieldSize - 1
strDDL = strDDL & get_column_name(i) &
"TEXT(20),"
Next
i
strDDL = strDDL & get_column_name(fieldSize) &
"TEXT(20));"
db.Execute strDDL
'Прочие действия...db.Close
Программа 16.5. Изменение структуры таблицы с помощью интерфейса DАО
Dim
db
As
Database
Dim
fieldSize
As
Long
, i
As
Long
Dim
strSQL
As
String
Dim
fid
As
Field
'Узнаем линейный размер игрового поля, выраженный в клетках
fieldSize =
CLng
(get_parameter(
"РазмерПоля"
))
'Открываем базу данных, в которой хранится нужная таблица
Set
db = OpenDatabase(CurrentProject.Path &
"\DominationGame.mdb"
)
'Удалить старые записи в таблице "ПолеИгрок"
StrSQL =
"DELETE * FROM ПолеИгрок;"
db.Execute strSQL
'Удалить старые поля в таблице "ПолеИгрок"
For
i = 1
To
db.TableDefs(
"ПолеИгрок"
).Fields.Count
db.TableDefs(
"ПолеИгрок"
).Fields.Delete
get_column_name(i)
Next
i
'Создать новые поля в таблице "ПолеИгрок"
For
i = 1
To
fieldSize
Set
fid = db.TableDefs(
"ПолеИгрок"
).CreateField(_ get_column_name(i), dbText, 20)
db.TableDefs(
"ПолеИгрок"
).Fields.Append fid
Next
I
'Прочие действия...
db.Close
В программе 16.5 проиллюстрировано удаление и добавление полей в таблицу "ПолеИгрок" средствами DDL с использованием интерфейса DАО. Удаление поля производится с помощью метода Delete, в качестве параметра которого указывается имя удаляемого поля. Добавление нового поля производится следующим образом. Создается новый объект Field, обладающий необходимыми характеристиками – заданным именем поля, типом и размером данных. После этого с помощью метода Append созданный объект Field добавляется в семейство Fields объекта TableDef, содержащее все поля таблицы "ПолеИгрок". Аналогично (с помощью DАО) можно выполнить создание и удаление таблиц и индексов.