Leo Elsenberg

Programmierung, Datenbanken, IT-Dienstleistungen und IT-Schulungen

Nachfolgend finden Sie den vollständigen, dokumentierten Quellcode des VBA Klassenmoduls frmDB2DMCMK:

Option Compare Database
Option Explicit
Private Const mconKeys              As String = modPublDecl.gconSpace & "Key(s)"
Private Const mconV                 As String * 1 = "V"
Private Const mconKeyDel            As String = "or dem Laden zu löschende(r)" & mconKeys
Private Const mconKeyAvail          As String = mconV & "orhandene(r)" & mconKeys
Private Const mconCboField          As String = "Kombinationsfeld" & modPublDecl.gconSpace
Private Const mconUpdate            As String = modPublDecl.gconSpace & "aktualisieren"
Private mlngDCID                    As Long
Private mstrTabelle                 As String
Private mlngDelDCID                 As Long
Private mstrDelDCID                 As String
Private mstrDelTabelle              As String
Private mstrDelKey                  As String
Private mboolOpenOK                 As Boolean
Public mboolDeleteAllKeys           As Boolean
'-------------------------------------------------------------------------------------'
' Prozedur:     Form_Open
'
' Beschreibung: Öffnet das Formular. Falls das Formular modPublDecl.gconFrmCM nicht
'               geöffnet ist, wird eine Fehlermeldung angezeigt der Öffnen Vorgang
'               abgebrochen.
'
' Parameter:    Cancel
'-------------------------------------------------------------------------------------'
Private Sub Form_Open(Cancel As Integer)
On Error GoTo Form_Open_Err
    If modPublic.IsFormOpen(modPublDecl.gconFrmCM) = False Then
        mboolOpenOK = False
        Cancel = True
        Resume Form_Open_Err
    Else
        mboolOpenOK = True
    End If
Form_Open_Exit:
    Exit Sub
Form_Open_Err:
    If Err.Number <> 0 Then
        Call modPublic.FormReportNotOpen(True, _
                                         True, _
                                         modPublDecl.gconFrmCM, _
                                         Me.Name)
    End If
    Resume Form_Open_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     Form_Load
'
' Beschreibung: Lädt das Formular, aktualisiert alle Steuerelemente und setzt den
'               Formulartitel.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub Form_Load()
On Error GoTo Form_Load_Err
    Dim boolKeysSaved               As Boolean
    Dim lngMaxDelDCID               As Long
    If mboolOpenOK = True Then
        With Forms(modPublDecl.gconFrmCM)
            mlngDCID = .txtDCID
            mlngDelDCID = .txtDCID
        End With
        With Me
            If KeysSaved(mlngDCID, _
                         lngMaxDelDCID) = True Then
                Call modPublic.SetStatusBarText(19, _
                                                False, _
                                                0)
                If lngMaxDelDCID > 0 Then
                    .cboDCID.Value = lngMaxDelDCID
                End If
                mstrTabelle = "*"
                Call cboTabelleRefresh(True)
                Call lstKeyRefresh("*", _
                                   "*")
                Call UpdDelKeyControls(mlngDelDCID)
                With .cboDelDCID
                    If .Enabled = True Then
                        .SetFocus
                    End If
                End With
            Else
                .lstKey.RowSource = vbNullString
                Call KeyRefresh
                .lstKeyDel.RowSource = vbNullString
                Call DelKeyRefresh
                With .cboDCID
                    .SetFocus
                    .Value = .ItemData(0)
                    .Dropdown
                End With
            End If
             .Caption = modPublDecl.gconAppTitle & mconV & mconKeyDel & _
                        modPublDecl.gconSpace & "[DCID" & modPublDecl.gconSpace & _
                        Format(mlngDCID, modPublDecl.gconlngDCIDFmt) & "]"
        End With
    End If
Form_Load_Exit:
    SysCmd acSysCmdRemoveMeter
    Exit Sub
Form_Load_Err:
    Call modPublic.ShowMsgBox("Fehler beim Laden des Formulars!", _
                              modPublDecl.gconOkExcStyle, _
                              "Formular" & modPublDecl.gconSpace & Me.Name & _
                              modPublDecl.gconSpace & "laden", _
                              True)
    Resume Form_Load_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cboDCID_AfterUpdate
'
' Beschreibung: In Abhängigkeit vom Inhalt des Steuerelements cboDCID wird das
'               Steuerelement lstKey aktualisiert.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub cboDCID_AfterUpdate()
On Error GoTo cboDCID_AfterUpdate_Err
    Call modPublic.SetStatusBarText(19, _
                                    False, _
                                    0)
    If Me.cboDCID.Value <> mlngDCID Then
        Call cboDCIDRefresh(True)
    Else
        Call cboDCIDRefresh(False)
    End If
    Call lstKeyRefresh("*", _
                       "*")
cboDCID_AfterUpdate_Exit:
    SysCmd acSysCmdRemoveMeter
    Exit Sub
cboDCID_AfterUpdate_Err:
    Call modPublic.ShowMsgBox(Err.Description, _
                              modPublDecl.gconOkExcStyle, _
                              mconCboField & "DCID" & mconUpdate, _
                              True)
    Resume cboDCID_AfterUpdate_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cboDCIDRefresh
