Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМП по БД 5244.doc
Скачиваний:
148
Добавлен:
09.04.2015
Размер:
3.82 Mб
Скачать

Лабораторная работа №4. Разработка приложения на Visual Basic для ведения однотабличной бд.

Цель работы:

  • Ознакомиться с операторами VB при разработке прикладных программ с использованием СУБД;

  • Исследовать правила реализации операций ведения БД: добавления, удаления, редактирования, поиска, фильтрации и пр.

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

Ход работы:

Рассмотрим проект VB, выполняющий обработку однотабличной БД, созданной в СУБД MS Access. Для этого, открыв MS Access, с помощью Конструктора, создайте таблицу с именем Spisok (все имена должны быть латинскими и не иметь пробелов) со следующей структурой:

Обратите внимание, если Вы задаете другие имена, их же должны использовать при обращении к полям в программе!

Сохранив созданный файл, закройте СУБД, и вызовите MS Visual Basic (обычно это можно выполнить следующим образом: Пуск->Программы->MS Visual Basic->MS Visual Basic, если путь не совпадает, уточните порядок запуска приложения у лаборанта или преподавателя).

В открывшем окне «Новый проект» необходимо выбрать значок «Стандартный». После этого редактор создаст новый VB-проект с одной формой. Далее показан внешний вид редактора VB и даны расшифровки его составляющих.

В окне свойств измените имя формы на frmSpisok. Задание имен объектов с использованием приставки является одним из правил хорошего тона в программировании. Встретив в тексте программы указание на объект в виде “frmSpisok” программист понимает, что этим объектом является одна из форм проекта. Аналогично задают приставки для прочих объектов. Обычно они формируются из трех первых букв, либо первых трех по порядку согласных названия типа объекта. (Form = frm, CommandButton = cmb, Data = dat и т.д.)

Сохраните проект в каталоге указанном преподавателем.

  1. Найдите кнопку объекта Data на панели инструментов и разместите его внизу окна.

  2. Задайте его основные свойства для подключения файла БД к основному приложению: Name – DataStud, DataBaseName (указать маршрут доступа к файлу БД), RecordSource – Spisok.

  3. Вызвав ToolsMenu Editor, сформируйте контекстное меню Вашего приложения: на основном уровне (размещайте стрелками) Запросы, Отчёты и Выход (mnuExit). Подуровни для Запросы: Поиск(mnuPoisk) и Обновление(mnuObnovl), для Отчёты: Справка школы(rptSprav), Список учащихся (mnu.RepSp). Для подуровня Поиск задайте 2-ое вложение: Простой поиск (mnuFind) и Фильтрация записей(mnuFilt).

  4. С помощью ЭУ надпись и текстовое поле сформируйте объекты для вывода фамилии, имени и группы. В свойствах текстовых полей для отображения соответствующих значений полей БД задайте: н-р, для фамилии DataSource – DataStud, DataField – Familie. И так, соответственные данные по каждому полю.

  5. Добавьте в форму ЭУ Frame. Через окно свойств присвойте заголовок рамки «Успеваемость» и разместите в ней данные об оценках. Можно это сделать либо при помощи текстовых полей, либо с помощью объекта DBCombo.

  6. Если Вы воспользовались объектомDBCombo, в окне свойств установите следующие параметры: RowSource – DataStud, ListField – Word (или Excel, Access, соответственно), такие же значения для свойств DataSource и DataField).

  1. Теперь дело за программированием кнопок Добавления, удаления, сохранения изменений для записей БД и отмены действий.

  2. Добавив кнопки в форму и присвоив им имена, (см. по тексту модулей), двойным щелчком левой кнопки мыши входим в редактор процедур этих объектов и формируем соответствующий код (см. ниже).

Private Sub mnuExit_Click()

Unload Me

End Sub

Private Sub mnuObnovl_Click()

frmRefresh.Show

End Sub

Private Sub mnuFilt_Click()

frmQuery.Show

End Sub

Private Sub mnuPoisk_Click()

frmFind.Show

End Sub

Private Sub CmbAdd_Click()

Dim m As Long

DataStud.Recordset.MoveLast

m = DataStud.Recordset![Cod]

DataStud.Recordset.AddNew

fl = True

DataStud.Recordset![Cod] = m + 1

cmbSave.Enabled = True

End Sub

Private Sub cmbCancel_Click()

fl = False

DataStud.UpdateControls

cmbSave.Enabled = False

End Sub

Private Sub cmbDelete_Click()

fl = False

DataStud.Recordset.Delete

DataStud.Recordset.MoveLast

DataStud.Caption = "Записей:" & DataStud.Recordset.RecordCount

End Sub

Private Sub cmbSave_Click()

Dim kl As Long

DataStud.Recordset.MoveLast

