Автоматизация приложения с помощью VBA: Методические рекомендации по выполнению лабораторной работы, страница 4

    Dim rst As Recordset

    Set rst = CurrentDb.OpenRecordset("Клиенты", dbOpenDynaset)

      rst.FindFirst "Город = ‘Омск’"

   If rst.NoMatch Then

         MsgBox "Нет клиентов из Омска!"

   Else

        MsgBox "Первый клиент Из Омска - " & rst![ Название]

   End If

   End Function

2. В окне отладки введите ? Поиск().

Создать функцию для копирования цены из поля таблицы в поле формы

 1.    Создайте функцию (в стандартном модуле):

Function Copir(tForm As Form, tPole As String)

Dim tDB As Database, tTB As Recordset

  Set tDB = CurrentDb()

  Set tTB = tDB.OpenRecordset("Товары", dbOpenTable)

  tTB.Index = "КодТовара"

  tTB.Seek "=", tPole

  tForm.[Цена] = tTB![Цена]

  tTB.Close

End Function

2.  В ячейке свойства После обновления поля КодТовара формы Заказанный товар введите 

= Copir(Forms![Заказанный товар], Forms![Заказанный товар]![КодТовара]).

Примечание. 

Для   передачи   информации   в   функцию  используются    два

параметра.  Первый – название формы, в которую нужно скопировать поле. Это поле Цена в форме Заказанный товар. Второй параметр – поле формы, по которому производится поиск в таблице Товары. Во второй строке модуля объявляются переменные, соответствующие базе данных и таблице. Третья строка устанавливает переменную tTB на текущую открытую БД. В четвертой строке открывается таблица. В пятой строке задается индекс по полю Код товара. В шестой строке осуществляется поиск в таблице Товары поля с кодом товара, который выбран в форме.  Седьмая строка производит копирование цены из таблицы в форму. В восьмой строке таблица закрывается.

      Открытие объекта Recordset типа Table позволяет быстро найти запись в таблице при помощи метода Seek. Этот метод можно применять только к объекту Recordset типа Table, если поле таблицы, содержащее искомое значение, проиндексировано.

       Еще один способ – использование функции DLookup. Процедура должна выглядеть следующим образом:

 Private Sub КодТовара_AfterUpdate()

   Dim strFilter As String

    strFilter = "КодТовара=" & Me![КодТовара]

    Me![Цена] = DLookup("Цена", "Товары", strFilter)

End Sub

Создание процедуры подсчета числа заказов на определенную дату

Создайте функцию подсчета количества заказов, сделанных в определенный день. Данная функция осуществляет подсчет заказов, оформленных 26 марта 2000 года.

Function Zakaz ()

Dim tDB As Database, rs As Recordset, dc As Integer

Set tDB = CurrentDb()

Set rs = tDB.OpenRecordset("Заказы", dbOpenTable)

rs.Index = "ДатаРазмещения"

rs.Seek "=", "26.03.00"

 If rs.NoMatch Then

      MsgBox "Нет заказов в этот день "

 Else

   Do

        dc = dc + 1

        rs.MoveNext

        If rs.EOF Or rs![ДатаРазмещения] <> "26.03.00" Then

        Exit Do

        End If

   Loop

   MsgBox "Всего" & Str$(dc) & "заказов 26 марта."

End If

        End Function

Создание процедуры возврата в окно базы данных

1.  В кнопочную форму, созданную ранее, в режиме конструктора при отключенном мастере добавьте   кнопку Окно базы даных.

2.  Процедура:

 Private Sub Окно_базы_данных_Click()

 Dim dn As String

 dn = "Заказы"

 DoCmd.Close

 DoCmd.SelectObject acTable, dn, True

 End Sub

Данная процедура откроет окно базы данных и маркирует таблицу Заказы.

Создание процедуры обработки события отсутствия в списке

1.  Откройте форму Заказы в режиме конструктора.

2.  В свойстве Ограничиться списком  поля    КодКлиента  формы Заказы выберите значение -Да

3.  В свойстве события Отсутствие в списке поля со списком КодКлиента введите следующую процедуру:

Private Sub КодКлиента_NotInList(NewData As String, Response As Integer)

Dim intReturn As Integer

intReturn = MsgBox(" Клиента с таким кодом в списке нет. Хотите добавить ?", vbQuestion + vbYesNo)

If intReturn = vbYes Then

DoCmd.OpenForm FormName:="НовыйКлиент", DataMode:=acFormAdd,                WindowMode:=acDialog

 Response = acDataErrAdded

Exit Sub

End If

Response = acDataErrDisplay

End Sub

Примечание.

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


Рис.6.2. Форма для ввода нового клиента, созданная в лабораторной работе №3

Если нажать Да,  процедура откроет форму НовыйКлиент в режиме диалога, используя метод DoCmd.OpenForm. Форма показана на рисунке 6.2.

Access передает два аргумента процедуре обработки события NotInList. Первый, NewData, содержит строку символов, введенную в поле со списком. Второй, Response, определяет реакцию Access на это событие.

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

     Если в окне сообщения была нажата кнопка  Нет, аргументу Response присвоится константа  acDataErrAdded, и Access отобразит стандартное сообщение.

4.  Запустите форму Заказы и в поле КодКлиента введите код, которого нет в списке.

5.  Перейдите к другому полю или нажмите Enter и проверьте работу процедуры.

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

1.  Создайте простую модальную форму Диалог следующего содержания :


2.  Для кнопок Просмотр отчета и Отмена напишите процедуры:

          Private Sub Отмена_Click()

   DoCmd.Close

End Sub

Private Sub Просмотр_отчета_Click()

 Me.Visible = False

End Sub

3.  Откройте ОтчетОКлиентах в режиме конструктора.

4.  Откройте запрос – источник записей отчета.

5.  В строке Условие отбора поля ДатаРазмещения введите условие:

      Between Forms![Диалог]![С какой даты] And Forms![Диалог]![По какую дату]

6. В заголовок отчета добавьте поля и надписи:

Рис.6.4. Отчет о клиентах.

 

 


7.  Для открытия и закрытия отчета создайте процедуры:

 Private Sub Report_Close()

Dim strDocName As String

strDocName = "Диалог"

DoCmd.Close acForm, strDocName

End Sub

Private Sub Report_Open()

Dim strDocName As String

strDocName = "Диалог"

DoCmd.OpenForm strDocName, , , , , acDialog

End Sub

  8. Откройте отчет в режиме предварительного просмотра и проверьте правильность выбранных данных.

Содержание отчета

1.  Тема лабораторной работы.

2.  Цель лабораторной работы.

3.  Результаты работы программ.