Реферат: Использование функций для обработки событий

Лабораторная работа №6

Использование функций для обработки событий.

Обычно для обработки событий в формах и отчетах используютпроцедуры типа Sub (подпрограммы) или макросы. Однако иногда можно и даженужно использовать функции. Дело в том, что если в рамках одной формы делаетсямножество однотипных задач, то лучше создать одну процедуру — функцию длявыполнения этих задач, описать ее на уровне модуля формы, т. е. в разделе General,а потом вызывать из любого места в форме. Если это необходимо, для такойфункции определяется один или несколько параметров, которые передаются привызове данной функции. И хотя значение, возвращаемое функцией, не используется(а обычно и не определяется), применение ее оправдано не только потому, чтотребуется писать меньше строк кода, а главным образом потому, что минимизациякода в модуле формы ускоряет ее 

открытие.

Если же идентичные задачи решаются в разных формах,например, одна и та же реакция предусматривается для одинаковых кнопок в разныхформах, то такую функцию нужно написать в стандартном модуле базы данных.

Скрытие и восстановление формы.

Функциядля открытия формы:

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Public Function OpenHide(strName As String)

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    Dim strHideAs String

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    strHide =Screen.ActiveForm.Name

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">   Screen.ActiveForm.Visible = False

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">   DoCmd.OpenForm strName

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">   Screen.ActiveForm.Tag = strHide

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">End Function

Screen  — Объект объектной модели Microsoft Access2002. Ссылается на конкретную форму, отчет или элемент управления, который в данный момент имеет фокус.

DoCmd — Объект объектной моделиMicrosoft Access 2002. Позволяет выполнить макрос или встроенную инструкциюAccess с помощью процедуры на Visual Basic.

Visible – свойство вывода на экран.Может иметь значение True или False. В зависимости от его значения форма будетпоявляться или исчезать с экрана.

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

Функция для закрытия формы

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Public Function Close Unhide ()

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    DimstrUnhide As String

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    If IsNull(Screen.ActiveForm.Tag) Then

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">       DoCmd.Close

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    Else

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">       strUnhide = Screen.ActiveForm.Tag

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">       DoCmd.Close

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">       DoCmd.SelectObject acForm, strUnhide

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    End If

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">End Function

Макрокоманда «ВыделитьОбъект» (SelectObject)выделяет указанный объект базыданных (в качестве аргументов необходимо указать тип объекта,который будет выбран и имя выбираемого объекта). Макрокоманда SelectObjectприменима к любому объекту Access, которому можно передать фокус.Эта макрокоманда переводит фокус на указанный объект и, если объект в данныймомент  скрыт, выводит его на экран. Для формымакрокоманда SelectObject автоматически устанавливает значение Дасвойства Вывод на экран (Visible) и восстанавливает режим окна формы,указанный в свойствахформы (например, режим модальнойили всплывающейформы). Для запуска макрокоманды SelectObject в программе VisualBasic следует использовать метод SelectObject объекта DoCmd.

Рассмотрим работу этих функций на примереБД Northwind и ее форм – Products и Categories. Реализуем возможность открытияформы Categories из формы Products.  Дляработы этих процедур выполняются следующие действия.

1.<span Times New Roman"">     

Добавить функции вновый  модуль.

2.<span Times New Roman"">     

Открыть форму Products(Товары) в режиме конструктора. В разделе примечания формы добавить кнопку cmdOpenHideи установить свойство Caption(Подпись) равным «Открыть Categories».Выберать в свойствах кнопки событие «Нажатие кнопки» (OnClick) и установить = OpenHide(“Categories”)

3.<span Times New Roman"">     

Открыть форму Categories(Категории) в режиме конструктора. В разделе примечания формы добавить кнопку cmdCloseUnhideи установить свойство Caption(Подпись) равным «Закрытьформу». Выбрать в свойствах кнопки событие «Нажатие кнопки» (OnClick)и установить = CloseUnhide()Задание №1