'
' Beschreibung: Legt die Datenherkunft des Steuerelements cboDCID fest.
'
' Parameter:    boolInit
'-------------------------------------------------------------------------------------'
Private Sub cboDCIDRefresh(ByVal boolInit As Boolean)
    Dim strSQL                      As String
    With Me.cboDCID
        If Not IsNull(.Value) Then
            strSQL = modSQL.QSelDistDCTablesKey("tblDB2DMCMDCTablesKey", _
                                                .Value, _
                                                "*", _
                                                "*", _
                                                "DCID")
            Call cboTabelleRefresh(boolInit)
        ElseIf IsNull(.Value) Then
            Call lstKeyRequery(vbNullString)
        End If
    End With
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cboTabelle_AfterUpdate
'
' Beschreibung: Aktualisert die Steuerelemente lstKey und lstKeyDel.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub cboTabelle_AfterUpdate()
On Error GoTo cboTabelle_AfterUpdate_Err
    Call modPublic.SetStatusBarText(19, _
                                    False, _
                                    0)
    mstrTabelle = IIf(Me.cboTabelle.Value = modPublDecl.gconSelectAll, _
                      "*", _
                      Me.cboTabelle.Value)
    Call cboTabelleRefresh(False)
    Call lstKeyRefresh(mstrTabelle, _
                       "*")
cboTabelle_AfterUpdate_Exit:
    SysCmd acSysCmdRemoveMeter
    Exit Sub
cboTabelle_AfterUpdate_Err:
    Call modPublic.ShowMsgBox(Err.Description, _
                              modPublDecl.gconOkExcStyle, _
                              mconCboField & "Tabelle" & mconUpdate, _
                              True)
    Resume cboTabelle_AfterUpdate_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cboTabelleRefresh
'
' Beschreibung: Legt die Datenherkunft des Steuerelements cboTabelle fest.
'
' Parameter:    boolInit
'-------------------------------------------------------------------------------------'
Private Sub cboTabelleRefresh(ByVal boolInit As Boolean)
    Dim strSQL                      As String
    With Me
        strSQL = modSQL.QSelDistDCKeyTables("tblDB2DMCMDCTablesKey", _
                                            CLng(.cboDCID.Value), _
                                            vbNullString)
        With .cboTabelle
            .RowSource = strSQL
            If boolInit = True Then
                .Value = .ItemData(0)
            End If
        End With
    End With
    Call lstKeyRequery(strSQL)
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     lstKeyRefresh
'
' Beschreibung: Aktualisert das Steuerelement lstKey.
'
' Parameter:    strTabelle
'               strKey
'-------------------------------------------------------------------------------------'
Private Sub lstKeyRefresh(ByVal strTabelle As String, _
                          ByVal strKey As String)
    Dim strSQL                      As String
    strSQL = modSQL.QSelDistDCTablesKey("tblDB2DMCMDCTablesKey", _
                                        CLng(Me.cboDCID.Value), _
                                        strTabelle, _
                                        strKey, _
                                        "DB2KeyVal")
    Call lstKeyRequery(strSQL)
    Call KeyRefresh
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cboDelDCID_AfterUpdate
'
' Beschreibung: Ruft die Funktionen cboDelTabelleRefresh und cboDelKeyRefresh auf.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub cboDelDCID_AfterUpdate()
On Error GoTo cboDelDCID_AfterUpdate_Err
    Dim lngInd                      As Long
    With Me.cboDelDCID
        If .Value <> mstrDelDCID And .ListCount > 2 Then
            Call modPublic.HourGlassState(True)
            Call modPublic.SetStatusBarText(19, _
                                            False, _
                                            0)
            lngInd = .ListIndex
            Call cboDelTabelleRefresh(True)
            Call cboDelKeyRefresh(True)
            Call lstKeyDelRefresh
            .Value = .ItemData(lngInd)
            .SetFocus
            Call modPublic.HourGlassState(False)
        End If
    mstrDelDCID = .Value
    End With
cboDelDCID_AfterUpdate_Exit:
    SysCmd acSysCmdRemoveMeter
    Exit Sub
cboDelDCID_AfterUpdate_Err:
    Call modPublic.ShowMsgBox(Err.Description, _
                              modPublDecl.gconOkExcStyle, _
                              mconCboField & "DCID" & mconUpdate, _
                              True)
    Resume cboDelDCID_AfterUpdate_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cboDelTabelleRefresh
'
' Beschreibung: Legt die Datenherkunft des Steuerelements cboDelDCID fest.
'
' Parameter:    boolInit
'               strDelDCID
'-------------------------------------------------------------------------------------'
Private Sub cboDelDCIDRefresh(ByVal boolInit As Boolean, _
                              ByVal strDelDCID As String)
    Dim strSQL                      As String
    strSQL = modSQL.QSelDistDelDCID(strDelDCID)
    With Me
        .cboDelKey.Value = .cboDelKey.ItemData(0)
        With .cboDelDCID
            .RowSource = strSQL
            If .ListCount > 0 Then
                Me.cboDelTabelle.Enabled = True
                .Enabled = True
                .SetFocus
                If boolInit = True Then
                    .Value = .ItemData(0)
                End If
            Else
                Me.cboDelTabelle.Enabled = False
            End If
        End With
    End With
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cboDelTabelle_AfterUpdate
'
' Beschreibung: Ruft die Funktionen cboDelTabelleRefresh und cboDelKeyRefresh auf.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub cboDelTabelle_AfterUpdate()
On Error GoTo cboDelTabelle_AfterUpdate_Err
    Dim lngInd                      As Long
    With Me.cboDelTabelle
        If .Value <> mstrDelTabelle And .ListCount > 2 Then
            Call modPublic.HourGlassState(True)
            Call modPublic.SetStatusBarText(19, _
                                            False, _
                                            0)
            lngInd = .ListIndex
            Call cboDelTabelleRefresh(True)
            Call cboDelKeyRefresh(True)
            .Value = .ItemData(lngInd)
            Call lstKeyDelRefresh
            .SetFocus
            Call modPublic.HourGlassState(False)
        End If
        mstrDelTabelle = Me.cboDelTabelle.Value
    End With
