Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MS_VB_dop_vozm_5_04.doc
Скачиваний:
5
Добавлен:
19.11.2019
Размер:
1.64 Mб
Скачать
    1. Элемент управления ms Data Bound Grid

Для отображения и редактирования информации из присоединяемой на этапе выполнения базы данных удобно использовать элемент управления MS Data Bound Grid. DBGrid является двумерной таблицей, позволяющей эквивалентно отображать таблицы реляционных баз данных. Рассмотрим основные свойства DBGrid, необходимые для отображения и изменения данных:

  • Caption – задает заголовок таблицы, выводится над элементом управления DBGrid;

  • DataSourse – источник данных (имя элемента Data).

  • AllowAddNew – дает возможность пользователю вводить новые записи в таблицу (по умолчанию False – ввод запрещен);

  • AllowDelete – признак удаления записи (по умолчанию False – удаление запрещено);

  • AllowUpdate – признак модификации данных (по умолчанию True – разрешено редактирование);

  • AllowArrows – использование клавиш управления курсором для перемещения между ячейками таблицы (True – разрешено, False – запрещено).

Пример 7.4. Изменим программу, рассмотренную в примере 7.3 и добавим в нее возможность редактирования данных. Для этого заменим элемент MSFlexGrid на элемент управления DBGrid на форме проекта и зададим свойство DataSourse элемента DBGrid равное Data1. Значения свойств AllowAddNew, AllowDelete и AllowUpdate элемента DBGrid установим в True (рис. 7.9). Внешний вид интерфейса мало изменится и будет выглядеть так, как изображено на рис 7.10. Однако текст процедуры FillGridTable существенно сократится.

Рис. 7.9. Окно свойств элемента DBGrid

Рис. 7.10. Отображение базы данных в элементе DBGrid

Текст процедур обработки событий программы, приведен ниже:

Option Explicit

Private Sub Combo1_Click()

'выбор таблицы из списка и заполение сетки ее данными

FillGridTable Combo1.Text

End Sub

Private Sub ConnectBtn_Click()

'запуск диалога "Открыть файл" по кнопке подключить

Const vbOFNPATHMUSTEXIST = &H800&

Const vbOFNFILEMUSTEXIST = &H1000&

Combo1.Clear

CommonDialog1.DefaultExt = "MDB"

CommonDialog1.FileName = ""

CommonDialog1.Filter = "Базы данных MS _

Access(*.MDB)|*.MDB"

CommonDialog1.Flags = vbOFNPATHMUSTEXIST

CommonDialog1.Action = 1

If CommonDialog1.FileName = "" Then Exit Sub

OpenDataBase CommonDialog1.FileName

End Sub

Public Sub OpenDataBase(ByVal DataFile As String)

'Открытие базы данных и заполнение Combo1 списком таблиц

Dim I As Integer

Data1.Connect = "Access"

Data1.DatabaseName = DataFile 'имя БД

Data1.Refresh

Combo1.Clear

For I = 1 To Data1.Database.TableDefs.Count - 1

Combo1.AddItem Data1.Database.TableDefs(I).Name

Next

Combo1.Text = ""

End Sub

Private Sub FillGridTable(ByVal QueryString As String)

'заполнение DBGrid данными из таблицы

Data1.RecordSource = QueryString 'имя таблицы

Data1.Refresh

End Sub

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

Private Sub DBGrid1_BeforeColEdit(ByVal ColIndex As

Integer, ByVal KeyAscii As Integer, Cancel As

Integer)

If ColIndex = 0 Then Cancel = True

End Sub

Пример 7.5. Создадим проект для отображения и корректировки данных таблицы «Сессия» с помощью элемента DBGrid. Ввод данных в элемент DBGrid запретим. Для ввода данных создадим вторую форму с именем Form2.

Для добавления в проект еще одной формы нужно выбрать в основном меню Project \ Add Form, а далее страницу New и форму Dialog. Такой вид формы изначально содержит две командные кнопки OK и Отмена. Действия по определению главной формы смотрите в примере 3.1.

После создания формы Form2, поместим на нее элементы MaskEdBox и TextBox1 (рис 7.11). Свойство MaskEdBox.Mask зададим равным “##.##.####”.

Рис. 7.11. Окно формы Form2