Реализовать возможностьоткрытия формы (Участники) из другойформы (Мероприятия). Вторая формадолжна хранить информацию о том, из какой формы она была открыта, чтобы послезакрытия восстановить на экране именно эту форму. Для этой цели используемсвойство, зарезервированное для пользователей Tag.

Проверьте работу:

Откройте форму Мероприятия. Нажмите кнопку «Открытие Участников». Текущая форма исчезнет с экрана и откроется форма Участники. Нажмите кнопку «Закрыть форму», снова появитсяформа  Мероприятия.

<img src="/cache/referats/25790/image005.jpg" v:shapes="_x0000_i1025">

<img src="/cache/referats/25790/image007.jpg" v:shapes="_x0000_i1026">

 Синхронизация двух форм

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

1.<span Times New Roman"">     

Открытие формы Ordersврежиме конструктора, добавление кнопки cmdViewCustomerс подписью «Сведения опокупателе» («ViewCustomer»). Для события «Нажатиекнопки» (OnClick) вводится процедура:

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Private Sub cmdViewCustomer_Click()

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    Dim strFormAs String

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    Dim strWhereAs String

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    strForm =«Customers»

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    strWhere =«CustomerID = Forms!Orders!CustomerID»

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">   DoCmd.OpenForm FormName:=strForm, wherecondition:=strWhere

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">End Sub

2.<span Times New Roman"">     

Если открыть форму Ordersинажать кнопку «Сведения о покупателе», то откроется форма  Customers, в которой выводятсясведения о данном покупателе.  При выборена форме Ordersзаказа другого клиента форма Customersне обновляется до тех пор, пока повторно не будет нажата кнопка «Сведения опокупателе».

3.<span Times New Roman"">     

Для реализации механизмасинхронизации форм необходимо создать процедуру обработки события длясинхронизации формы Customersпри смене записи в форме Orders. При переходе к другойзаписи используется событие Current«Текущая запись» формы Customers.Для определения, открыта ли форма Customers, процедура обработкисобытия Form_Currentдля формы Ordersиспользует функцию пользователя IsLoaded()

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Private Sub Form_Current()

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    Dim strFormAs String

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    Dim strWhereAs String

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    strForm =«Customers»

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    strWhere =«CustomerID = Forms!Orders!CustomerID»

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    IfIsLoaded(strForm) Then

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">       DoCmd.OpenForm FormName:=strForm, wherecondition:=strWhere

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    End If

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">End Sub

    

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Function IsLoaded (ByVal strFormName As String) AsBoolean

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    ConstconObjStateClosed = 0

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    ConstconDesignView = 0

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <>                                                                       

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">                                                                       ConObjStateClosed

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    Then

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">        IfForms(strFormName).CurrentView <> conDesignView Then

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">           IsLoaded = True

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">        End If

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">    End If

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> End Function

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">

4.<span Times New Roman"">     

При закрытии формы Ordersнеобходимо закрыть форму Customers(если она открыта).Процедура обработки события Closeв форме Orders,закрывает форму Customers, если она открыта.

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Private SubForm_Close()

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;color:windowtext">    Dim strForm As String

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">    strForm = «Customers»

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">    DoCmd.Close acForm, strForm

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">End Sub

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»">

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»">

Метод SysCmdможет возвращать сведения осостоянии объекта БД (не открыт или не существует, открыт, новый, изменен, ноне сохранен). Вызывая SysCmd метод с аргументами acSysCmdGetObjectState,objecttype(acТable,acQuery,acForm, acReport и т. п.) и objectname, мы получим информацию осостоянии определенного объекта БД (по указанному имени объекта).

Метод SysCmdс аргументом acSysCmdGetObjectStateможет возвращать только следующие константы.

Константа

Состояние объекта

Значение

acObjStateOpen

Открыт

1

acObjStateDirty

Изменен, но не сохранен

2

acObjStateNew

Новый

4

Если объект не открыт или не существует,метод SysCmdвозвращает значение 0.

Свойство CurrentView применительнок объектам формы определяет ее вид представления в текущий момент и возвращаетчисло типа Integer.

expression.CurrentView