cboDelTabelle_AfterUpdate_Exit:
    SysCmd acSysCmdRemoveMeter
    Exit Sub
cboDelTabelle_AfterUpdate_Err:
    Call modPublic.ShowMsgBox(Err.Description, _
                              modPublDecl.gconOkExcStyle, _
                              mconCboField & "Tabelle" & mconUpdate, _
                              True)
    Resume cboDelTabelle_AfterUpdate_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cboDelTabelleRefresh
'
' Beschreibung: Legt die Datenherkunft des Steuerelements cboDelTabelle fest.
'
' Parameter:    boolInit
'-------------------------------------------------------------------------------------'
Private Sub cboDelTabelleRefresh(ByVal boolInit As Boolean)
    Dim strSQL                      As String
    Dim strDelDCID                  As String
    Dim strDelTabelle               As String
    With Me
        If boolInit = True Then
            strDelDCID = "*"
            strDelTabelle = "*"
        Else
            With .cboDelDCID
                strDelDCID = IIf(.Value = modPublDecl.gconSelectAll, _
                                 "*", _
                                 .Value)
            End With
            With .cboDelTabelle
                strDelTabelle = IIf(.Value = modPublDecl.gconSelectAll, _
                                    "*", _
                                    .Value)
            End With
        End If
        strSQL = modSQL.QSelDistDCKeyTables("tblDB2DMCMDCTablesKeyDelete", _
                                            mlngDCID, _
                                            strDelDCID)
        With .cboDelTabelle
            .RowSource = strSQL
            If .ListCount > 0 Then
                Me.cboDelKey.Enabled = True
                .SetFocus
                If boolInit = True Then
                    .Value = .ItemData(0)
                End If
            Else
                Me.cboDelTabelle.Enabled = False
            End If
        End With
    End With
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cboDelKey_AfterUpdate
'
' Beschreibung: Ruft die Funktion cboDelKeyRefresh auf.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub cboDelKey_AfterUpdate()
On Error GoTo cboDelKey_AfterUpdate_Err
    Dim lngInd                      As Long
    With Me.cboDelKey
        If .Value <> mstrDelKey And .ListCount > 2 Then
            Call modPublic.HourGlassState(True)
            Call modPublic.SetStatusBarText(19, _
                                            False, _
                                            0)
            lngInd = .ListIndex
            Call cboDelKeyRefresh(True)
            .Value = .ItemData(lngInd)
            Call lstKeyDelRefresh
            .SetFocus
            Call modPublic.HourGlassState(False)
        End If
        mstrDelKey = .Value
    End With
cboDelKey_AfterUpdate_Exit:
    SysCmd acSysCmdRemoveMeter
    Exit Sub
cboDelKey_AfterUpdate_Err:
    Call modPublic.ShowMsgBox(Err.Description, _
                              modPublDecl.gconOkExcStyle, _
                              mconCboField & "Key" & mconUpdate, _
                              True)
    Resume cboDelKey_AfterUpdate_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cboDelKeyRefresh
'
' Beschreibung: Legt die Datenherkunft des Steuerelements cboDelKey fest.
'
' Parameter:    boolInit
'-------------------------------------------------------------------------------------'
Private Sub cboDelKeyRefresh(ByVal boolInit As Boolean)
    Dim strSQL                      As String
    Dim strDelDCID                  As String
    Dim strDelTabelle               As String
    With Me
        With .cboDelDCID
            strDelDCID = IIf(.Value = modPublDecl.gconSelectAll = True, _
                             "*", _
                             .Value)
        End With
        With .cboDelTabelle
            strDelTabelle = IIf(.Value = modPublDecl.gconSelectAll = True, _
                                "*", _
                                .Value)
        End With
        strSQL = modSQL.QSelDistDelKeyDB2KeyVal(mlngDCID, _
                                                strDelDCID, _
                                                strDelTabelle)
        With .cboDelKey
            .RowSource = strSQL
            Select Case .ListCount > 0
                Case True
                    .Enabled = True
                    .SetFocus
                    If boolInit = True Then
                        .Value = .ItemData(0)
                    End If
                Case False
                    .Enabled = False
            End Select
        End With
    End With
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     lstKey_DblClick
'
' Beschreibung: Löscht bei dem mit Doppelklick ausgewählten Key den Datensatz aus der
'               Tabelle tblDB2DMCMDCTablesKeyDelete.
'
' Parameter:    Cancel
'-------------------------------------------------------------------------------------'
Private Sub lstKey_DblClick(Cancel As Integer)
On Error GoTo lstKey_DblClick_Err
    Dim dbDAOKey                    As DAO.Database
    Dim rstDAOKey                   As DAO.Recordset
    Dim dbDAODelKey                 As DAO.Database
    Dim rstDAODelKey                As DAO.Recordset
    Dim strSQL                      As String
    Dim strTabelle                  As String
    With Me
        With .cboTabelle
            strTabelle = IIf(.Value = modPublDecl.gconSelectAll, _
                             "*", _
                             .Value)
        End With
        strSQL = modSQL.QSelCorrDCTables(.cboDCID, _
                                         strTabelle, _
                                         .lstKey.Column(1))
        Set dbDAOKey = CurrentDb()
        Set rstDAOKey = dbDAOKey.OpenRecordset(strSQL, _
                                               dbOpenSnapshot)
        strSQL = modSQL.QSelDelTable("tblDB2DMCMDCTablesKeyDelete", _
                                     False)
        Set dbDAODelKey = CurrentDb()
        Set rstDAODelKey = dbDAODelKey.OpenRecordset(strSQL, _
                                                     dbOpenDynaset)
        With rstDAOKey
            Do Until .EOF
                Call UpdDelDCID(rstDAODelKey, _
                                Forms(modPublDecl.gconFrmCM).txtDCID, _
                                Me.lstKey.Column(0), _
                                !Tabelle, _
                                !DB2KeyVal)
                .MoveNext
            Loop
            .Close
            rstDAODelKey.Close
        End With
        Call UpdDelKeyControls(mlngDCID)
        .lstKey.SetFocus
    End With
