|  | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Программное создание базы данных с помощью ADOX. Часть 1 (исходники)Источник: VBRussian Что такое ADOXОписаниеMicrosoft? ActiveX? Data Objects Extensions for Data Definition Language and Security (ADOX) - это официальное название от Microsoft. На практике это дополнение к объектной и программной модели ADO. В девичестве ADOX как я понимаю был DAO, хотя одно другого не отменяет. Просто библиотека ADOX более современная, поддерживает работу с современными базами данных MS SQL, Oracle и т.д. через ODBC и OLE DB и позволяет управлять не только структурой базы данных но и ее безопасностью (Группами и пользователями). Объектная модель | 
| Константа | Значение | Описание | 
| 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 ' Оговариваем правила контроля за каскадными обновлениями
доступны варианты:
Так же можно установиь правила для каскадного удаления свойству
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
На этом позволю себе завершить краткий обзор работы с библиотекой ADOX.