Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КонспектЛекций

.pdf
Скачиваний:
16
Добавлен:
14.05.2015
Размер:
1.73 Mб
Скачать

Данные, используемые для математических вычислений, за исключением финансовых расчетов (для них следует использовать тип «Денежный»). Сохраняет 1, 2, 4 или 8 байтов; 16 байтов для кодов репликации (GUID). Конкретный тип числового поля определяется значением свойства Размер поля (FieldSize).

4. Дата/время

Значения дат и времени. Сохраняет 8 байтов.

5. Денежный

Используется для денежных значений и для предотвращения округления во время вычислений. Сохраняет 8 байтов.

6. Счетчик

Автоматическая вставка уникальных последовательных (увеличивающихся на 1) или случайных чисел при добавлении записи. Сохраняет 4 байта; 16 байтов для кодов репликации (GUID).

7. Логический

Данные, принимающие только одно из двух возможных значений, таких как «Да/Нет», «Истина/Ложь», «Вкл/Выкл». Значения Null не допускаются. (Null – значение, которое можно ввести в поле или использовать в выражениях и запросах для указания отсутствующих или неизвестных данных. В Visual Basic ключевое слово Null указывает значение Null. Некоторые поля, такие как поля первичного ключа, не могут содержать значения Null.).Сохраняет 1 бит.

8. Поле объекта OLE

Объекты OLE (такие как документы Microsoft Word, электронные таблицы Microsoft Excel, рисунки, звукозапись или другие данные в двоичном формате), созданные в других программах, использующих протокол OLE (OLE. Технология связи программ, позволяющая приложениям совместно использовать данные. Все программы Microsoft Office поддерживают технологию OLE, что позволяет совместно работать с данными посредством внедрения и связывания объектов.). Сохраняет до 1 Гигабайта (ограничивается объемом диска).

9. Гиперссылка

