Добавлен: 05.12.2023
Просмотров: 345
Скачиваний: 7
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
rs.Open "Клиенты", cn, adOpenDynamic, adLockOptimisticrs.MoveFirstTextBoxIdClient.Text = rs.Fields("Id Клиента").ValueTextBoxFirstName.Text = rs.Fields("Фамилия").ValueTextBoxSecondName.Text = rs.Fields("Имя").ValueTextBoxThirdName.Text = rs.Fields("Отчество").ValueTextBoxGender.Text = rs.Fields("Пол").ValueTextBoxAddress.Text = rs.Fields("Адрес").ValueTextBoxPhoneNamber.Text = rs.Fields("Телефон").ValueExit SubErrorHandler:If ("База данных была приведена пользователем 'Admin' на компьютере 'DESKTOP-AEOHGQF' в состояние, препятствующее ее открытию или блокировке." = Err.Description) ThenDoCmd.CloseDoCmd.OpenForm "Клиенты"Err.ClearEnd IfIf ("Операция не допускается, если объект открыт." = Err.Description) ThenMsgBox "Подключение уже установлено!"End IfEnd SubПример кнопки «Удалить»:Private Sub CommandDelete_Click()rs.DeleteTextBoxIdClient.Text = ""TextBoxFirstName.Text = ""TextBoxSecondName.Text = ""TextBoxThirdName.Text = ""TextBoxGender.Text = ""TextBoxAddress.Text = ""TextBoxPhoneNamber.Text = ""End SubПример кнопки «Дальше»:Private Sub CommandNext_Click()If (rs.EOF = False) Then rs.MoveNextIf (rs.EOF) ThenMsgBox ("Дальше нет данных")Exit SubEnd IfTextBoxIdClient.Text = rs.Fields("Id Клиента").ValueTextBoxFirstName.Text = rs.Fields("Фамилия").ValueTextBoxSecondName.Text = rs.Fields("Имя").ValueTextBoxThirdName.Text = rs.Fields("Отчество").ValueTextBoxGender.Text = rs.Fields("Пол").ValueTextBoxAddress.Text = rs.Fields("Адрес").ValueTextBoxPhoneNamber.Text = rs.Fields("Телефон").ValueEnd SubЗапросыЗапрос – вопрос к БД, ответом на который будет служить одна, ни одной, или несколько записей удовлетворяющих критериям запроса. Задаваемы в запросе условия – значения конкретных полей – называются критериями отбора.Запросы позволяют:
В своей работе я создал 4 различных запросов (с точным совпадением, с неточным совпадением, с группировкой, с вычисляемым полем).Результат каждого запроса выводится в динамически создаваемую форму.Список всех запросов представлен на рисунке 6.Рисунок 6 — Список запросов в БД «Гостиница»Далее представлен запрос (рисунок 7) в режиме конструктора, с неточным поиском, который выводит данные клиентов, в Фамилии которых присутствуют заданные параметры «Не точный поиск» (начальные буквы/слоги фамилии).Рисунок 7 — запрос поиск по Фамилии в режиме конструктора БД «Гостиница».Далее представлен запрос после выполнения (рисунок 8). Введем, например, начальные буквы фамилии, так как реализован запрос с неточным поиском.Рисунок 8 — запрос начального параметра в БД «Гостиница».Далее (рисунок 9) получаем нужный результат:Рисунок 9 — результат запроса в БД «Гостиница»Если нам нужен запрос с точным совпадением, в условие отбора достаточно ввести квадратные скобки «[ ]». И в результате будет открыто диалоговое окно, предлагая ввести точные значения. Если внутри квадратных скобок написать текст, то диалоговое окно будет иметь сообщение с этим текстом.Рисунок 9 — Запрос поиск по номеру заселения в режиме конструктора БД «Гостиница».Рисунок 10 — Пример выполнения запроса с точным совпадением БД «Гостиница». Пример программы для обработки запроса «Поиск по номеру заселения»Private Sub CommandVisits_Click()Dim comsql As StringDim frm As FormDim ctl As ControlDim i As IntegerDim nomer As Stringcn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Admin\Desktop\Курсовая\Гостиница.accdb;Persist Security Info=False;"cn.Openrs.CursorLocation = adUseClientrs.CursorType = adOpenDynamicrs.LockType = adLockOptimisticnomer = InputBox("Введите № Заселения: ")If (nomer = "" Or Not (IsNumeric(nomer))) ThenMsgBox ("Введено неверное значение")cn.CloseExit SubEnd Ifcomsql = "SELECT Заселения.[№ Заселения], Клиенты.Фамилия, Клиенты.Имя, Клиенты.Отчество, Клиенты.Телефон, Гостиницы.Название FROM Гостиницы INNER JOIN (Клиенты INNER JOIN Заселения ON Клиенты.[Id Клиента] = Заселения.[Id Клиента]) ON Гостиницы.Название = Заселения.Гостиница WHERE (((Заселения.[№ Заселения]) Like '%" & nomer & "%'));"
On Error GoTo ErrorHandlerrs.Open comsql, cn, adOpenKeysetrs.MoveFirstSet frm = CreateFormWith frm.Caption = "Поиск по номеру заселения".ScrollBars = 0.RecordSelectors = False.NavigationButtons = False.DividingLines = False.AutoCenter = True.BorderStyle = 3.Section(0).Height = 3.862 * appCM.Width = 10.926 * appCM.HasModule = TrueEnd WithDim ctlText As ControlDim intDataX As Integer, intDataY As IntegerintDataX = 100intDataY = 100i = 0Set ctlText = CreateControl(frm.Name, acLabel, , "", "№ Заселения", intDataX, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", "Фамилия", intDataX + 3000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", "Имя", intDataX + 6000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", "Отчество", intDataX + 11000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", "Телефон", intDataX + 14000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", "Гостиница", intDataX + 17000, intDataY)intDataY = intDataY + 300While i < rs.RecordCountSet ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("№ Заселения").Value, intDataX, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("Фамилия").Value, intDataX + 3000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("Имя").Value, intDataX + 6000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("Отчество").Value, intDataX + 11000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("Телефон"), intDataX + 14000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("Название"), intDataX + 17000, intDataY)intDataY = intDataY + 300rs.MoveNexti = i + 1WendDoCmd.OpenForm frm.Namers.Closecn.CloseExit SubErrorHandler:If ("База данных была приведена пользователем 'Admin' на компьютере 'DESKTOP-AEOHGQF' в состояние, препятствующее ее открытию или блокировке." = Err.Description) ThenDoCmd.CloseDoCmd.OpenForm "Для запросов"Err.ClearEnd IfEnd Sub Так же добавлена обработка ошибок на случай если пользователь оставит поле «ввода» пустым или же введет неверные данные.Пример:Рисунок 11 — Диалоговое окно запроса БД «Гостиница».Результат:Рисунок 12 —Ошибка БД «Гостиница».ОтчетыОтчёт – форма для обработки данных на бумажных носителях.Содержание отчётов:
В следующем списке описаны разделы отчета и их использование:
-
фильтровать и сортировать данные; -
производить расчёты; -
группировать записи (рассчитывая различные итоговые значения); -
вносить изменения сразу в несколько записей; -
создавать таблицы, как результат запроса.
Типы запросов
-
Запрос на выборку – осуществляет загрузку и отображение записей в режиме таблицы. -
Перекрёстный запрос – позволяет выполнить подсчёты (суммы, количество записей и средние значения) по данным одного поля таблицы. Результаты группируются в ячейках, соответствующих конкретным полям обсчитываемой БД. -
Запрос на изменение – помогает выполнить операции с записями, удовлетворяющими заданным критериям: запрос на удаление удаляет их таблицы заданные записи; запрос на обновление изменяет соответствующие записи таблицы; запрос на добавление добавляет в конец таблицы новые записи (соответствующие условиям отбора); запрос на создание таблицы создаёт новые таблицы, состоящие из заданных частей. -
Запрос с параметрами – позволяет ввести информацию, используемую в качестве критериев отбора.
В своей работе я создал 4 различных запросов (с точным совпадением, с неточным совпадением, с группировкой, с вычисляемым полем).Результат каждого запроса выводится в динамически создаваемую форму.Список всех запросов представлен на рисунке 6.Рисунок 6 — Список запросов в БД «Гостиница»Далее представлен запрос (рисунок 7) в режиме конструктора, с неточным поиском, который выводит данные клиентов, в Фамилии которых присутствуют заданные параметры «Не точный поиск» (начальные буквы/слоги фамилии).Рисунок 7 — запрос поиск по Фамилии в режиме конструктора БД «Гостиница».Далее представлен запрос после выполнения (рисунок 8). Введем, например, начальные буквы фамилии, так как реализован запрос с неточным поиском.Рисунок 8 — запрос начального параметра в БД «Гостиница».Далее (рисунок 9) получаем нужный результат:Рисунок 9 — результат запроса в БД «Гостиница»Если нам нужен запрос с точным совпадением, в условие отбора достаточно ввести квадратные скобки «[ ]». И в результате будет открыто диалоговое окно, предлагая ввести точные значения. Если внутри квадратных скобок написать текст, то диалоговое окно будет иметь сообщение с этим текстом.Рисунок 9 — Запрос поиск по номеру заселения в режиме конструктора БД «Гостиница».Рисунок 10 — Пример выполнения запроса с точным совпадением БД «Гостиница». Пример программы для обработки запроса «Поиск по номеру заселения»Private Sub CommandVisits_Click()Dim comsql As StringDim frm As FormDim ctl As ControlDim i As IntegerDim nomer As Stringcn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Admin\Desktop\Курсовая\Гостиница.accdb;Persist Security Info=False;"cn.Openrs.CursorLocation = adUseClientrs.CursorType = adOpenDynamicrs.LockType = adLockOptimisticnomer = InputBox("Введите № Заселения: ")If (nomer = "" Or Not (IsNumeric(nomer))) ThenMsgBox ("Введено неверное значение")cn.CloseExit SubEnd Ifcomsql = "SELECT Заселения.[№ Заселения], Клиенты.Фамилия, Клиенты.Имя, Клиенты.Отчество, Клиенты.Телефон, Гостиницы.Название FROM Гостиницы INNER JOIN (Клиенты INNER JOIN Заселения ON Клиенты.[Id Клиента] = Заселения.[Id Клиента]) ON Гостиницы.Название = Заселения.Гостиница WHERE (((Заселения.[№ Заселения]) Like '%" & nomer & "%'));"
On Error GoTo ErrorHandlerrs.Open comsql, cn, adOpenKeysetrs.MoveFirstSet frm = CreateFormWith frm.Caption = "Поиск по номеру заселения".ScrollBars = 0.RecordSelectors = False.NavigationButtons = False.DividingLines = False.AutoCenter = True.BorderStyle = 3.Section(0).Height = 3.862 * appCM.Width = 10.926 * appCM.HasModule = TrueEnd WithDim ctlText As ControlDim intDataX As Integer, intDataY As IntegerintDataX = 100intDataY = 100i = 0Set ctlText = CreateControl(frm.Name, acLabel, , "", "№ Заселения", intDataX, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", "Фамилия", intDataX + 3000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", "Имя", intDataX + 6000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", "Отчество", intDataX + 11000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", "Телефон", intDataX + 14000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", "Гостиница", intDataX + 17000, intDataY)intDataY = intDataY + 300While i < rs.RecordCountSet ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("№ Заселения").Value, intDataX, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("Фамилия").Value, intDataX + 3000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("Имя").Value, intDataX + 6000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("Отчество").Value, intDataX + 11000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("Телефон"), intDataX + 14000, intDataY)Set ctlText = CreateControl(frm.Name, acLabel, , "", rs.Fields("Название"), intDataX + 17000, intDataY)intDataY = intDataY + 300rs.MoveNexti = i + 1WendDoCmd.OpenForm frm.Namers.Closecn.CloseExit SubErrorHandler:If ("База данных была приведена пользователем 'Admin' на компьютере 'DESKTOP-AEOHGQF' в состояние, препятствующее ее открытию или блокировке." = Err.Description) ThenDoCmd.CloseDoCmd.OpenForm "Для запросов"Err.ClearEnd IfEnd Sub Так же добавлена обработка ошибок на случай если пользователь оставит поле «ввода» пустым или же введет неверные данные.Пример:Рисунок 11 — Диалоговое окно запроса БД «Гостиница».Результат:Рисунок 12 —Ошибка БД «Гостиница».ОтчетыОтчёт – форма для обработки данных на бумажных носителях.Содержание отчётов:
-
Элементы оформления. -
Схемы и диаграммы. -
Верхние и нижние колонтитулы, содержащие служебную информацию. -
Графические элементы управления, в том числе фотографии и иллюстрации.
-
Конструктор -
Образец -
Предварительный просмотр
, которые требуется включить в отчет. При этом вы можете указать способ группировки и сортировки данных, а также добавить в отчет поля из нескольких таблиц или запросов, если отношения между ними заданы заранее.
-
на вкладке «Создание» в группе «Отчеты» выберите «Мастер отчетов»; -
следуйте указаниям на страницах мастера отчетов. На его последней странице нажмите кнопку «Готово».
-
В области навигации щелкните таблицу или запрос, на основе которых вы хотите создать отчет. -
На вкладке «Создание» в группе «Отчеты» выберите «Отчет».
-
на вкладке Создание в группе Отчеты выберите Пустой отчет; -
в режиме макета будет открыт пустой отчет, а в правой части окна Access появится область "Список полей";
-
в области Список полей щелкните знак плюс (+) рядом с одной или несколькими таблицами, содержащими поля, которые вы хотите включить в отчет; -
по очереди перетащите каждое из полей в отчет либо, нажав и удерживая клавишу CTRL, выберите несколько полей и перетащите их одновременно;
-
с помощью инструментов в группе Колонтитул на вкладке Конструктор можно добавить в отчет логотип компании, название, номера страниц, дату и время.
Разделы отчета
Отчет Access состоит из нескольких разделов. Разделы можно просматривать в режиме конструктора. Чтобы создавать полезные отчеты, необходимо понимать, для чего используется каждый раздел. Например, от того, в каком разделе размещается вычисляемый элемент управления, зависит то, как Access рассчитывает результаты.В следующем списке описаны разделы отчета и их использование:
-
заголовок отчета. Печатается только один раз в начале отчета. В заголовок включается информация, обычно помещаемая на обложке, например, логотип компании, название отчета или дата. Если в заголовок отчета добавлен вычисляемый элемент управления, использующий агрегатную функцию Sum, сумма рассчитывается для всего отчета. Заголовок отчета печатается перед верхним колонтитулом. -
верхний колонтитул. Печатается вверху каждой страницы. Верхний колонтитул используется в тех случаях, когда нужно, например, чтобы название отчета повторялось на каждой странице. -
заголовок группы. Печатается в начале каждой новой группы записей. Заголовок группы служит для печати имени группы. Например, в отчете, сгруппированном по товарам, заголовок группы можно использовать для печати названия товара. Если в заголовке группы есть вычисляемый элемент управления с агрегатной функцией Sum, сумма вычисляется для текущей группы. -
область данных. Этот раздел печатается один раз для каждой строки данных из источника записей. В нем размещаются элементы управления, составляющие основное содержание отчета. -
примечание группы. Печатается в конце каждой группы записей. Примечание группы можно использовать для печати сводной информации о ней. -
нижний колонтитул. Выводится в конце каждой страницы. Используется для нумерации страниц и печати сведений, относящихся к странице. -
примечание отчета. Печатается один раз в конце отчета. Примечание отчета можно использовать для печати итогов и другой сводной информации по всему отчету.