Visual Basic, .NET, ASP, VBScript
 

   
 

Руслан Иноземцев, родился 1970 году в Москве. Программист, программирую с 1991 года, образование: высшее экономическое. Закончил факультет "Экономики и Управления" Университета Натальи Нестеровой. Имею статус Microsoft Certified Professional, сдавал экзамен "Designing and Implementing Distributed Applications with Microsoft Visual Basic 6.0". Персональный сайт: http://wttm.pp.ru

 
     
   
 

В первой  статье данного цикла были рассмотрены общие вопросы программного создание баз данных с помошью библиотек ADOX. От читателей приходили письма с вопросами и уточнениями, за что им отдельное спасибо. По наиболее важным, для разработчиков темам, Я решил написать вторую часть статьи, которая коснется двух особо важных моментов работы с базой данных Access c помошью этой библиотеки и ее расширений.

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

Закрываем соединение с базой данных

   Set cat = Nothing

Ниже приведена таблица с описанием других свойств (Properties) объекта Column

Название

Тип

Default

Доступ

Описание

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 управляет репликацией, здесь я его рассматривать не буду, возможно, сделаю это в отдельной статье.

Итак для сжатия базы данных нам необходим следующий код.

Set jro = Nothing



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


Kill “FileName”
Name “OldFileName”  As “NewFileName”
 
 
 
P.S. Данная статья доступна для свободного распространения, в любых средствах массовой информации, при условии сохранения ссылки на автора.
 
     

   
   
     
  VBNet рекомендует