Гиперссылки. Гиперссылка может иметь вид пути UNC (Universal Naming Convention – способ записи имени файла, который позволяет задать его местоположение независимо от конкретного компьютера. Вместо указания буквы диска и пути адреса UNC используют синтаксис \\Сервер\ОбщаяПапка\Путь\ИмяФайла. ) либо адреса URL (Uniform Resource Locator – адрес, указывающий протокол (такой как HTTP или FTP) и расположение объекта, документа, веб-страницы или другого ресурса в Интернете или интрасети, например: http://www.microsoft.com/.). Сохраняет до 64 000 знаков.

10. Мастер подстановок

Создает поле, позволяющее выбрать значение из другой таблицы или из списка значений, используя поле со списком. При выборе данного параметра в списке типов данных запускается мастер для автоматического определения этого поля. Для сохранения требуется тот же размер, что и у первичного ключа, соответствующего полю подстановок, — обычно 4 байта.

Если свойство Тип данных (DataType) имеет значение «Числовой», то допустимыми являются следующие значения свойства Размер поля (FieldSize):

Значение

Описание

Дробная часть

 

Размер

Байт

Числа от 0 до 255 (без дробной

Отсутствует

1

байт

 

части).

 

 

 

Действительное

Числа от –10^38–1 до 10^38–1

28

12 байт

 

(.adp).

 

 

 

 

Числа от –10^28–1 до 10^28–1

 

 

 

 

(.mdb).

 

 

 

Целое

Числа от -32 768 до 32 767 (без

Отсутствует

2

байта

 

дробной части).

 

 

 

Длинное целое

(Значение по умолчанию.) Числа

Отсутствует

4

байта

 

от -2 147 483 648 до 2 147 483 647

 

 

 

 

(без дробной части).

 

 

 

Одинарное с

Числа от

7

4

байта

плавающей

–3,402823E38 до –1,401298E–45

 

 

 

точкой

для отрицательных значений, и от

 

 

 

 

1,401298E–45 до 3,402823E38 для

 

 

 

 

положительных.

 

 

 

61

Двойное с

Числа от

15

8 байт

плавающей

–1,79769313486231E308 до

 

 

точкой

–4,94065645841247E–324

 

 

 

для отрицательных значений и от

 

 

 

4,94065645841247E–324 до

 

 

 

1,79769313486231E308 для

 

 

 

положительных.

 

 

Код репликации

Уникальный глобальный

Не определено

16 байт

 

идентификатор (GUID)

 

 

Код реплики (GUID) – 16-байтовое поле в базе данных Microsoft Access, используемое для уникальных идентификаторов при репликации. Коды GUID используются для идентификации реплик, наборов реплик, таблиц, записей и других объектов. В базах данных Microsoft Access коды GUID называются кодами реплик.

Программирование в VBA (Visual Basic for Application)

Основу объектно-ориентированного программирования составляет работа с объектами, в качестве которых рассматриваются любые программируемые элементы. Основными объектами в Access являются таблицы, формы, запросы, отчёты, модули и макросы. Они строятся на основе мелких объектов – элементов управления, которые объединяются в более крупные объекты – семейства (наборы однотипных объектов). Все объекты имеют сохраняемый набор свойств, изменяя которые можно управлять объектом. Для каждого объекта имеется ряд методов – исполняемых инструкций.

Основные иерархические структуры объектов, используемые в Access:

1.Модель объектов доступа к данным (Data Access Object – DAO) обеспечивает объектноориентированный интерфейс для работы с ядром базы данных Jet. А именно – доступ и обработку данных в базах данных, управление базами данных и их объектами с помощью свойств и методов, а также создание новых объектов и изменение структуры базы данных.

2.Модель объектов ActiveX Data Objects – ADO используется для работы с формами, отчётами и модулями выполняющегося приложения Access, объектами других приложений, их свойствами и методами, а также для управления текущим сеансом работы в Access и создания интерфейса приложения.

Основой для программирования являются события, которые обрабатываются процедурами обработки событий. Процедуры, входящие в состав приложения, хранятся в модулях в базе данных. Однако запросить выполнение модуля в целом невозможно. Выполняться могут только процедуры, содержащиеся в модулях. Модули предназначены для удобного объединения процедур по их функциональному назначению или привязке к форме или отчёту. Процедуры обработки событий можно создать для каждого события каждого элемента формы или отчёта и каждого из возможных событий самой формы или отчёта. Событие может быть вызвано системой, программой или действиями пользователя.

Типы переменных:

Синтаксис. Dim переменная As тип

Тип данных Boolean (Bool) может принимать два значения — True (истина) и False (ложь). Этот тип данных присваивается переменным, задействованным в качестве флажков для обозначения состояния объектов. Также этот тип присваивается функциям, которые

62

возвращают значение, сообщающее об успешном или неудачном выполнении какого-то действия. Численная переменная, не равная нулю, считается True; равная нулю — False. При конвертировании переменной типа Boolean в численную переменную возвращается значение - 1, если переменная типа Boolean имела значение True, и 0— если False.

Переменная типа дата/время представляет собой 64-разрядное число и может принимать значения даты от 1 января 100 года до 31 декабря 9999 года или значения времени от 0:00:00 до 23:59:59. Значения даты можно обозначать с помощью символа #, например #20/10/96#. Для преобразования даты используется функция Cdate:

dtDate = CDate("20 October 1995")

Функция Day (число) после передачи ей даты возвращает число в диапазоне 1—31. Функция Month (месяц) выделяет из даты значение месяца— от 1 до 12. Функция Year (год) возвращает из переданной даты год.

Значение Null.

MyVar = ""

 

MyCheck = IsNull(MyVar)

' Returns False.

MyVar = Null

 

MyCheck = IsNull(MyVar)

' Returns True.

Массивы

Dim MyArray(10, 10,10) As Integer Dim sngMulti(1 To 5, 1 To 10) As Single

Dim sngArray() As Single ‘создан динамический массив

Dim varData(3) As Variant varData(0) = "Claudia Bendel" varData(1) = "4242 Maple Blvd" varData(2) = 38

varData(3) = Format("06-09-1952", "General Date")

Другой способ объявления массивов:

Dim A As Variant

A = Array(10,20,30)

Присвоение массива переменной типа Variant позволяет изменять размерность массива.

Объекты

Dim SmithBillBD As Object

Visual Basic поддерживает объект Collection (коллекция или семейство элементов), который служит для хранения элементов любых типов данных. Вы можете использовать семейство точно так же, как массив – для хранения целых чисел, цепочек символов и других типов данных. Объект Collection содержит методы для включения, удаления и контроля элементов в семействе.

Dim AppObjects As New Col lection

Чтобы добавить AppObject в семейство, воспользуйтесь методом Add для объекта Collection. В объекте семейства предусмотрен метод Item, который служит для адресации элементов семейства. Чтобы удалить элемент из семейства, используйте метод Remove.

Доступность

Ключевые слова Private и Public определяют доступность переменных и процедур. Использование Dim для объявления переменной на уровне модуля означает, что переменная доступна всем процедурам в этом модуле, но недоступна вне его. Замена Dim ключевым

63

словом Private не отразится на доступности переменной; переменная будет доступна только процедурам модуля. Однако если заменить Dim на ключевое слово Public, то переменная будет доступна для всех модулей приложения. Процедуры и функции, которые добавляются в модуль, являются Publiс по умолчанию; они доступны всем модулям приложения. События процедур в модулях Form и Report являются Private по умолчанию, поэтому они доступны только модулю, в котором содержатся.

Обработка ошибок

Чтобы установить системное прерывание по обнаружению ошибки, поместите оператор On Error туда, где вы хотите активизировать это системное прерывание.

Sub CausesAnError()

'Direct procedure flow.

On Error GoTo ErrorHandler

'Raise division by zero error. Err.Raise 11

Exit Sub

ErrorHandler:

' Display error information.

MsgBox "Error number " & Err.Number & ": " & Err.Description End Sub

Другая форма оператора On Error Resume Next передает управление оператору, следующему за оператором с ошибкой. Этот оператор приводится ниже.

Publ ic Function MyFunctionO On Error Resume Next

If Err Then

‘обработка

End If

Exit Function

Resume возвращает управление программой оператору, вызвавшему ошибку, и пытается выполнить его снова. Если это приводит к повторной ошибке, то программа обработки ошибок сработает снова. Если вы используете оператор Resume, то лучше применить счетчик возникновения ошибки. По достижении некоторого предела счетчика следует выйти из процедуры. Resume Next передает управление оператору, следующему за оператором, приведшим к ошибке. Вы можете использовать этот прием только в том случае, если уверены, что ошибка — не критическая и может быть проигнорирована, или если ваш обработчик ошибок откорректирует ситуацию, вызвавшую ошибку.

Ветвления и циклы

For counter = start To end [Step step]

Do [{While | Until} condition]

[statements]

[statements]

[Exit For]

[Exit Do]

[statements]

[statements]

Next [counter]

Loop

While condition

Do

[statements]

[statements]

Wend

[Exit Do]

 

[statements]

 

Loop [{While | Until} condition]

For Each element In group

With object

[statements]

[statements]

[Exit For]

End With

[statements]

 

Next [element]

With MyLabel

64

 

.Height = 20

For Each oGeneric In Forms

.Width = 200

If oGeneric.Name = "Форма 3" Then Exit For

.Caption = "This is MyLabel"

EndIf

End With

Next oGeneric

 

 

 

If condition Then [statements] [Else statements]

Choose(index, choice-1[, choice-2, ... [,

либо

choice-n]])

If condition Then

 

[statements]

Function GetChoice(Ind As Integer)

[ElseIf condition-n Then

GetChoice = Choose(Ind,

"Speedy", "United", "Federal")

[statements] ...

End Function

[Else

 

[statements]]

 

End If

 

 

 

IIf(expr, truepart, falsepart)

Select Case expression_переменная

 

[Case expression-n_значение

CheckIt = IIf(TestMe>1000, "Large", "Small")

[statements-n]] ...

Switch(expr-1, value-1[, expr-2, value-2 … [, expr-

[Case Else

n,value-n]])

[elsestatements]]

Matchup = Switch(CityName = "London",

 

"English", CityName = "Rome", "Italian",

End Select

CityName = "Paris", "French")

 

Параметры процедур и функций.

Объявление:

Sub CalcFee(AcctTotal As Currency, ContractMonths As Integer)

Вызов:

CalcFee A, 24

Вы можете использовать ключевое слово Optional в определении процедуры или функции для указания того, что данный аргумент является необязательным. Необязательные (Optional) аргументы должны иметь тип Variant.

Sub CalcFee(AcctTotal As Currency, Optional ContractMonths As Variant)

Чтобы создать процедуру для работы с массивом аргументов, в объявлении процедуры используйте аргумент ParamArray, причем не определяя размера массива.

Public Function Calc_Order(ParamArray Сosts As Variant) As Currency

Простейшие программы на VBA

Обработка событий с помощью методов объекта DoCmd.

DoCmd.OpenForm “Студенты”

Другие методы этой команды:

Beep

Close – закрывает указанное окно Microsoft Access или текущее окно (по умолчанию). FindNext – находит следующую запись, удовлетворяющую условиям, указанным в предыдущей макрокоманде «НайтиЗапись» (FindRecord) или в диалоговом окне Поиск в поле, открывающемся командой Найти из меню Правка.

FindRecord – находит данные, удовлетворяющие условиям поиска, указанным с помощью аргументов этой макрокоманды. Данные могут быть в текущей записи, в следующей, предыдущей или в самой первой записи.

65

GoToControl – переводит фокус на указанное поле или элемент управления в текущей записи открытой формы, формы в режиме таблицы, таблицы в режиме таблицы или запроса в режиме таблицы

GoToRecord – делает указанную запись текущей записью открытой таблицы, формы или результирующего набора записей запроса.

Maximize

Minimize

OpenDiagram – используется в проекте Microsoft Access для открытия схемы базы данных в режиме конструктора

OpenQuery

OpenReport

OpenTable Quit RunSQL

Задание свойств форм, отчетов и элементов управления в Visual Basic

Объекты Form, Report и Control являются объектами Microsoft Access. Свойства таких объектов можно задавать в процедурах Sub, Function или в процедурах обработки событий. Можно также задавать свойства разделов форм и отчетов.

Чтобы задать свойство формы или отчета

Укажите ссылку на конкретную форму или отчет в семействе Forms или Reports, за которой следуют имя свойства и его значение. Например, следующая программная строка задает для свойства Вывод на экран (Visible) формы «Customers» значение True (–1):

Forms!Customers.Visible = True

Свойства формы и отчета можно также задавать из модуля объекта с помощью свойства объекта Me. Программы, использующие свойство Me, выполняются быстрее, чем программы, использующие полные имена объектов. Например, следующая программная строка в модуле формы «Customers» определяет свойство Источник записей (RecordSource) формы «Customers» через инструкцию SQL, возвращающую все записи, в которых значение поля

«CompanyName» начинается с «A»:

Me!RecordSource = "SELECT * FROM Customers " _

& "WHERE CompanyName Like 'A*'"

Чтобы задать свойство элемента управления

Укажите ссылку на элемент управления в семействе Controls объекта Form или Report, в котором он находится. На семейство Controls можно ссылаться явно или неявно, но программа выполняется быстрее при использовании неявных ссылок. В следующих примерах задается свойство Вывод на экран (Visible) поля «CustomerID» в форме «Customers»:

'Faster method. Me!CustomerID.Visible = True

'Slower method. Forms!Customers.Controls!CustomerID.Visible = True

66

Быстрее всего можно задать свойство элемента управления из модуля объекта с помощью свойства объекта Me. Например, следующая программа изменяет значение свойства Вывод на экран (Visible) поля «CustomerID» в форме «Customers»:

With Me!CustomerID

.Visible = Not .Visible

End With

Чтобы задать свойство раздела формы или отчета

Укажите ссылку на форму или отчет в семействе Forms или Reports, за которой следует свойство Section и целое значение или константа, определяющая раздел. В следующем примере задается значение False для свойства Вывод на экран (Visible) верхнего колонтитула формы

«Customers»:

Forms!Customers.Section(3).Visible = False

Me!Section(acPageHeader).Visible = False

Примечания

В справке по предметному указателю можно найти следующие сведения о каждом свойстве:

o

допускается ли задание этого свойства в программе Visual Basic;

o

режимы, в которых можно задавать свойство. Не все свойства можно задавать во

 

всех режимах. Например, свойство формы Тип границы (BorderStyle) можно

 

задавать только в режиме конструктора формы;

oкакие значения следует использовать для задания свойства. Часто значения некоторых свойств в программе Visual Basic, отличаются от значений, выбираемых в окне свойств. Например, если значение свойства выбирается из списка, необходимо использовать это значение или его числовой эквивалент.

Чтобы задать в программе Visual Basic стандартные значения свойств для элементов управления, следует использовать метод DefaultControl.

DAO.

Объекты доступа к данным DAO (Data Access Objects) позволяют управлять структурой базы данных и содержащимися в ней данными из программ Visual Basic. Многие объекты ADO соответствуют объектам, которые можно видеть в базе данных — например, объект TableDef соответствует таблице Microsoft Access. Объект Field соответствует полю в таблице.

Большая часть свойств объектов DAO является свойствами DAO. Эти свойства определены в ядре базы данных Microsoft Jet и задаются тем же способом, как и в других приложениях, включающих ядро Jet. Некоторые свойства, которые можно задать для объектов DAO, определяются в Microsoft Access, а затем автоматически распознаются ядром базы данных Jet. Способ задания свойств объектов DAO зависит от того, где определено свойство, в ядре базы данных Jet или в Microsoft Access.

67

`Общение с JET через объекты данных Access.

DBEngine

Workspaces

Errors

 

Workspace

Error

 

Databases

 

 

 

Database

 

Groups

Containers

 

 

 

Container

Users

QueryDefs

Documents

 

 

 

QueryDef

 

 

Fields

 

RecordSets

Parameters

 

 

RecordSet

 

Relations

Fields

Relation

Indexes

TableDefs

Fields

Fields

 

TableDef

DBEngine Является ядром Jet. Этот верхний уровень объекта содержит все объекты DАО. Это объект, на который нужно ссылаться для сжатия и восстановления базы данных с помощью программы VBA

Error Содержит информацию, имеющую отношение к ошибке, которая произошла при работе Jet/DAO. Этот объект — член семейства Errors: список ошибок от самого нижнего до самого верхнего уровня

Workspace Содержит базы данных, открытые в пользовательском сеансе, а также предлагает методы и свойства для поддержки транзакций открытых БД и для защиты. Является членом семейства Workspaces

Database Ссылается на базу данных, открытую в соответствующем объекте Workspace

User Представляет пользователя сеанса в соответствующем объекте Workspace. Сеансы могут проводить одновременно несколько пользователей; эти пользователи определены в семействе Users

Group Представляет нескольких членов групп и предоставляет им общие возможности.

TableDef Представляет сохраненное описание локальной или присоединенной таблицы в соответствующем объекте Database

QueryDef Представляет сохраненный запрос в соответствующей базе данных. Его свойство SQL определяет SQL-оператор, используемый для определения возвращаемого набора записей. Когда в Access строится запрос с помощью каких-либо средств, то в этом свойстве записывается окончательный текст SQL-выражения

RecordSet Представляет итоговые записи после выполнения запроса или записи таблицы.

68

Field Определяет свойства и методы, применимые к одному полю (столбцу), а семейство Fields содержит все объекты Field для соответствующей таблицы, запроса или набора записей

Index Описывает индекс в соответствующей таблице.

Parameter QueryDefs должен содержать параметры для определения значений критериев

Relation Здесь описываются отношения между таблицами, установленные в базе данных

Container Объекты Container (контейнер) встроены и представляют собой доступные объекты данных, такие как таблицы, отношения и базы данных, а также объекты Access, такие как отчеты, формы и модули. Каждый объект поддерживает защиту хранящейся в нем информации

Document Представляет требования для типов объектов в соответствующем контейнере. Например, контейнер Access Forms содержит объект Document для каждой формы базы данных. Кроме того, объект Document поддерживает защиту информации того объекта, который он представляет

Каждый объект в иерархии DAO имеет одно или более свойств, которые описывают его поведение и атрибуты. Каждое из этих свойств само является объектом в семействе Properties родительского объекта. Например, объект TableDef имеет такие свойства, как Name, Updatable и DateCreated. Доступ к свойству Name можно получить следующим образом:

MyTableDef.Name

Кроме того, на свойство Name можно сослаться, используя семейство Properties объекта

TableDef:

MyTableDef.Properties("Name")

Использование объекта TableDef

Объект TableDef описывает каждую физически хранящуюся в базе данных таблицу. Объект TableDef описывает поля в физической таблице, идентифицирует индексы таблицы и фиксирует свойства, имеющие отношение к этой таблице.

.RecordCount указывает число записей в таблице. Если в таблице записей нет, то его значение равно нулю. Для присоединенных таблиц значение этого свойства равно -1.

.Attributes указывает на характеристики таблицы. Вы можете установить его, когда строите свою таблицу, но после добавления TableDef к семейству TableDefs свойство может быть только прочитано.

Dim dbsNorthwind As Database Dim fldLoop As Field

Set dbsNorthwind = OpenDatabase("Northwind.mdb") With dbsNorthwind

For Each fldLoop In .TableDefs(0).Fields

Debug.Print " " & fldLoop.Name & " = " & fldLoop.Attributes Next fldLoop

.Close End With

.CreateField служит для создания нового поля; новое поле содержит номер, характеризующий объект в семействе. После того как поле будет создано, метод Append семейства Fields добавляет его к TableDef.

Dim dbsNorthwind As Database Dim tdfNew As TableDef

Dim fldLoop As Field

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef") With tdfNew

.Fields.Append .CreateField("TextField", dbText)

69

.Fields.Append .CreateField("IntegerField", dbInteger)

.Fields.Append .CreateField("DateField", dbDate) End With

dbsNorthwind.TableDefs.Append tdfNew

Использование объекта Recordset

Recordset — это объект, который используется для выполнения операций с записями. Семейство Recordsets содержит все открытые объекты Recordset в открытой базе данных. При закрытии объекта Recordset он удаляется из памяти и из семейства Recordsets. Объекты

Database, TableDef и QueryDef включает метод OpenRecordset.

Recordset можно открыть, указав в методе OpenRecordset объекта Database название соответствующей таблицы или воспользовавшись методом OpenRecordset объекта TableDef:

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstEmployees = dbsNorthwind.OpenRecordset( "Employees", dbOpenDynaset)

После открытия объекта Recordset необходимо определить, какие записи доступны. Если в Recordset нет ни одной записи, то его свойства BOF (Beginning Of File — начало файла) и EOF (End Of File — конец файла) установлены в True. Если EOF установлено в False, то Recordset имеет хотя бы одну запись. Если записи существуют, то при открытии Recordset будет выполнено позиционирование на первой записи.

Используя метод Move, можно построить цикл, обращающийся к каждой следующей записи в объекте Recordset. Метод MoveLast используется для позиционирования к последней записи Recordset. Для перемещения к предыдущей записи используется метод MovePrevious, пока свойство BOF не будет установлено в True. Метод MoveFirst может быть использован для позиционирования к первой записи.

Метод Edit информирует Jet о том, что в текущей записи происходят изменения. При использовании метода Update сделанные изменения вносятся в таблицу.

Для добавления записей используйте метод AddNew. Этот метод применяется в комплексе с методом Edit при добавлении новых записей. Как и в случае с методом Edit, записи будут присоединены к таблице после применения метода Update.

Для удаления текущей записи используйте метод Delete.

После того как обработка объекта Recordset будет завершена, закройте его, воспользовавшись методом Close. Этот метод удаляет объект Recordset из семейства Recordsets и делает объект Recordset недействительным.

Примеры использования методов DAO

Sub Find() '--------------------------------------------------------

'Поиск записей в таблице "tblPeoples"

'Будем искать записи, у которых в поле LastName

'находиться значение "Иванова"

'и печатать в окне отладки ID_People найденных записей

'и их количество

'Проход по всей таблице.

'ЭТОТ МЕТОД НЕ ЯВЛЯЕТСЯ ОПТИМАЛЬНЫМ!!!

'--------------------------------------------------------

Dim db As Database Dim rs As Recordset Dim str As String

70