expression  применительно к формам может быть: Forms!formname,

 Forms![formname],  Forms(«formname»)

Свойство CurrentView  принимает следующие значения.

<table cellspacing=«4» cellpadding=«0» ">

Режим конструктора

1

Режим формы

2

Список БД



Метод VisualBasicMoveSize изменяет положение илиразмеры активного окна. Его можно использовать для удобного с точки зренияпользователя расположения синхронизированных форм.

DoCmd.MoveSize 1440, 2400,, 2000

DoCmd.MoveSize(Right, Down, Width, Height)

Right–новое положение верхнего левого угла окна (по горизонтали) относительно левогокрая содержащего его окна.

Down – новое положениеверхнего левого угла окна (по вертикали) относительно верхнего края содержащегоего окна

Width – новая ширина окна.

Height– новая высота окна.

Задание №2

Создать процедуру обработкисобытия, которая будет открывать форму Организаторы,и синхронизировать ее с формой Мероприятия.Закрытие формы Организаторы должновызывать закрытие и формы Мероприятия.

<img src="/cache/referats/25790/image009.jpg" v:shapes="_x0000_i1027">

 

 

Выполнение операций с записями.

Семейство Recordsets.

 

Объекты Recordset представляют собойнаборы записей, являющихся результатом выполнения запроса или инструкции SQLнавыборку данных, или просто все записи в таблице. Новый объект Recordset создаетсяс помощью метода OpenRecordset объекта Database иавтоматически добавляется в семейство Recordsets.

Существует 5 типов объектов Recordset:

Таблица1

Тип

Константа

Описание

Таблица

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">db

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">OpenTable<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">

Этот тип может быть создан только на основе локальной таблицы ACCESS. Он содержит все записи этой таблицы. Можно изменять данные в этом объекте и добавлять и удалять записи.

Статистический набор записей

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">db

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">OpenSnapshot

Набор записей, создаваемый на основе таблицы, запроса или инструкции SQL. Обеспечивает только просмотр данных без его модификации.

Динамический набор записей

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">db

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">OpenDynaset

Набор записей, создаваемый на основе таблицы, запроса или инструкции SQL. Однако он является изменяемым и обновляемым.

Статический набор записей с последовательным доступом

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">dbOpenForwardOnly

Аналогичен статистическому набору записей во всем, кроме того, что он позволяет просматривать записи набора только вперед, т. е. один раз.

Динамический

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">dbOpenDynamic

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

Чтобы создать объектRecordset,нужно сначала создать объектную переменную. После этого выполняетсяприсвоение значений этой переменной с помощью метода OpenRecordset.Метод имеет аргументы:

<span Times New Roman"">       Источник данных для данного набора записей (таблица, запрос).

<span Times New Roman"">       Тип создаваемого объекта (одна из констант  из Таблицы1).

<span Times New Roman"">       Комбинация констант, которые определяют некоторые характеристикисоздаваемого объекта.

<span Times New Roman"">       Тип блокировки

Объект Recordset используется дляработы с записями и с полями в записях. Свойство Count семействауказывает количество полей в наборе записей. Семейство Fieldsявляется стандартным семейством объекта Recordset, поэтому возможна короткая ссылка rs! Имя (где переменная rsобъявлена, например как, DimrsAsDAO.Recordset).

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

Рассмотрим выполнение операций над записями спомощью свойств и методов объекта Recordset и Field,которые имеются в объектных моделях DAOи ADO.

<span Times New Roman"">     Рассмотрим объектную модель DAO.

Синтаксис создания объекта Recordset:

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">СсылкаНаОбъект_

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Database<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">_или_<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Connection<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">.<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">OpenRecordset<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> (источник, [типОбъекта]. <span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">[<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">параметры<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">]<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">, <span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">[<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">типБлокировки<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">]

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">

Значениеаргумента  параметры метода OpenRecordset:

Константа

Описание

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">dbAppendOnly

Разрешено только добавление записей в объект Recordset.

Применяется только для динамического набора записей.

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbSQLPassThrough

