Руслан Иноземцев
Часть 1
Создание полей типа "счетчик"
Для этого нам понадобятся два объекта:
Dim cat As New ADOX.Catalog ? Каталог иными словами наша база данных
Dim col As New ADOX.Column ? Колонка, то есть поле типа ?счетчикЋ,
? которое мы добавим к таблице
|
Создадим подключение к БД. Напомню, что работа с базой данных Access через провайдера Microsoft.Jet работает в 1.5 ? 2 раза быстрее, чем через ODBC.
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=.\NorthWind.mdb;"
|
Теперь зададим для нового поля свойства, коорые заставят его быть счетчиком.
With col
.Name = "ContactId"
.Type = adInteger
Set .ParentCatalog = cat
.Properties("AutoIncrement") = True
.Properties("Seed") = CLng(1)
.Properties("Increment") = CLng(1)
End With
|
Вот теперь это поле можно добавить в таблицу
cat.Tables("MyTale").Columns.Append col
|
Закрываем соединение с базой данных
Ниже приведена таблица с описанием других свойств (Properties) объекта Column:
Название |
Тип |
Значение по умолчанию |
Доступ |
Описание |
AutoIncrement |
adBoolean |
False |
adPropRead
adPropWrite
adPropRequired |
Задает тип поля ?СчетчикЋ с автоматическим увеличением значения при добавлении записи |
Default |
adEmpty1 |
Empty |
adPropRead
adPropWrite
adPropRequired |
Значение поля по умолчанию |
Description |
adBStr |
"" |
adPropRead
adPropWrite
adPropRequired |
Описанеие поля |
Fixed Length |
adBoolean |
False |
adPropRead
adPropWrite
adPropRequired |
Определяет ,будет поле фиксированой длины или переменой |
Increment |
adInteger |
1 |
adPropRead
adPropWrite
adPropRequired |
Значение, на которое будет увеличиваться поле типа ?счетчикЋ |
Nullable |
adBoolean |
False |
adPropRead
adPropWrite
adPropRequired |
Определяет, может ли поле не содержать никакого значения, иными словами должно ли это поле быть обязательным для заполнения |
Seed |
adInteger |
1 |
adPropRead
adPropWrite
adPropRequired |
Значение, с которого начнется отсчет в первой записи для поля типа ?счетчикЋ |
Jet OLEDB:Allow Zero Length |
adBoolean |
False |
adPropRead
adPropWrite
adPropRequired |
Определяет, могут ли текстовые поля содержать строки нулевой длины. Игнорируется для несимвольных полей |
Jet OLEDB:AutoGenerate |
adBoolean |
False |
adPropRead
adPropWrite
adPropRequired |
Определяет, будет ли автоматически генерироваться новое значение GUID для полей типа adGUID |
Jet OLEDB:Column Validation Rule |
adBStr |
"" |
adPropRead
adPropWrite
adPropRequired |
Выражение, определяющее правильность записываемого в поле значения, должно быть написано в формате SQL WHERE но без ключевого слова WHERE |
Jet OLEDB:Column Validation Text |
adBStr |
"" |
adPropRead
adPropWrite
adPropRequired |
Текст, который будет показан, в случае несоответствия заносимого в поле значения, определенному для этого поля правилу (Rule). |
Jet OLEDB:Compressed UNICODE Strings |
adBoolean |
False |
adPropRead
adPropWrite
adPropRequired |
Определяет, будет ли Microsoft Jet сжимать UNICODE строкипри записи на диск. Игнорируется, если база данных не в формате Microsoft Jet version 4.0 |
Jet OLEDB:Hyperlink |
adBoolean |
False |
adPropRead
adPropWrite
adPropRequired |
Определяет, что данные в поле являются гиперссылкой. Игнорируется для полей с типом отличным от adLongVarWChar. |
Jet OLEDB:IISAM Not Last Column |
adBoolean |
False |
adPropRead
adPropWrite
adPropRequired |
Это свойство я не берусь переводить, поскольку с ISAM драйверами не работаю.
?
For Installable-ISAMs, this property informs the I-ISAM that there are more columns that are going to be added to the table after this one. If you are using ITableDefinition::AddColumn or ITableDefintion::CreateTable, it is required that you set this property for every column except the last column. |
Jet OLEDB:One BLOB per Page |
adBoolean |
False |
adPropRead
adPropWrite
adPropRequired |
Определяет, должны ли данные хранится в раздельных страницах (True) или могут использовать общие страницы базы данных, для экономии места на диске. Работает только с полями типа adLongVarBinary. |
2. Программное сжатие базы данных
Программное сжатие, которое раньше выполнялось командой CompactDatabase библиотеки DAO не представлено не в ADO не в ADOX. Эти операции вместе с программным управлением репликацией вынесены в отдельную библиотеку
Microsoft Jet and Replication Objects X.X library Где X.X соответствует версии ADO с которой вы работаете, но не ниже 2.5.
Так что поставьте ссылку в Project/References на эту библиотеку и переходим к процессу программирования.
Библиотека довольно скудна по количеству функций. Я попробую привести описание ее объектной модели.
Объекта всего два:
JetEngine
Replica
JetEngine содержит только два метода CompacDatabase, его мы рассмотрим ниже и RefreshCache, который как ясно из названия обновляет кэшированную область базы данных.
Объект Replica управляет репликацией, здесь я его рассматривать не буду, возможно, сделаю это в отдельной статье.
Итак, для сжатия базы данных нам необходим следующий код.
Dim jro As jro.JetEngine ? Объявляем и создаем экземпляр объекта JetEngine
Set jro = New jro.JetEngine ?
jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyDatabase.mdb", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyCompactedDatabase.mdb;Jet OLEDB:Engine Type=4"
Set jro = Nothing
|
Вот такая незатейливая операция. Заботу об удалении старой базы данных и переименовании сжатой базы в текущую, вам придется взять на себя.
Напомню, что можно использовать встроенные в VB команды:
Kill ?FileName?
Name ?OldFileName? As ?NewFileName? |