Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB_6.doc
Скачиваний:
97
Добавлен:
01.12.2018
Размер:
3.77 Mб
Скачать

Приложение 6. Пример обработки бд Access в среде vb.

Создать БД с таблицами:

  1. Номер курса, номер группы, номер в группе, ФИО, пол, год рождения.

  2. Номер курса, номер группы, номер в группе, оценки по 6 экзаменам.

С помощью меню пользователя обеспечить возможность обработки БД:

- корректировки записей в таблицах;

- добавления новых записей в таблицы;

- удаления заданных записей из таблиц.

Обработав БД, получить таблицу:

  1. Справка о студентах, чей средний балл ниже общего среднего значения.

  2. На основании 1-ой таблицы сформировать запрос к БД, позволяющий вывести данные о студентах, чьи фамилии начинаются с введенной с клавиатуры заглавной русской буквы

.

В среде VB с помощью надстройки Visual Data Manager или в среде Access создаем базу данных “Institut” содержащую заданные условием

задачи таблицы и запросы.

Открываем проект и на форме располагаем элемент MSFlexGrid и текстовое окно для вывода результата решения задачи. На форме создаем пользовательское меню со следующей структурой:

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

Добавляем к проекту стандартный модуль и записываем в него процедуру подключения к созданной БД:

Public Sub Connect(db$, tb$, cn As Object, rs As Object)

cn.ConnectionString = "Driver=Microsoft Access Driver (*.mdb)"

cn.Open ("Provider=Microsoft.Jet.OLEDB.3.51; Data Source=" & _

CurDir & "\" & db & ".mdb")

rs.ActiveConnection = cn

rs.CursorType = adOpenDynamic

rs.LockType = adLockPessimistic

rs.Open tb

End Sub

Для пунктов меню в окне кода объявляем общедоступные переменные и записываем необходимые процедуры:

Public cn As New ADODB.Connection, rs As New ADODB.Recordset

Public st$, kolzap%

Процедура вывода на экран таблицы “Сессия” БД.

Private Sub mnuSessia_Click()

Dim i%, cn1 As New ADODB.Connection

Dim j%, rs1 As New ADODB.Recordset

Label1.Visible = False

Text1.Visible = False

Подключаем объекты ADO к БД:

Call Connect("Institut", "Сессия", cn1, rs1)

Определяем количество записей в таблице "Сессия":

kolzap = 0

Do While Not rs1.EOF

rs1.MoveNext

kolzap = kolzap + 1

Loop

Задаем параметры элемента MSFlexGrid:

MSFG1.Cols = rs1.Fields.Count: MSFG1.Rows = kolzap + 1

For i = 0 To rs1.Fields.Count - 1

MSFG1.ColWidth(i) = MSFG1.Width / (rs1.Fields.Count + 2)

Next i

Задаем заголовки столбцов элемента MSFlexGrid:

MSFG1.FormatString= "^№ |^№ курса |^№ группы |^№ в группе |^ О1” _

“|^О2 |^ О3 |^ О4 |^ О5 |^ О6"

Заносим в MSFlexGrid данные из таблицы "Сессия"

:

rs1.MoveFirst

For i = 1 To kolzap

For j = 0 To 9

MSFG1.TextMatrix(i, j) = rs1.Fields(j)

Next j

rs1.MoveNext

Next i

Закрываем подключение ADO к БД и освобождаем

занимаемую объектами ADO память:

rs1.Close

Set rs1 = Nothing

cn1.Close

Set cn1 = Nothing

End Sub

Процедура вывода на экран таблицы “Студенты” БД.

Private Sub mnuStudents_Click()

Dim i%, cn2 As New ADODB.Connection

Dim j%, rs2 As New ADODB.Recordset

Label1.Visible = False

Text1.Visible = False

Подключаем объекты ADO к БД:

Call Connect("Institut", "Студенты", cn2, rs2)

Определяем количество записей в таблице "Студенты":

kolzap = 0

Do While Not rs2.EOF

rs2.MoveNext

kolzap = kolzap + 1

Loop

Задаем параметры элемента MSFlexGrid:

MSFG1.Cols = rs2.Fields.Count: MSFG1.Rows = kolzap + 1

For i = 0 To rs2.Fields.Count - 1

MSFG1.ColWidth(i) = MSFG1.Width / (rs2.Fields.Count + 2)

Next i

Задаем заголовки столбцов элемента MSFlexGrid:

MSFG1.FormatString= "^№ |^№ курса |^№ группы |^№ в группе |<ФИО” _

] “|^Пол |^Год рождения"

