Программирование в MS ACCESS, страница 6

Private Sub Form_Load()

Form.RecordSelectors = False

Form.NavigationButtons = False

Form.DividingLines = False

End Sub

Затем введем процедуру обработки изменения значения поля со списком:

Private Sub Combo4_Change()

Dim rs As Recordset      ‘описали объект

Dim sql As String, str As String, sum As Single‘описали переменные

Combo4.SetFocus     ‘установили фокус на поле со списком

str = Combo4.Text   ‘взяли выбранную фамилию

sql = "select январь, февраль, март from table1 where фио=" & "'" & str + "'"     ‘ составили SQL-запрос

Set rs = CurrentDb.OpenRecordset(sql)‘выполнили запрос к теущей БД

Text6.SetFocus

sum = rs.Fields(0).Value + rs.Fields(1).Value + rs.Fields(2).Value

Text6.Text = sum

rs.MoveNext

While Not rs.EOF

Text6.Text = sum + rs.Fields(0).Value + rs.Fields(1).Value + rs.Fields(2).Value

rs.MoveNext

Wend

End Sub

Внешний вид формы приведен на рис. 1

Рис. 1

Рассмотрим более сложный пример. Создадим форму, содержащую поле со списком, группу из трех переключателей, текстового поля и кнопки (рис. 2):

Рис.2

Необходимо, чтобы после выбора фамилии из списка, установки переключателя и нажатия кнопки в текстовом поле отобразилось значение из соответствующего поля соответствующей записи. Текст программы, реагирующей на нажатие кнопки, такой:

Private Sub Кнопка14_Click()

Dim rs As Recordset

Dim sql1 As String, sql2 As String, sql3 As String

ПолеСоСписком1.SetFocus

str = ПолеСоСписком1.Text

sql1 = "select " & Надпись7.Caption & " from Лист1 where фио=" & "'" & str + "'"

sql2 = "select " & Надпись9.Caption & " from Лист1 where фио=" & "'" & str + "'"

sql3 = "select " & Надпись11.Caption & " from Лист1 where фио=" & "'" & str + "'"

Select Case (Группа3.Value)

Case 1: Set rs = CurrentDb.OpenRecordset(sql1)

Поле12.SetFocus

Поле12.Text = rs.Fields(0).Value

Case 2: Set rs = CurrentDb.OpenRecordset(sql2)

Поле12.SetFocus

Поле12.Text = rs.Fields(0).Value

Case 3: Set rs = CurrentDb.OpenRecordset(sql3)

Поле12.SetFocus

Поле12.Text = rs.Fields(0).Value

End Select

End Sub

4. Дополнительные элементы управления (на примере MSFlexGrid).

Очевидно, что результаты SQL-запроса удобнее представлять в табличном виде. К сожалению, в наборе стандартных элементов управления отсутствуют компоненты, представляющие данные в табличном виде. Однако корпорация Microsoft в комплекте со средой программирования Visual Studio 6.0 поставляет большое количество дополнительных элементов управления. Воспользуемся одним из них, под названием MSFlexGrid. Для его установки в системе необходимы два файла - собственно компонент ActiveX msflxgrd.ocx и файл сведений msflxgrd.dep. Файлы необходимо скопировать в папку Windows\System, а затем через «Пуск» - «Выполнить» необходимо выполнить команду regsvr32 msflxgrd.ocx, что позволит занести сведения об элементе управления в системный реестр. Теперь дополнительный элемент управления модет быть добавлен на форму в режиме конструктора с помощью кнопки «Дополнительно» в панели инструментов «Панель элементов». Выбрав из списка Microsoft FlexGrid Control, version 6.0, нарисуем его на форме.

Следует заметить, что у дополнительных элементов управления большинство свойств и методов не отображаются редактором VBA. Для того, чтобы полноценно использовать такие компоненты, необходимо найти их описание, например, в Microsoft Development Network Library, входящей в комплект Visual Studio 6.0.

Поскольку ни из конструктора, ни из редактора VBA свойства и методы дополнительного компонента недоступны, зададим их в программе вывода результатов запроса вручную:

Private Sub Form_Open(Cancel As Integer)

Dim rs As Recordset

Dim i As Integer, j As Integer, ln As Integer

Form.RecordSelectors = False

Form.NavigationButtons = False

Form.DividingLines = False

ПолеСоСписком1.SetFocus

Set rs = CurrentDb.OpenRecordset("select * from Table1")

Grid.Cols = rs.Fields.Count

Grid.Row = 0

For i = 0 To Grid.Cols - 1

Grid.Col = i

Grid.Text = rs.Fields(i).name

Next

rs.MoveLast