lstKey_DblClick_Exit:
    SysCmd acSysCmdRemoveMeter
    Set dbDAOKey = Nothing
    Set rstDAOKey = Nothing
    Set dbDAODelKey = Nothing
    Set rstDAODelKey = Nothing
    Exit Sub
lstKey_DblClick_Err:
    Select Case Err.Number
        Case 94     ' Keine Tabelle ausgewählt
            Call modPublic.ShowMsgBox("Bitte wählen Sie zuerst eine Tabelle aus.", _
                                      modPublDecl.gconOkInfStyle, _
                                      "Keine Tabelle ausgewählt", _
                                      True)
        Case Else
            Call modPublic.ShowMsgBox("Bitte wählen Sie ggf. eine Kombination " & _
                                      "aus DCID und Tabelle.", _
                                      modPublDecl.gconOkExcStyle, _
                                      "Key '" & Trim(Me.lstKey.Column(1)) & "' hinzufügen", _
                                      True)
    End Select
    Resume lstKey_DblClick_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cmdAddSelected_Click
'
' Beschreibung: Fügt die Keys der ausgewählten Keys (Mehrfachauswahl) der Tabelle
'               tblDB2DMCMDCTablesKeyDelete hinzu.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub cmdAddSelected_Click()
On Error GoTo cmdAddSelected_Click_Err
    Const conAddSelKeys             As String = "Ausgewählte Keys hinzufügen"
    Dim dbDAOKey                    As DAO.Database
    Dim rstDAOKey                   As DAO.Recordset
    Dim dbDAODelKey                 As DAO.Database
    Dim rstDAODelKey                As DAO.Recordset
    Dim strSQL                      As String
    Dim avntElement                 As Variant
    Dim strTabelle                  As String
    Dim lngNumKeys                  As Long
    Dim lngErrCnt                   As Long
    With Me
        If .lstKey.ItemsSelected.Count > 0 Then
            With .cboTabelle
                strTabelle = IIf(.Value = modPublDecl.gconSelectAll, _
                                 "*", _
                                 .Value)
            End With
            lngNumKeys = .lstKey.ItemsSelected.Count
            If modPublic.ShowMsgBox(lngNumKeys & " ausgewählte Keys zur Liste " & _
                                    "der zu löschenden Keys hinzufügen?" & _
                                    vbCrLf & vbCrLf & _
                                    "Der Vorgang nimmt u.U. einige Zeit in Anspruch!", _
                                    modPublDecl.gconYNDef2QuestStyle, _
                                    conAddSelKeys, _
                                    False) = vbYes Then
                Call modPublic.SetStatusBarText(11, _
                                                False, _
                                                0)
                For Each avntElement In .lstKey.ItemsSelected
                    lngNumKeys = lngNumKeys + 1
                    strSQL = modSQL.QSelCorrDCTables(.cboDCID, _
                                                     strTabelle, _
                                                     .lstKey.ItemData(avntElement))
                    Set dbDAOKey = CurrentDb()
                    Set rstDAOKey = dbDAOKey.OpenRecordset(strSQL, _
                                                           dbOpenSnapshot)
                    strSQL = modSQL.QSelDelTable("tblDB2DMCMDCTablesKeyDelete", _
                                                 False)
                    Set dbDAODelKey = CurrentDb()
                    Set rstDAODelKey = dbDAODelKey.OpenRecordset(strSQL, _
                                                                 dbOpenDynaset)
                    With rstDAOKey
                        If Not .EOF Then
                            Call UpdDelDCID(rstDAODelKey, _
                                            Forms(modPublDecl.gconFrmCM).txtDCID, _
                                            Me.lstKey.Column(0, 1), _
                                            rstDAOKey!Tabelle, _
                                            Me.lstKey.ItemData(avntElement))
                        End If
                        rstDAODelKey.Close
                        .Close
                    End With
                Next avntElement
                If lngNumKeys <> lngErrCnt Then
                    Call UpdDelKeyControls(mlngDCID)
                End If
            End If
        Else
            Call modPublic.ShowMsgBox("Es wurden keine hinzuzufügenden Keys ausgewählt!", _
                                      modPublDecl.gconOkExcStyle, _
                                      conAddSelKeys, _
                                      True)
        End If
    End With
cmdAddSelected_Click_Exit:
    SysCmd acSysCmdRemoveMeter
    Set dbDAOKey = Nothing
    Set rstDAOKey = Nothing
    Set dbDAODelKey = Nothing
    Set rstDAODelKey = Nothing
    If lngErrCnt > 0 Then
        Call AddKeyError(lngErrCnt)
    End If
    Exit Sub
cmdAddSelected_Click_Err:
    Select Case Err.Number
        Case modPublDecl.gconDuplicateKey   ' Indexfehler
            lngErrCnt = lngErrCnt + 1
            Resume Next
        Case Else
            Call modPublic.ShowMsgBox(Err.Description, _
                                      modPublDecl.gconOkExcStyle, _
                                      conAddSelKeys, _
                                      True)
    End Select
    Resume cmdAddSelected_Click_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cmdAddAllKeys_Click