Заносим в MSFlexGrid данные из таблицы "Студенты":

rs2.MoveFirst

For i = 1 To kolzap

For j = 0 To 6

MSFG1.TextMatrix(i, j) = rs2.Fields(j)

Next j

rs2.MoveNext

Next i

Закрываем подключение ADO к БД и освобождаем

занимаемую объектами ADO память:

rs2.Close

Set rs2 = Nothing

cn2.Close

Set cn2 = Nothing

End Sub

Процедура решения поставленной в условии задачи.

Private Sub mnuViewResult_Click()

Dim sr!(), i%, j%, k%, osr!

Создаем объекты Connection и RecordSet для таблицы "Сессия":

Dim cn1 As New ADODB.Connection, rs1 As New ADODB.Recordset

Создаем объекты Connection и RecordSet для таблицы "Студенты":

Dim cn2 As New ADODB.Connection, rs2 As New ADODB.Recordset

Label1.Visible = True

Text1.Visible = True

Подключаем объекты ADO к БД:

Call Connect("Institut", "Сессия", cn1, rs1)

Подсчитываем кол-во записей в таблице:

kolzap = 0

Do While Not rs1.EOF

rs1.MoveNext

kolzap = kolzap + 1

Loop

ReDim sr(1 To kolzap)

Для каждого студента определяем его средний балл и полученные

значения заносим в массив sr:

osr = 0: rs1.MoveFirst

For i = 1 To kolzap

sr(i) = 0

For j = 4 To 9

sr(i) = sr(i) + rs1.Fields(j) / 6

Next j

osr = osr + sr(i)

rs1.MoveNext

Next i

Определяем общий средний балл и выводим его значение в

текстовое окно:

osr = osr / kolzap

Text1.Visible = True

Label1.Visible = True

Text1.Text = " " & Format(osr, "Fixed")

Задаем параметры элемента управления MSFlexGrid:

MSFG1.Clear

MSFG1.Cols = 6: MSFG1.Rows = kolzap + 1

For i = 0 To 5

MSFG1.ColWidth(i) = MSFG1.Width / 5

Next i

For i = 0 To kolzap

MSFG1.RowHeight(i) = MSFG1.Height / 7

Next i

MSFG1.FormatString= "^№ |^№ курса |^№ группы |^№ в группе |<ФИО" _

"|^ Ср. балл "

Из таблицы "Сессия" заносим в MSFlexGrid значения № курса, №

группы, № в группе и средний балл тех студентов, у которых средний

балл ниже общего среднего балла:

k = 0

rs1.MoveFirst

For i = 1 To kolzap

If sr(i) < osr Then

k = k + 1

For j = 1 To 3

MSFG1.TextMatrix(k, j) = rs1.Fields(j)

Next j

MSFG1.TextMatrix(k, 0) = k

MSFG1.TextMatrix(k, 5) = Format(sr(i), "Fixed")

End If

rs1.MoveNext

Next i

Подключаем объекты ADO к таблице "Студенты" базы данных:

Call Connect("Institut", "Студенты", cn2, rs2)

Из таблицы "Студенты" заносим в MSFlexGrid фамилии тех

студентов, у которых средний балл ниже общего среднего балла:

k = 0

rs2.MoveFirst

For i = 1 To kolzap

If sr(i) < osr Then

k = k + 1

MSFG1.TextMatrix(k, 4) = rs2.Fields(4)

End If

rs2.MoveNext

Next i

Окончательно закрываем подключение объектов ADO к БД:

rs1.Close

Set rs1 = Nothing

cn1.Close

Set cn1 = Nothing

rs2.Close

Set rs2 = Nothing

cn2.Close

Set cn2 = Nothing

End Sub

Процедура корректировки данных в БД.