Результирующий набор – статический. Используется для выполнения прямого запроса к серверу, когда в качестве аргумента Источник указывается сам запрос.

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbSeeChanges

Применяется только для динамического набора и не разрешает изменять запись, если она уже редактируется другим пользователем

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbDenyWrite

Запрещено другим пользователям изменять и добавлять записи в наборе.

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbDenyRead

Запрещено другим пользователям изменять и добавлять записи и читать данные из таблицы (применяется только к объекту Recordset типа таблица).

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbForwardOnly

Дублирует константу acOpenForwardOnlyдля аргумента тип объекта.

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbReadOnly

Данные в наборе будут доступны только для чтения.

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbRunAsync

Выполняет асинхронный запрос.

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbExecDirect

Выполнение ускорения запроса.

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbInconsistent

Разрешены несогласованные изменения.

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbConsistent

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»">

Разрешены только согласованные обновления записей.

 Значение аргумента тип блокировки неприводится, т. к. в данной работе он не используется.

Перемещение по набору записей.

 

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

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">MoveFirst

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – переход к первой записи набора. Прииспользовании статистического курсора с последовательным доступом вызываетповторное выполнение команды, которая возвратила Recordset. Используетсяпри всех типах курсоров.<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">MoveNext

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – переход к следующей записи. Используется привсех типах курсоров.<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">MovePrevious

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – переход к предыдущей записи. <span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> При использованиистатического курсора с последовательным доступом вызывает генерацию ошибкивремени исполнения.

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">MoveLast

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> –переход к последней записи. Прииспользовании статического курсора с последовательным доступом вызываетгенерацию ошибки времени исполнения.

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»">

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">Move

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – позволяет переместиться на заданное числозаписей вперед или назад. При использовании статического курсора споследовательным доступом вызывает генерацию ошибки времени исполнения.

При перемещении по набору записей необходимо контролировать, чтобы непереместить указатель за границы набора. Используются два свойства: 

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">BOF

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – принимает значение TRUE, как только указательтекущей записи оказывается перед первой записью набора.<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">EOF –

принимает значение TRUE, кактолько указатель текущей записи оказывается после последней записи набора илиесли в наборе нет ни одной записи.

Организация цикла по набору записей:

Вариант 1

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Dim rs As DAO.Recordset

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Dim dbCur As Database

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; color:olive">‘

……………………………….

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; color:olive">‘

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;color:olive">Используется для заполненияисточника строк поля со списком формы

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Set dbCur=CurrentDb

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Set rs=dbCur.OpenRecordset («Select Код, НазваниеFROM Образование „_

<span Arial“,»sans-serif";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">& «ORDER BY Название», dbOpenSnapshot)

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">rs.MoveFirst

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">While Not rs.EOF

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">CmdEducation.RowSource= CmdEducation.RowSource &rs! Код & ";" &_

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">rs! Название & ";"

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">rs.MoveNext

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Wend

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">rs.Close

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbCur.Close

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">

Вариант 2

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;color:olive">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Dim rs As DAO.Recordset

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Dim dbCur As Database, i as integer

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;color:olive;mso-ansi-language:EN-US">‘

……………………………….

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;color:olive">

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Set dbCur=CurrentDb

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Set rs=dbCur.OpenRecordset («Кадры »,  dbOpenDynaset)

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">If rs.RecordCount <> 0 Then

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">rs.MoveFirst

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">For i=1 to rs.RecordCount

<span Arial",«sans-serif»; color:olive">'

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;color:olive"> Код обработки записи

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">rs.MoveNext

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Next I

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">End IF

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">rs.Close

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">dbCu

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">.<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Close<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">

Во втором варианте использовано свойство RecordCount.Для набора записей типа Таблицаэто свойство возвращает общее количество записей в наборе. Для набора записейстатического или динамического типа, значение этого свойства равно 1. Этопроисходит потому, что не все записи сразу считываются с источника, однакопредполагается, что набор содержит хотя бы одну запись. Чтобы узнать общеечисло записей в подобных наборах, нужно перейти в конец набора с помощью метода<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»"> 

