(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Программное создание базы данных с помощью ADOX. Часть 1

Иноземцев Руслан

Что такое ADOX

Описание

Microsoft? ActiveX? Data Objects Extensions for Data Definition Language and Security (ADOX) - это официальное название от Microsoft. На практике это дополнение к объектной и программной модели ADO. В девичестве ADOX как я понимаю был DAO, хотя одно другого не отменяет. Просто библиотека ADOX более современная, поддерживает работу с современными базами данных MS SQL, Oracle и т.д. через ODBC и OLE DB и позволяет управлять не только структурой базы данных но и ее безопасностью (Группами и пользователями).
 
Объектная модель

Из представленной обектной модели видно, что ADOX позволяет работать с пятью сущностями современной реляционной базы данных Таблицы(Tables), Группы(Groups), Пользователи(Users), Процедуры(Procedures) и Представления(Views).
Не будем пока заострять внимание на каждой из этих сущностей. Подробно о них можно узнать обратившись к документации по ADO Цель данной статьи показать основные этапы по программному созданию и модификации базы данных средствами ADOX.

Программируем с ADOX

Необходимые ссылки и объекты

Для начала работы с ADOX необходимо проставить ссылку в Project - > References текущего проекта на библиотеку Microsoft ADO Ext. 2.x for DDL and Security. Где х в номере врсии может быть 5,6 или 7 в зависимости от версии ADO с которой вы работаете. ADOX поставляется с дистрибутивом MDAC (Microsoft Data Access Components) начиная с версии 2.5

Самый главный объект

Самым главным объектом, как это видно в объектной модели, является объект Catalog. Он является по сути синонимом понятия база данных, поскольку является родительским объектом для таблиц, процедур, представлений и т.д. В коде вашего проекта следует создать и инициировать объект ADOX.Catalog. К примеру так:

Private oCat as ADOX.Catalog

где нибудь в Form_Load()

Set oCat = New ADOX.Catalog

Создание базы данных

Для создания новой базы данных можно использовать процедуру, приведенную ниже:

Sub CreateDatabase()
   oCat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\new.mdb"
End Sub

В приведенном примере создается новая база MS Access с именем new, в корне диска c:. Следует отметить две важных детали. В случае если поставщик доступа к данным (Provider) не поддерживает операцию создания нового каталога (в нашем контексте базы данных) произойдет ошибка. И второе, после успешного создания базы данных свойство ActiveConnection нашего объекта oCat будет содержать ссылку на объект ADODB.Connection соединения с вновь созданной базой данных.

Открытие существующей базы данных

Для открытия существующей базы данных можно использовать следующую процедуру:

Sub OpenDatabase()
   oCat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\new.mdb"
End Sub

Данная процедура откроет базу данных new.mdb расположенную в корне диска с:.

Работа с таблицами Таблиц

Добавление

Добавление таблицы к базе данных выполняется методом Append коллекции Tables объекта Catalog (мощно ввернул, внушает !!!)
Иными словами пишем в коде

oCat.Tables.Append NewTable

Где NewTable это объект Table.
Теперь превратим это сумбурное описание в процедуру.

   Sub AddTable()

      Dim oTable as new Table
      oTable.Name = "MyTable"
      oCat.Tables.Append oTable

      Set oTable = Nothing

Изменение

Для изменения свойств таблицы надо найти ее в коллекции oCat.Tables. Это можно сделать указав в качестве индекса ее номер, который определить сложно, или ее имя, что конечно более удобно.

oCat.Tables("MyTable").Name = "MyNewName"

Кроме свойства Name для изменения также доступны коллекции:

  Indexes
  Keys
  Columns

Удаление

Чтобы удалить таблицу необходимо вызвать метод Delete коллекции Tables передав в качестве параметра имя таблицы.

oCat.Tables.Delete "TableName"

Работа с полями

Добавление

Поля таблицы доступны через коллекцию Columns объекта Table. Для добавления поля в таблицу испоьзуется метод Append колекции Columns. Методу передаются один обязательный параметр, Имя поля и два необязательных, его Тип и Размер. Значение по умолчанию для типа adVarWchar. Значение по умолчанию для размера 0. Добавим в созданную нами таблицу одно поле:

oCat.Tables("MyNewTable").Columns.Append "Field1", adInteger

Ниже преведена таблица допустимых типов:

Константа  Значение  Описание 
adBigInt 20 Indicates an eight-byte signed integer (DBTYPE_I8).
adBinary 128 Indicates a binary value (DBTYPE_BYTES).
adBoolean 11 Indicates a boolean value (DBTYPE_BOOL).
adBSTR 8 Indicates a null-terminated character string (Unicode) (DBTYPE_BSTR).
adChapter 136 Indicates a four-byte chapter value that identifies rows in a child rowset (DBTYPE_HCHAPTER).
adChar 129 Indicates a string value (DBTYPE_STR).
adCurrency 6 Indicates a currency value (DBTYPE_CY). Currency is a fixed-point number with four digits to the right of the decimal point. It is stored in an eight-byte signed integer scaled by 10,000.
adDate 7 Indicates a date value (DBTYPE_DATE). A date is stored as a double, the whole part of which is the number of days since December 30, 1899, and the fractional part of which is the fraction of a day.
adDBDate 133 Indicates a date value (yyyymmdd) (DBTYPE_DBDATE).
adDBTime 134 Indicates a time value (hhmmss) (DBTYPE_DBTIME).
adDBTimeStamp 135 Indicates a date/time stamp (yyyymmddhhmmss plus a fraction in billionths) (DBTYPE_DBTIMESTAMP).
adDecimal 14 Indicates an exact numeric value with a fixed precision and scale (DBTYPE_DECIMAL).
adDouble 5 Indicates a double-precision floating-point value (DBTYPE_R8).
adEmpty 0 Specifies no value (DBTYPE_EMPTY).
adError 10 Indicates a 32-bit error code (DBTYPE_ERROR).
adFileTime 64 Indicates a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (DBTYPE_FILETIME).
adGUID 72 Indicates a globally unique identifier (GUID) (DBTYPE_GUID).
adIDispatch 9 Indicates a pointer to an IDispatch interface on a COM object (DBTYPE_IDISPATCH).
Note This data type is currently not supported by ADO. Usage may cause unpredictable results.
adInteger 3 Indicates a four-byte signed integer (DBTYPE_I4).
adIUnknown 13 Indicates a pointer to an IUnknown interface on a COM object (DBTYPE_IUNKNOWN).
Note This data type is currently not supported by ADO. Usage may cause unpredictable results.
adLongVarBinary 205 Indicates a long binary value (Parameter object only).
adLongVarChar 201 Indicates a long string value (Parameter object only).
adLongVarWChar 203 Indicates a long null-terminated Unicode string value (Parameter object only).
adNumeric 131 Indicates an exact numeric value with a fixed precision and scale (DBTYPE_NUMERIC).
adPropVariant 138 Indicates an Automation PROPVARIANT (DBTYPE_PROP_VARIANT).
adSingle 4 Indicates a single-precision floating-point value (DBTYPE_R4).
adSmallInt 2 Indicates a two-byte signed integer (DBTYPE_I2).
adTinyInt 16 Indicates a one-byte signed integer (DBTYPE_I1).
adUnsignedBigInt 21 Indicates an eight-byte unsigned integer (DBTYPE_UI8).
adUnsignedInt 19 Indicates a four-byte unsigned integer (DBTYPE_UI4).
adUnsignedSmallInt 18 Indicates a two-byte unsigned integer (DBTYPE_UI2).
adUnsignedTinyInt 17 Indicates a one-byte unsigned integer (DBTYPE_UI1).
adUserDefined 132 Indicates a user-defined variable (DBTYPE_UDT).
adVarChar 204 Indicates a binary value (Parameter object only).
adVariant 200 Indicates a string value (Parameter object only).
adVarNumeric 12 Indicates an Automation Variant (DBTYPE_VARIANT).
Note This data type is currently not supported by ADO. Usage may cause unpredictable results.
adVarWChar 139 Indicates a numeric value (Parameter object only).
adWChar 202 Indicates a null-terminated Unicode character string (Parameter object only).
adVarBinary 130 Indicates a null-terminated Unicode character string (DBTYPE_WSTR).

Изменение

Для изменения характеристик поля используется объект Column:

   Dim MyColumn as Column
      Set MyColumn = oCat.Tables("MyNewTable").Columns(0) 

   'или 

      Set MyColumn = oCat.Tables("MyNewTable").Columns("Field1") 
      MyColumn.Name = "NewField1"

Свойства Type и DefaultSize открыты только для чтения после того, как поле было добавлено в коллекцию.

Удаление

Удалить поле из таблицы можно выполнив метод Delete коллекции Columns нужной таблицы, передав в качестве параметра имя поля.

oCat.Tables("MyNewTable").Columns.Delete "NewField1"

Работа с индексами и ключами

Рассмотрим работу с этими объектами на следующем примере:

Создаем объект типа Key. Под объектами key подразумеваются первичные и внешние ключи. Primary и Foreign соответственно.

Dim kyForeign As New ADOX.Key

' определим foreign key
kyForeign.Name = "CustOrder" ' Дадим ему имя
kyForeign.Type = adKeyForeign ' Установим тип

так же доступны типы: adKeyPrimary и adKeyUnique
Далее указывается ссылка на связанную таблицу

kyForeign.RelatedTable = "Customers"
kyForeign.Columns.Append "CustomerId" ' Сюда кладем имя ключевого поля

kyForeign.Columns("CustomerId").RelatedColumn = "CustomerId" ' Здесь имя поля в связанной таблице

kyForeign.UpdateRule = adRICascade ' Оговариваем правила контроля за каскадными обновлениями

доступны варианты:

  adRINone - ни каких действий каскадно не производится. (по умолчанию)
  adRISetDefault - значение внешнего ключевого поля выставляется в значение по умолчанию.
  adRISetNull - значение внешнего ключевого поля выставляется в Null

Так же можно установиь правила для каскадного удаления свойству:

kyForeign.DeleteRule

' Добавляем foreign key в коллекцию ключей

oCat.Tables("Orders").Keys.Append kyForeign

'Удалить ключ можно следующим образом:

oCat.Tables("Orders").Keys.Delete kyForeign.Name

Подобным же образом осущестляется работа с управлением индексами.

Можно особо отметить следующую особенность:

У таблицы есть коллекция индексов. А уже у каждого индекса есть коллекция колонок т.е. полей входящих в этот индекс. Для простых индексов состоящих из одного поля, в коллекции колонок содержится одна колонка, для составных индексов в коллекции колонок индекса содержаться колонки входящие в этот индекс. Опять мощьно ввернул! Вот пример. Добавим к таблице составной индекс из двух полей Field1 и Filed2:

   Dim idx As New ADOX.Index

   ' Зададим параметры индекса
   idx.Name = "Index1"
   idx.Columns.Append "Field1"
   idx.Columns.Append "Field2"

   ' Добавляем индекс в коллекцию
   oCat.Tables("MyNewTable").Indexes.Append idx

Для удаления индекса как и везде используем метод Delete:

oCat.Tables("MyNewTable").Indexes.Delete idx.name



 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Дискуссии и обсуждения общего плана »
Написать редактору 
 Рекомендовать » Дата публикации: 31.05.2008 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
DeviceLock Endpoint DLP Suite - от 1 ПК до 24 ПК
Panda Antivirus Pro - Лицензии для SMB - (лицензия на 1 год)
SmartBear TestComplete Platform - Node-Locked License - (Includes 1 year Maintenance)
IBM Domino Utility Server Processor Value Unit (PVU) License + SW Subscription & Support 12 Months
The BAT! Home Upgrade- 1 компьютер
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Программирование на Microsoft Access
CASE-технологии
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
СУБД Oracle "с нуля"
Работа в Windows и новости компании Microsoft
Компьютерная библиотека: книги, статьи, полезные ссылки
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Программы на заказ (инженеры-профессионалы, по договору) + мобильные приложения, админ-панели, ИС (1)
Несколько инженеров-профессионалов примут заказы на разработку: 1. нативных мобильных...
 
Пишу программы на заказ профессионально (2131)
Пишу программы на заказ на языках Pascal (численные методы, списки, деревья, прерывания) под...
 
Куплю программу (5)
Нужно сделать программу для рулетки в онлайн-казино. Должна показывать в виде таблицы выпадающие...
 
Пишу программы на Lazarus (16)
Предлагаю разработку программ на заказ. Примеры программ: www.itproportal.ru
 
Пишу программы на заказ для студентов (165)
Пишу для студентов на с, с++, паскаль в средах ms visual studio, qt, builder, borland c, delphi....
 
 
 



    
rambler's top100 Rambler's Top100