Каскадный Combobox
Скопируйте из: https://softwareengineering.stackexchange.com/questions/158330/cascading-comboboxes
Итак, у меня есть форма в Access 2010 с 1 текстовым полем и 3 комбинированными списками (1 включено и 2 отключено).
первый ComboBox не привязан к источнику данных, но субъективен к другим 2 комбинированным спискам. Поэтому я обработал событие Click для первого Combobox, чтобы затем включить остальные 2, и предварительно загрузил 2nd ComboBox с помощью пользовательского сценария RowSource SQL, динамически созданного на основе 1-го значения ComboBox.
Все это прекрасно работает для новой информации, но когда я иду, чтобы просмотреть информацию, через форму, ее обратно в новый режим на элементах управления.
Вопрос: Какое событие мне нужно обработать, чтобы проверить, содержат ли текущие данные формы данные для источника управления элементов управления?
Как я выразил бы это в логике (это смесь C & VB, я знаю, но должен получить pt):
DataSet ds = Form.RowSet
if (ds = Null) then
cbo2.enabled = false
cbo3.enabled = false
else
cbo2.rowsource = "select id, nm from table"
cbo2.value = ds(3)
cbo3.value = ds(4)
end if
... do some other logic ...
Обновленная логика - проблема по-прежнему, по какой-то причине не могу перехватить RecordStatus (выдает ошибку 3251 времени выполнения)
Private Sub Form_Current()
Dim boolnm As Boolean: boolnm = (IsNull(txtName.Value) Or IsEmpty(txtName.Value))
Dim booltype As Boolean: booltype = IsNull(cboType.Value)
Dim boolfamily As Boolean: boolfamily = IsNull(cboType.Value)
Dim boolsize As Boolean: boolsize = IsNull(cboType.Value)
Dim rs As DAO.Recordset: Set rs = Me.Recordset
MsgBox rs.AbsolutePosition
' If rs.RecordStatus = dbRecordNew Then
' MsgBox "New Record being inserted, but not committed yet!", vbOKOnly
' Else
' MsgBox rs(0).Name & " - " & rs(0).Value & vbCrLf & _
' rs(1).Name & " - " & rs(1).Value & vbCrLf & _
' rs(2).Name & " - " & rs(2).Value & vbCrLf & _
' rs(3).Name & " - " & rs(3).Value
' End If
'MsgBox "Name: " & CStr(boolnm) & vbCrLf & _
"Type: " & CStr(booltype) & vbCrLf & _
"Family: " & CStr(boolfamily) & vbCrLf & _
"Size: " & CStr(boolsize), vbOKOnly
End Sub
1 ответ
Вот конечный результат, с помощью Рему, и это только предвестник конечного результата (который находится вне контекста вопроса).
Private Sub Form_Current()
If Me.NewRecord Then <=======================
cboType.Value = 0
cboType.Enabled = True
cboFamily.Enabled = False
cboSize.Enabled = False
Else
Dim rs As DAO.Recordset: Set rs = Me.Recordset
'get Family ID
Dim fid As String: fid = rs(2).Value
'Build SQL Query to obtain Type ID
Dim sql As String
sql = "select tid from tblFamily where id = " & fid
'Create Recordset
Dim frs As DAO.Recordset
'Load SQL Script and Execute to obtain Type ID
Set frs = CurrentDb.OpenRecordset(sql, dbOpenDynaset, dbReadOnly)
'Set Type ComboBox Value to Type ID
cboType.Value = frs(0)
cboType_Click 'Simulate Click Event since the Value has changed
'Make sure all 3 Comboboxes are enabled and useable
cboType.Enabled = True
End If
End Sub