Movelast (при этом все записи будутпрочитаны). Теперь свойство RecordCount будет содержать нужноезначение.

Иногда требуется определить позицию текущей записи внаборе. Свойство AbsolutePositionвозвращает абсолютнуюпозицию текущей записи  (от 1 до RecordCount),а свойство PercentPosition– относительную позициютекущей записи в процентах от числа записей, которое отражается в свойстве RecordCount(поскольку свойство RecordCount не всегда совпадает собщим числом записей в наборе, то рассматриваемое свойство не всегда возвращаетверное число).

Поиск записей в объекте Recordset.

 

Методы поиска записей в наборе зависят от типанабора записей. Для объектов Recordset типа Таблица используется метод Seek, а для статическогоили динамического наборов – группа методов Find. Для DAOдлястатического набора с последовательным доступом поиск не поддерживается вообще.

Seek использует индексы таблицы, на основе которойсоздан объект Recordset (в DAOего можно использовать толькодля объектов Recordset типа Таблица).Если поиск не был успешным, то в модели DAOтекущая запись неопределена.

Применение методов  Find.

ДляDAOопределены:

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">FindFirst

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – ищется первая запись, удовлетворяющаязаданным условиям.

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">FindLast

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – ищется последняя запись, удовлетворяющаязаданным условиям.

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">FindNext

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – ищется следующая запись, удовлетворяющаязаданным условиям.

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">FindPrevious

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – ищется предыдущая запись, удовлетворяющаязаданным условиям.

Каждый из этих методов имеет один аргумент, задающийусловия поиска (строится по правилам опции Whereв инструкции SQL).Результат поиска отображается в значении свойства NoMatchобъекта Recordset. При успешном поискеNoMatchимеет значение FALSE, а при неудаче – TRUE.

Каждый из методов Findначинает поиск сразных точек в разных направлениях.

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">FindFirst

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – начинает работу с начала набора и к концу.

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">FindLast

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – с конца к началу.

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">FindNext

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> – от текущей записи и к концу.

<span Times New Roman"">       <span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">FindPrevious

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">– от текущей записи и к началу.

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»;mso-bidi-font-weight: bold">Примечание:

В VBA допускается использование и динамическихмассивов, размеры которых при описании не фиксируются. Определение размера динамическогомассива может быть сделано непосредственно во время выполнения программы. Приопределении динамического массива в операторе Dim после имени массива стоятлишь пустые скобки и описание типа переменных. Количество индексов и диапазоних изменения не задаются. Однако перед тем, как использовать массив, нужновыполнить оператор ReDim, который задаст размерность и диапазоны измененияиндексов динамического массива.

Синтаксис объявления и определения размеровдинамического массива таков:

Dim <имяМассива> ( ) As <типДанных>

ReDim <имяМассива> (<размер1>[,<размер2>]... )

Более того, можно неоднократно использовать операторReDimдля изменения размерности оного и того же массива. Однако, так как приизменении размерности массива для него заново выделяется память, то текущиезначения его элементов теряются. Чтобы их сохранить при перераспределенииразмерности, используется ключевое слово Preserve. В этом случае можно поменятьтолько последний аргумент, задающий размерность массива.

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»;color:olive; mso-ansi-language:EN-US">‘

…………………………………………………………………..

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Private

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»"><span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Sub<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">  <span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">cmdFind<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">_<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Click<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">()

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Dim str AsString

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Dim db AsDatabase

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Dim rs AsDAO.Recordset

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Dim i AsInteger

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Set db =CurrentDb

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Set rs =db.OpenRecordset("

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">Вакансии<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> ", dbOpenSnapshot)

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;color:olive;mso-ansi-language:EN-US">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;color:olive;mso-ansi-language:EN-US"> 

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;color:olive;mso-ansi-language:EN-US">‘……………………………………………………………………

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;color:olive;mso-ansi-language:EN-US">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Ifrs.RecordCount = 0 Then

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">MsgBox«Вакансии отсутствуют»

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Exit Sub

<span Arial",«sans-serif»; mso

еще рефераты
Еще работы по программированию, базе данных