'
' Beschreibung: Fügt alle Keys an die Tabelle tblDB2DMCMDCTablesKeyDelete an.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub cmdAddAllKeys_Click()
On Error GoTo cmdAddAllKeys_Click_Err
    Const conAddAllKeys             As String = "Alle Keys übernehmen"
    Dim dbDAOKey                    As DAO.Database
    Dim rstDAOKey                   As DAO.Recordset
    Dim dbDAODelKey                 As DAO.Database
    Dim rstDAODelKey                As DAO.Recordset
    Dim strSQL                      As String
    Dim strTabelle                  As String
    Dim strKey                      As String
    Dim lngNumKeys                  As Long
    Dim lngErrCnt                   As Long
    Dim strSubMsg                   As String
    With Me
        Select Case .cboTabelle.Value
            Case modPublDecl.gconSelectAll, vbNullString
                strTabelle = "*"
                strSubMsg = "Alle Keys"
            Case Else
                strTabelle = .cboTabelle
                strSubMsg = "Alle Keys der Tabelle " & strTabelle
        End Select
        If modPublic.ShowMsgBox(strSubMsg & " (Data Collection " & _
                                Format(.cboDCID, modPublDecl.gconlngDCIDFmt) & _
                                ") übernehmen?", _
                                modPublDecl.gconYNQuestStyle, _
                                conAddAllKeys, _
                                False) = vbYes Then
            Call modPublic.SetStatusBarText(10, _
                                            False, _
                                            0)
            strSQL = modSQL.QSelCorrDCTables(.cboDCID, _
                                             strTabelle, _
                                             "*")
            Set dbDAOKey = CurrentDb()
            Set rstDAOKey = dbDAOKey.OpenRecordset(strSQL, _
                                                   dbOpenSnapshot)
            strSQL = modSQL.QSelDelTable("tblDB2DMCMDCTablesKeyDelete", _
                                         False)
            Set dbDAODelKey = CurrentDb()
            Set rstDAODelKey = dbDAODelKey.OpenRecordset(strSQL, _
                                                         dbOpenDynaset)
            With rstDAOKey
                Do Until .EOF
                    lngNumKeys = lngNumKeys + 1
                    Call UpdDelDCID(rstDAODelKey, _
                                    Forms(modPublDecl.gconFrmCM).txtDCID, _
                                    Me.lstKey.Column(0, 1), _
                                    !Tabelle, _
                                    !DB2KeyVal)
                    .MoveNext
                    DoEvents    ' Ereignissteuerung an Betriebssystem übergeben
                Loop
                .Close
                rstDAODelKey.Close
            End With
            If lngNumKeys <> lngErrCnt Then
                Call UpdDelKeyControls(mlngDelDCID)
            End If
        End If
    End With
cmdAddAllKeys_Click_Exit:
    SysCmd acSysCmdRemoveMeter
    Set dbDAOKey = Nothing
    Set rstDAOKey = Nothing
    Set dbDAODelKey = Nothing
    Set rstDAODelKey = Nothing
    If lngErrCnt > 0 Then
        Call AddKeyError(lngErrCnt)
    End If
    Exit Sub
cmdAddAllKeys_Click_Err:
    Select Case Err.Number
        Case modPublDecl.gconDuplicateKey   ' Indexfehler
            lngErrCnt = lngErrCnt + 1
            Resume Next
        Case Else
            Call modPublic.ShowMsgBox(Err.Description, _
                                      modPublDecl.gconOkExcStyle, _
                                      conAddAllKeys, _
                                      True)
    End Select
    Resume cmdAddAllKeys_Click_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     AddKeyError
'
' Beschreibung: Fehlermeldung, falls der/die ausgewählte(n) Key(s) bereits zugeordnet
'               wurden.
'
' Parameter:    lngErrCnt
'-------------------------------------------------------------------------------------'
Private Sub AddKeyError(ByVal lngErrCnt As Integer)
    Call modPublic.ShowMsgBox(lngErrCnt & " Key(s) wurde(n) bereits hinzugefügt.", _
                              modPublDecl.gconOkExcStyle, _
                              "Key(s) hinzufügen", _
                              True)
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     lstKeyDel_DblClick
'
' Beschreibung: Löscht den mit Doppelklick ausgewählten Key aus der Tabelle
'               tblDB2DMCMDCTablesKeyDelete.
'
' Parameter:    Cancel
'-------------------------------------------------------------------------------------'
Private Sub lstKeyDel_DblClick(Cancel As Integer)
On Error GoTo lstKeyDel_DblClick_Err
    Dim strSQL                      As String
    With Me
        .lstKey.Requery
        If (IsNull(.cboDelDCID) Or IsNull(.cboDelTabelle) Or IsNull(.cboDelKey)) = True Then
            Call modPublic.ShowMsgBox("Bitte wählen Sie zuerst eine Kombination aus " & _
                                      vbCrLf & _
                                      "DCID (Kombinationsfeld 'DCID')," & vbCrLf & _
                                      "Tabelle (Kombinationsfeld 'Tabelle')" & vbCrLf & _
                                      "und Key (Kombinationsfeld 'Key').", _
                                      modPublDecl.gconOkInfStyle, _
                                      "Fehlende Auswahl", _
                                      True)
        Else
            If .lstKeyDel.ListCount > 0 Then
                Call modPublic.SetStatusBarText(10, _
                                                False, _
                                                0)
                strSQL = modSQL.QDelAllKeys(mlngDCID, _
                                            CStr(.lstKeyDel.Column(1, 1)), _
                                            CStr(.lstKeyDel.Column(2, 1)), _
                                            CStr(.lstKeyDel.Column(3, 1)))
                CurrentDb.Execute strSQL
            End If
            Call UpdDelKeyControls(mlngDelDCID)
        End If
        .lstKeyDel.SetFocus
    End With