kl = DataStud.Recordset.RecordCount

DataStud.Caption = "Записей:" & kl

If Not fl Then

DataStud.Recordset.Edit

End If

DataStud.Recordset.Update

' cmbSave.Enabled = False

End Sub

  1. Формируем диалог по запросам. Необходимо организовать поиск записей по заданному критерию 2 способами. Первый – с использованием последовательного доступа (FindFirst, Findnext … ), второй – с использованием SQL-запроса на выборку (параллельный поиск, фильрация).

  2. В первом случае, процедуре mnuFind (вызываемой по подпункту ЗапросыПоиск) назначаем отображение формы, в которой будет задаваться критерий поиска записей (например, по фамилии студента). В форме можно сформировать одно текстовое поле txtFind и кнопку Поиск cmdPoisk.

  1. Для кнопки задать следующую процедуру:

Private Sub cmdPoisk_Click()

Dim D As String

D=frmSpisok.DataStud.Recordset.Bookmark

With frmSpisok.DataStud.Recordset

.FindNext “Familie=” & Chr(34) & txtFind.Text & Chr(34)

If .NoMatch Then

.FindFirst “Familie=” & Chr(34) & txtFind.Text & Chr(34)

If .NoMatch Then

MsgBox “No record Find!”

.Bookmark=D

End If

End If

End With

frmFind.txtFind.Text=””

frmFind.Hide

End Sub

  1. Во втором случае, вся последовательность действий сохраняется как и при работе с первой формой (всегда начинаете с подключения объекта Data).

  2. В этой форме мы используем объект DBGrid для отображения данных в привычном табличном виде. Добавляем этот объект DBGrid в нашу форму, установив его имя DBGridSelRes, также задаём свойству DataSource значение DataStud1.

  1. Вводим процедуру обработки для кнопки Отобразить результат:

Private Sub cmdShow_Click()

Dim SQLStr As String

Dim CapStr As String

'Выбираем поля для просмотра в таблице

SQLStr = "SELECT Familie,Imja,Group, Word, Excel, Access FROM Spisok"

If (DBCmbFam.Text <> "") And (DBCmbGroup.Text <> "") Then

SQLStr = SQLStr & " WHERE (Familie=" & Chr(34) & DBCmbFam.Text & Chr(34) & ") AND (Group= " _

& Chr(34) & DBCmbGroup.Text & Chr(34) & ")"

Else

SQLStr = SQLStr & " WHERE (Familie=" & Chr(34) & DBCmbFam.Text & Chr(34) & ") OR (Group= " _

& Chr(34) & DBCmbGroup.Text & Chr(34) & ")"

End If

SQLStr = SQLStr & " ORDER BY Group DESC"

'MsgBox SQLStr

DataStud1.RecordSource = SQLStr

DataStud1.Refresh

'Создаем строку заголовка объекта TDBGridSelRes

CapStr = "РЕЗУЛЬТАТ ОТБОРА"

DBGridSelRes.Caption = CapStr

If DBGridSelRes.Visible = False Then

DBGridSelRes.Visible = True

End If

DBGridSelRes.SetFocus

End Sub

12. Третья форма для обновления содержимого полей БД имеет вид:

Начните её формирование также с добавления объекта Data (DataStud2) и установки соответствующих свойств.

В рамке разместите 4 переключателя, для каждого из которых (по строке) разместите текстовое поле и раскрывающийся список (задайте их значения свойств). И значению Visible каждого поля и списка присвойте значение False/

12. Для кнопки Обновить введите нижеследующий текст процедуры.

Private Sub cmdRefr_Click()

Dim SQLStr As String

Dim Buf As Database

Set Buf = OpenDatabase("Spisok.mdb")

SQLStr = "UPDATE Spisok SET "

'Выбираем поля для обновления

If optGR = True Then

SQLStr = SQLStr & "[Group]=" & Chr(34) & txtNewGR.Text & Chr(34) & " WHERE ([Group]= " _

& Chr(34) & DBCombo1.Text & Chr(34) & ")"

End If

If optWord = True Then

SQLStr = SQLStr & "Word=" & txtNewWrd.Text & " WHERE Word= " & DBCombo2.Text

End If

If optExc = True Then

SQLStr = SQLStr & "Excel=" & txtNewExc.Text & " WHERE Excel= " & DBCombo3.Text

End If

If optAcc = True Then

SQLStr = SQLStr & "Access=" & txtNewAcc.Text & Chr(34) & " WHERE (Access= " & DBCombo4.Text

End If

MsgBox SQLStr

Buf.Excecute SQLStr

Buf.Close

End Sub

Private Sub optAcc_Click()

txtNewAcc.Visible = True

DBCombo4.Visible = True

End Sub

Private Sub optExc_Click()