Private Sub mnuEditRec_Click()

Dim i%, n%, sz$, nf As Variant

rs.LockType = adLockOptimistic

Label1.Visible = False

Text1.Visible = False

st = InputBox("Введите имя таблицы")

Подключаем объекты ADO к БД:

Call Connect("Institut", st, cn, rs)

Выводим на экран таблицу:

If st = "Сессия" Then mnuSessia_Click Else mnuStudents_Click

Вводим данные для корректировки:

n = InputBox("Введите номер корректируемой записи")

sz = InputBox("Введите имя корректируемого поля записи")

nf = InputBox("Введите новое значение корректируемого поля")

Находим запись с нужным номером и корректируем ее заданное

поле:

Do While Not rs.EOF

If rs.Fields(0) = n Then rs.Fields(sz) = nf: Exit Do

rs.MoveNext

Loop

rs.Update

Прерываем связь объектов Connection и RecordSet с БД

и освобождаем занимаемую ими память:

rs.Close

Set rs = Nothing

cn.Close

Set cn = Nothing

Выводим на экран отредактированную таблицу:

If st = "Сессия" Then mnuSessia_Click Else mnuStudents_Click

End Sub

Процедура добавления новых данных в БД.

Private Sub mnuSetNewRec_Click()

Dim i%, pz As Variant

rs.LockType = adLockOptimistic

Label1.Visible = False

Text1.Visible = False