lstKeyDel_DblClick_Exit:
    SysCmd acSysCmdRemoveMeter
    Exit Sub
lstKeyDel_DblClick_Err:
    Call modPublic.ShowMsgBox(Err.Description, _
                              modPublDecl.gconOkExcStyle, _
                              "Vor dem Laden zu löschenden Key löschen", _
                              True)
    Resume lstKeyDel_DblClick_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cmdDeleteSelected_Click
'
' Beschreibung: Löscht alle markierten Keys (Mehrfachauswahl) aus der Tabelle
'               tblDB2DMCMDCTablesKeyDelete.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub cmdDeleteSelected_Click()
On Error GoTo cmdDeleteSelected_Click_Err
    Const conDelSelKeys             As String = "Ausgewählte Keys löschen"
    Dim strSQL                      As String
    Dim avntElement                 As Variant
    Dim strTabelle                  As String
    Dim lngNumKeys                  As Long
    With Me.lstKeyDel
        If .ItemsSelected.Count > 0 Then
            lngNumKeys = .ItemsSelected.Count
            If modPublic.ShowMsgBox(lngNumKeys & modPublDecl.gconSpace & LCase(mconV) & _
                                    mconKeyDel & " löschen?" & vbCrLf & vbCrLf & _
                                    "Der Vorgang kann mehrere Minuten dauern!", _
                                    modPublDecl.gconYNDef2QuestStyle, _
                                    conDelSelKeys, _
                                    False) = vbYes Then
                mboolDeleteAllKeys = False
                modPublDecl.glngNumKeys = lngNumKeys
                Call modPublic.SetStatusBarText(8, _
                                                False, _
                                                0)
                Call modPublic.HourGlassState(True)
                For Each avntElement In .ItemsSelected
                    strSQL = modSQL.QDelAllKeys(CStr(.Column(0, avntElement)), _
                                                CStr(.Column(1, avntElement)), _
                                                CStr(.Column(2, avntElement)), _
                                                CStr(.Column(3, avntElement)))
                    CurrentDb.Execute strSQL
                    modPublDecl.glngNumKeys = modPublDecl.glngNumKeys - 1
                    Call modPublic.SetStatusBarText(8, _
                                                    False, _
                                                    0)
                    DoEvents    ' Ereignissteuerung an Betriebssystem übergeben
                Next avntElement
                Call UpdDelKeyControls(mlngDelDCID)
                Call modPublic.HourGlassState(False)
            End If
            SysCmd acSysCmdClearStatus
        Else
            Call modPublic.ShowMsgBox("Es wurden keine zu löschenden Keys ausgewählt!", _
                                      modPublDecl.gconOkExcStyle, _
                                      conDelSelKeys, _
                                      True)
        End If
        .SetFocus
    End With
cmdDeleteSelected_Click_Exit:
    SysCmd acSysCmdRemoveMeter
    Exit Sub
cmdDeleteSelected_Click_Err:
    Call modPublic.ShowMsgBox(Err.Description, _
                              modPublDecl.gconOkExcStyle, _
                              conDelSelKeys, _
                              True)
    Resume cmdDeleteSelected_Click_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cmdDeleteAllKeys_Click
'
' Beschreibung: Löscht alle Keys aus der Tabelle tblDB2DMCMDCTablesKeyDelete.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub cmdDeleteAllKeys_Click()
On Error GoTo cmdDeleteAllKeys_Click_Err
    Const conDelAllKeys             As String = "Alle Keys löschen"
    Dim strSQL                      As String
    Dim strDelDCID                  As String
    Dim strDelTabelle               As String
    Dim strDelKey                   As String
    Dim strSubMsg                   As String
    With Me
        strDelDCID = IIf(.cboDelDCID.Value = modPublDecl.gconSelectAll, _
                         "*", _
                         .cboDelDCID)
        strSubMsg = Space(8) & "DCID:" & vbTab & vbTab & _
                    IIf(strDelDCID = "*", "Alle", .cboDelDCID) & vbCrLf
        strDelTabelle = IIf(.cboDelTabelle.Value = modPublDecl.gconSelectAll, _
                            "*", _
                            .cboDelTabelle)
        strSubMsg = strSubMsg & Space(8) & "Tabelle(n):" & vbTab & _
                    IIf(strDelTabelle = "*", "Alle", .cboDelTabelle) & vbCrLf
        strDelKey = IIf(.cboDelKey.Value = modPublDecl.gconSelectAll, _
                        "*", _
                        .cboDelKey)
        strSubMsg = strSubMsg & Space(8) & "Key(s):" & vbTab & _
                    IIf(strDelKey = "*", "Alle", .cboDelKey) & vbCrLf
        If modPublic.ShowMsgBox(mconV & mconKeyDel & vbCrLf & strSubMsg & "löschen?", _
                                modPublDecl.gconYNDef2QuestStyle, _
                                conDelAllKeys, _
                                False) = vbYes Then
            mboolDeleteAllKeys = True
            Call modPublic.SetStatusBarText(9, _
                                            False, _
                                            0)
            With .cboDelDCID
                strDelDCID = IIf(.Value = modPublDecl.gconSelectAll, _
                                 "*", _
                                 .Value)
            End With
            With .cboDelTabelle
                strDelTabelle = IIf(.Value = modPublDecl.gconSelectAll, _
                                    "*", _
                                    .Value)
            End With
            With .cboDelKey
                strDelKey = IIf(.Value = modPublDecl.gconSelectAll, _
                                "*", _
                                .Value)
            End With
            strSQL = modSQL.QDelAllKeys(CLng(.lstKeyDel.Column(0, 1)), _
                                        strDelDCID, _
                                        strDelTabelle, _
                                        strDelKey)
            CurrentDb.Execute strSQL
            Call UpdDelKeyControls(mlngDelDCID)
            .lstKey.SetFocus
            Call lstKeyDelRefresh
        End If
    End With