txtNewExc.Visible = True

DBCombo3.Visible = True

End Sub

Private Sub optGR_Click()

txtNewGR.Visible = True

DBCombo1.Visible = True

End Sub

Private Sub optWord_Click()

txtNewWrd.Visible = True

DBCombo2.Visible = True

End Sub

Не забывайте по окончании каждого этапа работ сохранять изменённый проект (желательно все файлы в одной папке)

13. Теперь необходимо сформировать отчёты.

Для этого добавьте в проект объект Data Report, задайте имя MyReport. Здесь мы сформируем отчёт «Справка» для конкретного учащегося Вы видите, что форма отчета состоит из 5 областей, так же как и в MS Access, в отчете 5 областей заголовок отчёта(4), верхний колонтитул(2), область данных(1), нижний колонтитул(3), примечание отчета(5).

В области заголовка, используя элементы управления DataReport, создайте метку, и в окне свойств введите параметры свойств Caption, Font и пр. для придания читабельного вида отчету. Если в отчете будут использованы данные из таблиц БД, отобразить данные из полей можно при помощи ЭУ RptTextBox, в значении свойства DataField которого введите имя соответствующего поля БД. Например, отчет «Справка» будет выглядеть следующим образом:

  1. Для связи внешнего приложения с БД в отчетах с использованием ADO доступа к данным, необходимо создать пользовательский ресурс. Откройте Панель управления Вашего ПК (эти настройки необходимо выполнять на каждом ПК, где Вы будете редактировать приложение), откройте окно администрирования ODBC (ODBC Data Sources).

  2. На вкладке User DSN щелкните кнопку Add для добавления нового источника и выберите в открывшемся окне Driver Microsoft Access (*.mdb). В окне дополнительных параметров введите любое имя источника данных (например, main) и укажите путь к своей БД при помощи кнопки Select:

  1. Теперь осталось дело за программным кодом. В проекте VB выберите форму frmSpisok и войдите в редактор VB, щелкнув двойным щелчком по соответствующему пункту меню. Текст процедуры приведен ниже:

Dim main As ADODB.Connection

Dim rec As ADODB.Recordset

Private Sub mnuSprav_Click()

Set main = New ADODB.Connection

main.Open "dsn=main"

Set rec = main.Execute("SELECT Spisok.Group, Spisok.Familia, Spisok.Imja " & _

"From Spisok " & _

"WHERE (Spisok.Familia='" & DataStud.Recordset!Familia & "' AND " & _

"Spisok.Group='" & DataStud.Recordset!Group & "')")

Set MyReport.DataSource = rec

MyReport.Show

End Sub

  1. Протестируйте работу отчета из приложения.

  2. Для создания 2-го отчета добавим в проект VB элемент DataEnvironment1, как правило элемент добавляется сразу с 1 подключением (Connection1).

  3. Вызовите окно свойств (Properties) Connection1 и в открывшемся окне выберите вкладку Connection. На вкладке выберите переключатель Use connection string (строка подключения). Станет доступно текстовое поле в котором будут сформированы параметры подключения БД.

  1. Параметры подключения формируйте при помощи кнопки Build. В окне Select Data Source на 2 вкладке (Machine Data Source) выберите имя своего источника данных main. (ОК).

  2. Щелкните кнопку DataBase и сформируйте маршрут доступа к БД (которой соответствует имя main)

  3. Вернитесь в окно свойств подключения. Теперь Вам можно в 3 пункте выбрать маршрут к Вашей БД. (см. рис)

  4. Проверьте подключение БД при помощи кнопки Test Connection

  5. Щелкните правой кнопкой мыши по Connection и добавьте в проект для подключения команду (Add Comand).

  6. Произведем настройки для Command1. В свойствах объекта выберите для Database Object : Table, а в Object Name введите имя таблицы spisok.

  7. В дереве DataEnvironment появятся поля таблицы spisok.

  8. Создадим второй отчет «Список учащихся», в свойствах отчета укажите: для DataSource выберите из списка имя DataEnvironment1, в DatMember – Command1.

  9. Правила формирования надписей такие же, как и в предыдущем отчете. Отличие заключается только при установке свойств текстовых полей: в DataMember выберите из списка имя Command1, после чего в свойстве DataField появится список полей таблицы spisok. Выберите нужное Вам поле.

  10. Оформите внешний вид отчета (на своё усмотрение), после чего перейдите в модуль формы frmSpisok и назначьте меню вызова отчета процедуру по отображению отчета:

Private Sub mnuRepSp_Click()

DataReport2.Show

End Sub

  1. Протестируйте работу приложения

  2. По окончании скомпилируйте exe-файл своей работы (File – Make Project1.exe), указав свое имя проекта и предоставьте преподавателю для защиты.