Добавим на главную форму Form1 командную кнопку AddBtn для отображения формы Form2 (кнопка «Добавить», рис 7.12)

Рис. 7.12. Общий вид интерфейса формы Form1.

Текст процедур обработки событий формы Form1:

Public f_pr As Boolean ‘признак нажатия кнопок в Form2

Public f_dat As String, f_sub As String, f_ball As

String

Option Explicit

Private Sub Form_Load()

OpenDataBase "all" 'имя базы

Data1.RecordSource = "Сессия" 'имя таблицы

Data1.Refresh

End Sub

Private Sub AddBtn_Click()

f_pr = False 'сообщаем form1 о том, что в диалоге form2 нажата

кнопка «Отмена»

Form2.Show 1 'активизируем форму в диалоговом режиме

If f_pr Then ' если в диалоге form2 нажата кнопка OK

Data1.Recordset.AddNew

присвоение значений полям БД

Data1.Recordset.Fields("date").Value = CDate(f_dat)

Data1.Recordset.Fields("subject").Value = f_sub

Data1.Recordset.Fields("ball").Value = f_ball

Data1.Recordset.Update

Data1.Recordset.MoveLast

End If

End Sub

Public Sub OpenDataBase(ByVal DataFile As String)

'открытие базы данных

Dim I As Integer

Data1.Connect = "Access"

Data1.DatabaseName = DataFile 'имя БД

End Sub

Private Sub DBGrid1_BeforeColEdit(ByVal ColIndex As

Integer, ByVal KeyAscii As Integer, Cancel As Integer)

If ColIndex = 0 Then Cancel = True ' запрет на

редактирование поля, так как оно типа счетчик

End Sub

Текст процедур обработки событий формы Form2:

Private Sub BtnCancel_Click()

'Нажатие на кнопку Отмена

Form2.Hide ‘закрытие формы

End Sub

Private Sub BtnOk_Click()

'Нажатие на кнопку ОK

If Not IsDate(MaskEdBox1.Text) Then

MsgBox "Ошибочная дата"

MaskEdBox1.SetFocus

Exit Sub

End If

'сообщаем form1 о том, что диалог form2 завершен корректно и нажата

кнопка «ОК»

Form1.f_pr = True

Form1.f_dat = MaskEdBox1.Text

Form1.f_sub = Text1.Text

Form1.f_ball = Text2.Text

Form2.Hide

End Sub

П ример 7.6. Сформировать проект на основе таблицы «Успеваемость» базы данных «Деканат», содержащей три поля: «ФИО», «Предмет», «Балл», которые отображаются в текстовых полях Text1, Text2, Text3 соответственно. По нажатию кнопки «Сформировать список» должен формироваться список из полей «ФИО» и «Балл» при условии совпадения значения поля «Предмет» и содержимого текстового поля Text4. Переменные St (для заполнения списка) и ФИО (для ввода в список фамилии) задать фиксированной длины. Свойство Font элемента List1 установить равным Courier New. На рис. 7.13 представлен результат выполнения программы. Ниже приведен программный код.

Рис. 7.13. Общий вид интерфейса

Текст программы.

Dim Sum As Single, SumSr As Single

Dim Poisk As Variant

Dim Fio As String * 13, Note As String * 1

Dim St As String * 15

Private Sub Command1_Click() по кнопке «Сформировать список»

Data1.Recordset.MoveFirst ‘переход на первую запись

Poisk = Text4.Text

Criteriy = "Предмет=" & "'" & Poisk & "'"

Data1.Recordset.FindFirst Criteriy

If Data1.Recordset.NoMatch Then

Text4.Text = "Такого предмета нет!"

Exit Sub

End If

List1.Clear

Sum = 0

Do While Not Data1.Recordset.EOF

If Text2.Text = Text4.Text Then

Fio = Text1.Text

Note = Text3.Text

St = Fio & " "

Mid(St, 15, 1) = Note ‘оценка вводится в переменную St

с позиции 15

List1.AddItem St

Sum = Sum + Val(Text3.Text)

End If

Data1.Recordset.MoveNext

Loop

SumSr = Sum / List1.ListCount ‘средний балл по предмету

Text5.Text = Str(Round(SumSr, 2))

End Sub

Private Sub Command2_Click()

End

End Sub

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