cmdDeleteAllKeys_Click_Exit:
    SysCmd acSysCmdRemoveMeter
    Exit Sub
cmdDeleteAllKeys_Click_Err:
    Call modPublic.ShowMsgBox(Err.Description, _
                              modPublDecl.gconOkExcStyle, _
                              conDelAllKeys, _
                              True)
    Resume cmdDeleteAllKeys_Click_Exit
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     lstKeyDelRefresh
'
' Beschreibung: Aktualisert das Steuerelement lstKeyDel.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub lstKeyDelRefresh()
    Dim strSQL                      As String
    Dim strDCIDColl                 As String
    Dim strDelTabelle               As String
    Dim strDelKey                   As String
    With Me
        If Not IsNull(.cboDelDCID) Then
            strDCIDColl = BuildSQLInStatement()
            If Not IsNull(.cboDelTabelle) Then
                With .cboDelTabelle
                    strDelTabelle = IIf(.Value = modPublDecl.gconSelectAll, _
                                        "*", _
                                        .Value)
                End With
                If Not IsNull(.cboDelKey) Then
                    With .cboDelKey
                        strDelKey = IIf(.Value = modPublDecl.gconSelectAll, _
                                        "*", _
                                        .Value)
                    End With
                    strSQL = modSQL.QSelDCTablesKeyDel(mlngDCID, _
                                                       strDCIDColl, _
                                                       strDelTabelle, _
                                                       strDelKey)
                    .lstKeyDel.RowSource = strSQL
                    .lstKeyDel.Requery
                End If
            End If
        ElseIf IsNull(.cboDelDCID) Then
            .lstKeyDel.RowSource = vbNullString
            .cboDelKey.Enabled = False
        End If
        Call DelKeyRefresh
    End With
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     DisableCmdButtons
'
' Beschreibung: Deaktiviert die Befehlsschaltflächen cmdAddSelected, cmdAddAllKeys
'               und cmdDeleteAllKeys.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub DisableCmdButtons()
    With Me
        Call EnDisableCtl(.cmdAddAllKeys, _
                          .cmdAddSelected, _
                          False)
        Call EnDisableCtl(.cmdDeleteAllKeys, _
                          .cmdDeleteSelected, _
                          False)
    End With
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     EnDisableCmdButtons
'
' Beschreibung: Steuert die Anzeige der Befehlsschaltflächen cmdAddAllKeys/cmdAddSelected
'               und cmdDeleteAllKeys/cmdDeleteSelected.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub EnDisableCmdButtons()
    With Me
        If .lstKey.ListCount > 1 Then
            If Len(.cboTabelle.Value) <> 0 Then
                With Me
                    Call EnDisableCtl(.cmdAddAllKeys, _
                                      .cmdAddSelected, _
                                      True)
                End With
            End If
        Else
            Call EnDisableCtl(.cmdAddAllKeys, _
                              .cmdAddSelected, _
                              False)
        End If
        If .lstKeyDel.ListCount > 1 Then
            Call EnDisableCtl(.cmdDeleteAllKeys, _
                              .cmdDeleteSelected, _
                              True)
        Else
            Call EnDisableCtl(.cmdDeleteAllKeys, _
                              .cmdDeleteSelected, _
                              False)
        End If
    End With
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     EnDisableCtl
'
' Beschreibung: Aktiviert bzw. deaktiviert die Steuerelemente Befehlsschaltflächen
'               ctlControl1 und ctlControl2.
'
' Parameter:    ctlControl1
'               ctlControl2
'               boolEnabled
'-------------------------------------------------------------------------------------'
Private Sub EnDisableCtl(ByVal ctlControl1 As Control, _
                         ByVal ctlControl2 As Control, _
                         ByVal boolEnabled As Boolean)
    ctlControl1.Enabled = boolEnabled
    ctlControl2.Enabled = boolEnabled
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     cmdClose_Click
'
' Beschreibung: Ruft die Funktion modPublic.CloseForm auf.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub cmdClose_Click()
    Call modPublic.CloseForm(Me.Name)
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     KeyRefresh
'
' Beschreibung: Aktualisert das Bezeichnungsfeld lblKey und ruft die Prozedur
'               EnDisableCmdButtons auf.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub KeyRefresh()
    With Me
        If .lstKey.ListCount > 1 Then
            .lblKey.Caption = mconKeyAvail & ": " & .lstKey.ListCount - 1
        Else
            .cboDCID.SetFocus
            .lblKey.Caption = mconKeyAvail & ": 0"
        End If
    End With
    Call EnDisableCmdButtons
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     DelKeyRefresh
'
' Beschreibung: Aktualisert das Bezeichnungsfeld lblKeyDel und aktiviert/deaktiviert
'               Steuerelemente abhängig vom Listenzähler.
'
' Parameter:    Ohne
'-------------------------------------------------------------------------------------'
Private Sub DelKeyRefresh()
    With Me
        .cboDCID.SetFocus
        If .lstKeyDel.ListCount > 1 Then
            .lblKeyDel.Caption = mconV & mconKeyDel & ": " & .lstKeyDel.ListCount - 1
            .lstKeyDel.Enabled = True
            .lblDelDCID.ForeColor = 0
            .cboDelDCID.Enabled = True
            .lblDelTabelle.ForeColor = 0
            .cboDelTabelle.Enabled = True
            .lblDelKey.ForeColor = 0
            .cboDelKey.Enabled = True
            .cboDelDCID.SetFocus
        Else
            .lblKeyDel.Caption = mconV & mconKeyDel & ": 0)"
            .lstKeyDel.Enabled = False
            .lblDelDCID.ForeColor = modPublDecl.gconForeColor
            With .cboDelDCID
                .Value = vbNullString
                .Enabled = False
            End With
            .lblDelTabelle.ForeColor = modPublDecl.gconForeColor
            With .cboDelTabelle
                .Value = vbNullString
                .Enabled = False
            End With
            .lblDelKey.ForeColor = modPublDecl.gconForeColor
            With .cboDelKey
                .Value = vbNullString
                .Enabled = False
            End With
        End If
    End With
    Call EnDisableCmdButtons
