- •1. Специальные конструкции языка 6
- •Введение
- •Специальные конструкции языка
- •Пользовательские типы данных
- •Типизированные файлы
- •Текстовые файлы
- •Нетипизированные файлы
- •Обработка ошибок
- •Оператор On Error
- •Объект Err
- •Обработка событий мыши и клавиатуры
- •Обработка событий мыши
- •Обработка событий клавиатуры
- •1.5. Элемент управления MaskedEdit
- •Графика
- •Элементы управления для графических изображений
- •Генерация графических изображений (примитивов)
- •Графические методы
- •Координаты элементов управления.
- •Примеры использования графических методов
- •Задания для самостоятельной работы
- •Работа с таймером
- •Анимация графических изображений
- •Основные свойства и методы
- •Примеры создания эффектов анимации
- •Варианты заданий по анимации для самостоятельной работы
- •Стандартные диалоговые окна
- •Работа с базами данных в vb
- •Элемент управления Data
- •Объект Recordset
- •Элемент управления msFlexGrid
- •Элемент управления ms Data Bound Grid
- •Использование языка sql в vb для работы с базами данных
- •Литература
Элемент управления 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