st = InputBox("Введите имя таблицы, в которую хотите добавить” _

“ новую запись")

Call Connect("Institut", st, cn, rs)

Выводим на экран таблицу:

If st = "Сессия" Then mnuSessia_Click Else mnuStudents_Click

Добавляем новую запись в таблицу:

rs.AddNew

For i = 0 To rs.Fields.Count - 1

pz = InputBox("Введите значение " & i & "-го поля новой записи” _

“ таблицы " & st & ". При вводе нужно соблюдать уникальность” _

“ комбинации: № курса, № группы, № в группе")

rs.Fields(i) = pz

Next i

rs.Update

Прерываем связь объектов Connection и RecordSet с БД

и освобождаем занимаемую ими память:

rs.Close

Set rs = Nothing

cn.Close

Set cn = Nothing

Выводим на экран измененную таблицу:

If st = "Сессия" Then mnuSessia_Click Else mnuStudents_Click

Do

Loop Until MsgBox(" Таблица " & st, 64) = vbOK

Переходим к другой таблице:

If st = "Сессия" Then st = "Студенты" Else st = "Сессия"

rs.LockType = adLockOptimistic

Call Connect("Institut", st, cn, rs)

Выводим на экран другую таблицу:

If st = "Сессия" Then mnuSessia_Click Else mnuStudents_Click

Добавляем новую запись в другую таблицу:

rs.AddNew

For i = 0 To rs.Fields.Count - 1

pz = InputBox("Введите значение " & i & "-го поля новой записи” _

“ таблицы " & st & " При вводе нужно соблюдать уникальность” _

“ комбинации: № курса, № группы, № в группе")

rs.Fields(i) = pz

Next i

rs.Update

Прерываем связь объектов Connection и RecordSet с БД

и освобождаем занимаемую ими память:

rs.Close

Set rs = Nothing

cn.Close

Set cn = Nothing

Выводим на экран измененную другую таблицу:

If st = "Сессия" Then mnuSessia_Click Else mnuStudents_Click

End Sub

Процедура удаления записи с заданным номером из БД

Private Sub mnuDelRec_Click()

Dim n%, k%

rs.LockType = adLockOptimistic

Label1.Visible = False

Text1.Visible = False

st = InputBox("Введите имя таблицы, из которой хотите удалить запись")

Создаем объекты Connection и RecordSet для таблицы:

Call Connect("Institut", st, cn, rs)

Выводим на экран таблицу:

If st = "Сессия" Then mnuSessia_Click Else mnuStudents_Click

Вводим номер удаляемой записи:

n = InputBox("Введите номер удаляемой записи")

Определяем позицию удаляемой записи в наборе RecordSet

:

k = 0

Do While Not rs.EOF

k = k + 1

If n = rs.Fields(0) Then Exit Do

rs.MoveNext

Loop

rs.MoveFirst

Удаляем из таблицы запись с заданным номером:

rs.Move k - 1

rs.Delete

rs.Update

Прерываем связь объектов Connection и RecordSet с БД

и освобождаем занимаемую ими память:

rs.Close

Set rs = Nothing

cn.Close

Set cn = Nothing

Выводим на экран измененную таблицу:

If st = "Сессия" Then mnuSessia_Click Else mnuStudents_Click

Do

Loop Until MsgBox(" Таблица " & st, 64) = vbOK

Переходим к другой таблице:

If st = "Сессия" Then st = "Студенты" Else st = "Сессия"

Call Connect("Institut", st, cn, rs)

Выводим на экран другую таблицу:

If st = "Сессия" Then mnuSessia_Click Else mnuStudents_Click

Определяем позицию удаляемой записи:

k = 0

Do While Not rs.EOF

k = k + 1

If n = rs.Fields(0) Then Exit Do

rs.MoveNext

Loop

rs.MoveFirst

Удаляем из таблицы запись с заданным номером:

rs.Move k - 1

rs.Delete

rs.Update

Прерываем связь объектов Connection и RecordSet с БД

и освобождаем занимаемую ими память:

rs.Close

Set rs = Nothing

cn.Close

Set cn = Nothing

Выводим на экран измененную другую таблицу:

If st = "Сессия" Then mnuSessia_Click Else mnuStudents_Click

End Sub

Процедура выполнения запроса к БД:

Private Sub mnuZapros_Click()

Dim i%, j%, sq As String, fam$

Label1.Visible = False: Text1.Visible = False

Формируем строку SQL-оператора запроса

sq = "Select * From Студенты Where [ФИО] Like"

fam = InputBox("Введите первую букву фамилии", "Ввод заглавной

русской буквы")

sq = sq & "'" & fam & "%'"

Устанавливаем связь с БД

Call Connect("Institut", "Студенты", cn, rs)

Выполняем запрос

Set rs = cn.Execute(sq)

Выводим результат запроса в элемент MSFlexGrid

kolzap = 0

Do While Not rs.EOF

rs.MoveNext

kolzap = kolzap + 1

Loop

flg.FormatString = "^ № |^ № курса |^ № группы |^ № в группе |< ФИО " & _

"|^ Пол |^ Год рождения "

flg.Cols = rs.Fields.Count: flg.Rows = kolzap + 1

rs.MoveFirst

For i = 1 To kolzap

For j = 0 To 6

flg.TextMatrix(i, j) = rs.Fields(j)

Next j

rs.MoveNext

Next i

rs.Close

Set rs = Nothing

cn.Close

Set cn = Nothing

End Sub

Л и т е р а т у р а

  1. Сайлер Б., Споттс Д. Использование Visual Basic 6. Специальное издание. Пер. с англ. Издательский дом «Вильямс» М; СПб; К, 2005. 832с.

  2. Глушаков С.В., Сурядный А.С. Программирование на Visual Basic 6.0. Учебный курс; Харьков; ФОЛИО, 2002; 497с.

  3. Кузьменко В.Г. Visual Basic 6. Москва, БИНОМ, 2005, 400с.

  4. Браун С. Visual Basic 6. Учебный курс, Москва, С. П-б, ПИТЕР, 2006, 576с.

  5. А. Ананьев, А. Федоров. Самоучитель Visual Basic 6.0, С. П-б, 2002, 622с.

  6. Несмеянов И.А., Барковский В.В., Венчковский Л.Б., Лукина Т.А. Visual Basic 6.0 – интегрированная среда проектирования программных приложений. Учебное пособие. ГУУ; М., 2008, 246с.

7. Кудрявцев Б.М., Машурцев В.А. Алгоритмизация и программиро-

вание задач в среде Visual Basic 6.0 для Windows. ГУУ, М., 2005.

8. Древаль И.Д., Катрич Т.П., Машурцев В.А. Проектирование

приложений в интегрированной среде Visual Basic. Учебное посо-

бие. М., ГУУ, 2007, 197с.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]