End Sub
'-------------------------------------------------------------------------------------'
' Funktion:     KeysSaved
'
' Beschreibung: Prüft, ob gesicherte Keys vorhanden sind und übergibt durch Sprung auf
'               den letzten Datensatz den Maxwert von DCID.
'
' Parameter:    lngDCID
'               rlngMaxDelDCID
'
' Rückgabe:     rlngMaxDelDCID
'               KeysSaved
'-------------------------------------------------------------------------------------'
Private Function KeysSaved(ByVal lngDCID As Long, _
                           ByRef rlngMaxDelDCID As Long) As Boolean
    Dim dbDAO                       As DAO.Database
    Dim rstDAO                      As DAO.Recordset
    Dim strSQL                      As String
    strSQL = modSQL.QSelDistTablesKeyDel(lngDCID)
    Set dbDAO = CurrentDb()
    Set rstDAO = dbDAO.OpenRecordset(strSQL, _
                                     dbOpenDynaset)
    With rstDAO
        If Not .EOF Then
            .MoveLast
            KeysSaved = True
            rlngMaxDelDCID = !DelDCID
        ElseIf .EOF Then
            KeysSaved = False
            rlngMaxDelDCID = 0
        End If
        .Close
    End With
    Set dbDAO = Nothing
    Set rstDAO = Nothing
End Function
'-------------------------------------------------------------------------------------'
' Prozedur:     UpdDelKeyControls
'
' Beschreibung: Aktualisiert die Steuerelemente der zu löschenden Keys.
'
' Parameter:    lngDCID
'-------------------------------------------------------------------------------------'
Private Sub UpdDelKeyControls(ByVal lngDCID As Long)
    Call modPublic.SetStatusBarText(19, _
                                    False, _
                                    0)
    Call cboDelDCIDRefresh(True, lngDCID)
    Call cboDelTabelleRefresh(True)
    Call cboDelKeyRefresh(True)
    Call lstKeyDelRefresh
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     lstKeyRequery
'
' Beschreibung: Aktualisiert das Steuerelement lstKey.
'
' Parameter:    strSQL
'-------------------------------------------------------------------------------------'
Private Sub lstKeyRequery(ByVal strSQL As String)
    With Me.lstKey
        .RowSource = strSQL
        .Requery
    End With
End Sub
'-------------------------------------------------------------------------------------'
' Prozedur:     lstKeyDelRequery
'
' Beschreibung: Aktualisiert das Steuerelement lstKeyDel.
'
' Parameter:    strSQL
'-------------------------------------------------------------------------------------'
Private Sub lstKeyDelRequery(ByVal strSQL As String)
    With Me.lstKeyDel
        .RowSource = strSQL
        .Requery
    End With
End Sub
'-------------------------------------------------------------------------------------'
' Funktion:     BuildSQLInStatement
'
' Beschreibung: Baut den Parameter des SQL In Statements auf.
'
' Parameter:    Ohne
'
' Rückgabe:     BuildSQLInStatement
'-------------------------------------------------------------------------------------'
Private Function BuildSQLInStatement() As String
    Dim intCnt                      As Integer
    With Me.cboDelDCID
        If .Value = modPublDecl.gconSelectAll Then
            For intCnt = 1 To .ListCount
                BuildSQLInStatement = BuildSQLInStatement & .ItemData(intCnt)
                If intCnt + 1 < .ListCount Then
                    BuildSQLInStatement = BuildSQLInStatement & ","
                End If
            Next intCnt
        ElseIf .Value <> modPublDecl.gconSelectAll Then
            BuildSQLInStatement = .Value
        End If
    End With
End Function
'-------------------------------------------------------------------------------------'
' Prozedur:     UpdDelDCID
'
' Beschreibung: Aktualisiert die Tabelle tblDB2DMCMDCTablesKeyDelete.
'
' Parameter:    rstDAO
'               strDCID
'               strDelDCID
'               strTable
'               strKeyVal
'-------------------------------------------------------------------------------------'
Private Sub UpdDelDCID(ByVal rstDAO As Recordset, _
                       ByVal strDCID As String, _
                       ByVal strDelDCID As String, _
                       ByVal strTable As String, _
                       ByVal strKeyVal As String)
    With rstDAO
        .AddNew
        !DCID = strDCID
        !DelDCID = strDelDCID
        !Tabelle = strTable
        !DB2KeyVal = strKeyVal
        .Update
    End With
End Sub