Програмне створення бази даних за допомогою 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:
ew.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:
ew.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


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*