Консультация № 65927
07.12.2006, 11:30
0.00 руб.
0 2 2
Приветствую, уважаемые эксперты. Мой вопрос такой: писал для школы программу по мониторингу посещаемости на базе Excel, все работает, но мне уже не нравиться. Пишу теперь программу на базе Access. И сразу же столкнулся с проблемой. На форме два комбобокса. Один берет значения из таблицы - это классы. Во втором должен быть список учеников и работать должно так, в первом комбобоксе выбираю класс, во втором отображается список учеников данного класса. Пробовал через запрос - пишет ошибку. Можно сделать программно, предполагаю что надо использовать ADO и метод Recordset. А как - не знаю. В Excel делал через массив с помощью Select Case, но это слишком жесткая привязка. Помогите пожалуйста. Заранее благодарен.

Обсуждение

Неизвестный
07.12.2006, 13:07
общий
это ответ
Здравствуйте, Bahus!
Попробуйте по имзменению значения списка классов(cbClasses) менять значение RowSource у списка учеников(cbPupils)

Приложение:
Private Sub cbClasses_Change()On Error Resume Next cbPupils.RowSource = "SELECT pupils.id, pupils.surname FROM pupils WHERE pupils.class=" & cbClasses.Value cbPupils.Value = 0End Sub
Неизвестный
07.12.2006, 22:13
общий
это ответ
Здравствуйте, Bahus!
Если Вы используете форму Access и в типе источника данных выбрано:"Таблица или запрос", то предыдущий ответ - самый лучший вариант, хотя есть и другие. Но он никак не подразумевает использование RecordSet. При использовании RecordSet в VB или VBA(Visual Basic for Application, тип источника данных у поля со списком "Список значений") можно использовать приведенный код хотя он выполняется с библиотекой DAO а не ADO.

Удачи
Евгений.

Приложение:
Public Function LoadCombo() ‘заполнение Combo1Dim dCtl As Object, sSQL As String, Dim db As DAO.Database, rs As DAO.RecordsetSet db = OpenDatabase(путь\файл.mdb)‘для VBA Set db = CurrentDb‘объект баэа данныхsSQL = "SELECT pupils.id, pupils.surname FROM pupils " & _"WHERE pupils.class=" & cbClasses.Value‘ Строка SQL источника строкSet dCtl = Form1.Combo1 ‘объект поле со спискомSet rs = db.OpenRecordset(sSQL) ‘открытие рекордсетаdCtl.Clear ‘очищение поля со списком‘для VBA dCtl.RowSource = "" rs.MoveLast ‘переход к последней записи rs.MoveFirst ‘переход к первой записи If rs.RecordCount = 0 Then Exit Function‘если кол-во записей равно нулю выход Do Until rs.EOF ‘цикл пока не будет признака конца записей dCtl.AddItem rs(1) & ""‘добавляем значение поля 1 рекордсета к списку поля со списком‘\& "" - для защиты от отсутствия значеия (NULL) rs.MoveNext ‘переходим к следующей записи Loop ‘к началу циклаrs.Close ‘закрываем рекордсетSet rs = Nothing ‘очищаем переменнуюEnd Function
Форма ответа