Каскадный 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
Другие вопросы по тегам