Error 2046 en error 2105

Status
Niet open voor verdere reacties.

so10070

Gebruiker
Lid geworden
4 feb 2014
Berichten
424
Als ik de code in stappen laat lopen wordt de foutmelding gedetecteerd. Als ik de code gewoon laat lopen wordt de foutmelding niet gedetecteerd en kunnen er blanco records bijgemaakt worden zoveel keer er op de "volgende" knop gedrukt wordt. Het "DoCmd.GoToRecord , , acNext" wordt bij het in stappen doorlopen van de procedure herkend als een fout en de foutafhandeling wordt opgestart. Ik wil ervoor zorgen dat er geen nodeloze records bijgemaakt worden en dat de foutafhandeling opgestart wordt op het moment de gebruiker een tweede blanco record wil maken voordat hij het eerste volledig ingevuld heeft.

Code:
Private Sub cmbNaarVolgend_Click()
    On Error GoTo foutafhandeling
    
    If TempVars.Item("ControleProduct") = 1 Then 'alle keuzes in de juiste volgorde gemaakt!
        info (26)
        Me.cmbActiePlannen.SetFocus
    Else
        DoCmd.GoToRecord , , acNext
    End If
    
Exit_Sub:
    Exit Sub
    
foutafhandeling:
    If Err.Number = 2046 Or Err.Number = 2105 Then
        info (20)
        Resume Exit_Sub
    End If
End Sub
 
Ik snap niet helemaal wat je aan het doen bent, maar als je wilt voorkomen dat er ten onrechte naar een nieuw record wordt gegaan (overigens ga je met de knop naar een volgend record, niet naar een nieuw record, dus dat kan je überhaupt al beter afschermen dan zo) zou ik de knop uitschakelen en pas aanzetten als aan alle voorwaarden is voldaan. Voorkomen is beter dan genezen...
 
Er mag bij het indrukken van de knop "Naar een volgend record gaan" een nieuw record aangemaakt worden, maar niet oneindig veel. Vanuit Access kan dit perfect met het commando "acNext". Ik wil de gebruiker erop attent maken dat hij op een blanco record staat en hier eerst data moet ingeven. Zonder het teksvak "txtPubKalenderJaar" in te vullen, lukt dit perfect. Access geeft de gebruiker dan automatisch een opmerking (error 2105). Pas vanaf het moment dat ik het tekstveld "txtPubKalenderJaar" een waarde meegeef verandert de situatie. Ik begrijp dat er dan een record aangemaakt is waarvan er slechts één veld een waarde meegekregen heeft. Ik los dit nu zo op, weliswaar wordt er dan nog één blanco record aangemaakt, maar ook niet meer.
Code:
Private Sub cmbNaarVolgend_Click()
    On Error GoTo foutafhandeling
    
    If TempVars.Item("ControleProduct") = 1 Then 'alle keuzes in de juiste volgorde gemaakt!
        info (26)
        Me.cmbActiePlannen.SetFocus
    Else
        If Me.CurrentRecord < Me.Recordset.RecordCount Then 'en hier naar volgend record gaan indien dit bestaat
            If Me.cmbActiePlannen = "" Or IsNull(Me.cmbActiePlannen) Then   'is dit een leeg record
                info 20
            Else 'indien geen leeg record
                DoCmd.GoToRecord , , acNext
            End If
        Else
            If Me.cmbActiePlannen = "" Or IsNull(Me.cmbActiePlannen) Then  'indien het record nog niet bestaat
                info (20)
            Else 'maak dan maar een nieuw aan
                DoCmd.GoToRecord , , acNewRec
                Me.txtPKalenderjaar = TempVars.Item("PubKalenderjaar")
            End If
        End If
    End If
    
    
Exit_Sub:
    Exit Sub
    
foutafhandeling:
    If Err.Number = 2105 Then '"Kan niet naar opgegeven record gaan" - Or Err.Number = 2046 "De actie Naar volgend record gaan is niet beschikbaar"
        info (20)
        Resume Exit_Sub
    End If
End Sub
 
Er mag bij het indrukken van de knop "Naar een volgend record gaan" een nieuw record aangemaakt worden, maar niet oneindig veel.
Is dat je wetenschappelijke benadering? :) Je bent in ieder geval een stuk minder streng als ik. In mijn db's kún je niet vanuit de bladerknoppen een nieuw record aanmaken, want ik vind dat een totaal andere actie dan een nieuw record maken. Daarvoor maak ik altijd een specifieke knop cmdNieuwRecord. Al was het maar dat ik overbodige (niet-bedoelde) nieuwe records niet in een tabel wil hebben. Laat staan dat ik ze wil categoriseren als 'niet oneindig veel'. Want waar trek je de grens tussen 'acceptabel aantal overbodige nieuwe records' en 'oneindig veel'?
Kortom: in mijn ogen is het goed databasegebruik als je verhindert dat acties worden uitgevoerd die je op dat moment niet wilt laten uitvoeren. Dat werkt ook een stuk beter als achteraf ingrijpen als het wél fout gaat.
 
Andermaal heb je gelijk: ik heb mijn applicatie aangepast en op elk formulier een knop toegevoegd "Nieuw Record Aanmaken". Heb geen lege records meer! Lost ook een paar andere problemen op, waar ik anders niet tevreden over was. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan