Het verwijderen van een record uit een lijst van records

Status
Niet open voor verdere reacties.

li1964

Gebruiker
Lid geworden
14 dec 2011
Berichten
9
Hallo,

We hebben een Access / VBA programmeer probleem.
Als we door records bladeren in een Access subform dan worden de records een voor een opgeslagen in de database.
Als we een record uit de lijst willen verwijderen, b.v. het derde record uit een lijst van vijf records, wordt altijd het 1e record verwijderd en niet het juiste dus derde record. Hoe kunnen we records verwijderen waar de cursor in staat? Dus als we bij het derde records zijn en dan op de delete knop drukken dan dient ook het derde record verwijderd te worden uit de lijst van records in het subform.

Ik heb de code toegevoegd.

Is er een access/vba expert die me kan helpen?
We zijn al een tijdje wanhopig naar de oplossing aan het zoeken...

Code:
Option Compare Database
Dim FocusBln As Boolean

Private Sub Identificeer()
Me.[Datum Aangemaakt].Visible = True
Me.[Datum Aangemaakt].SetFocus
If Me.[Datum Aangemaakt].Text = "" Then
    If Screen.ActiveForm.Name = "Voortgangsrapportage" Then
        Me.[Datum Aangemaakt].Value = Forms![Voortgangsrapportage].Form.[Voortgangsrapportage Subformulier].Form.[Datum]
    ElseIf Screen.ActiveForm.Name = "Intake2" Then
        If Forms![Intake2].[Datum Intake] = "" Then
            Me.[Datum Aangemaakt].Value = Now()
        Else
            Me.[Datum Aangemaakt].Value = Forms![Intake2].[Datum Intake]
        End If
    ElseIf Screen.ActiveForm.Name = "Eindresultaat Onderhoud Zoeken" Then
        Me.[Datum Aangemaakt].Value = Forms![Eindresultaat Onderhoud Zoeken].Form.[Eindresultaat Onderhoud Zoeken Subformulier].Form.[Eindresultaat Onderhoud].Form.[Datum afsluiting]
    ElseIf Screen.ActiveForm.Name = "Beginsituatie" Then
        Me.[Datum Aangemaakt].Value = Forms![Beginsituatie].Form.[Subformulier Datum].Form.[Datum Intake]
    End If
End If
Me.VoortgangText.Visible = True
Me.VoortgangText.SetFocus
If Me.VoortgangText.Text = "" Then
    If Screen.ActiveForm.Name = "Voortgangsrapportage" Then
        Me.VoortgangText.Value = Forms![Voortgangsrapportage].Form.[Voortgangsrapportage Subformulier].Form.[VoortgangID]
    ElseIf Screen.ActiveForm.Name = "Aanvraag Kiezen" Or Screen.ActiveForm.Name = "Aanvraag Opzoeken" Or Screen.ActiveForm.Name = "Intake2" Then
        Me.VoortgangText.Value = 0
    Else
        Me.VoortgangText.Value = 0
    End If
End If
Me.Subformulier_Hulpvraag_Tabel.Requery
Me.Hulpvraag.SetFocus
Me.[Datum Aangemaakt].Visible = False
Me.VoortgangText.Visible = False
End Sub

Private Sub Form_Current()
'FocusBln = False
'Call Identificeer
'FocusBln = True
End Sub


Private Sub Form_Load()
FocusBln = True
End Sub

Private Sub Hulpvraag_GotFocus()
If FocusBln = True Then
    FocusBln = False
    Call Identificeer
    FocusBln = True
End If
End Sub

Private Sub Keuzelijst_met_invoervak2_KeyPress(KeyAscii As Integer)
'KeyAscii voor hoofdletters zijn 65 t/m 90, en 97 t/m 122 voor kleine letters.
'Nummers = 48 t/m 57
'Tab = 9, Backspace = 8, Enter = 13
If KeyAscii <> 9 And KeyAscii <> 13 Then
Beep
KeyAscii = 0
End If
End Sub

Private Sub Knop27_Click()
On Error GoTo Fout



'If IsNull([Hulpvraag]) Or IsNull([Categorie]) Then
    'MsgBox ("Hulpvraag en categorie zijn verplicht.")
    'Exit Sub
'End If

If Screen.ActiveForm.Name = "Voortgangsrapportage" Then
    If Forms![Voortgangsrapportage].Form.[Voortgangsrapportage Subformulier].Form.Datum.Text = "" Then
        Beep
    Else
        DoCmd.GoToRecord , , acPrevious
        Me.Refresh
        Me.Subformulier_Hulpvraag_Tabel.Form.Refresh
    End If
Else
    Me.Hulpvraag.SetFocus
    If Me.Hulpvraag.Text = "" And Len(Me.Categorie & vbNullString) = 0 Then
        DoCmd.RunCommand acCmdSaveRecord
        'Me.Recordset.Delete
        Me.Recordset.MovePrevious
        Me.Refresh
    Else
        DoCmd.GoToRecord , , acPrevious
        Me.Refresh
        Me.Subformulier_Hulpvraag_Tabel.Form.Refresh
    End If
End If
Exit Sub

Fout:
Beep
End Sub

Private Sub Knop28_Click()
On Error GoTo Fout
If IsNull([Hulpvraag]) Or IsNull([Categorie]) Then
    MsgBox ("Hulpvraag en categorie zijn verplicht.")
    Exit Sub
End If
If Screen.ActiveForm.Name = "Voortgangsrapportage" Then
    If Forms![Voortgangsrapportage].Form.[Voortgangsrapportage Subformulier].Form.Datum.Text = "" Then
        Beep
    Else
        Me.Subformulier_Hulpvraag_Tabel.Form.Refresh
        Me.Refresh
        DoCmd.GoToRecord , , acNext
    End If
Else
    Me.Subformulier_Hulpvraag_Tabel.Form.Refresh
    Me.Refresh
    DoCmd.GoToRecord , , acNext
    Call Identificeer
End If
Exit Sub

Fout:
Beep
End Sub

Private Sub NieuwKnop_Click()
On Error GoTo Fout

If IsNull([Hulpvraag]) Or IsNull([Categorie]) Then
    MsgBox ("Hulpvraag en categorie zijn verplicht.")
    Exit Sub
End If

If Screen.ActiveForm.Name = "Voortgangsrapportage" Then
    If Forms![Voortgangsrapportage].Form.[Voortgangsrapportage Subformulier].Form.Datum.Text = "" Then
        Beep
    Else
        DoCmd.GoToRecord , , acNewRec
        Me.Refresh
    End If
Else
    DoCmd.GoToRecord , , acNewRec
    Call Identificeer
    Me.Refresh
End If
Exit Sub

Fout:
Beep
End Sub


Private Sub OpgelostCheck_Click()
Me.[Datum Opgelost].Visible = True
If Me.OpgelostCheck.Value = True Then
    If Screen.ActiveForm.Name = "Voortgangsrapportage" Then
        Me.[Datum Opgelost].Value = Forms![Voortgangsrapportage].Form.[Voortgangsrapportage Subformulier].Form.[Datum]
        [Voortgang Opgelost] = Forms![Voortgangsrapportage].Form.[Voortgangsrapportage Subformulier].Form.[VoortgangID]
    ElseIf Screen.ActiveForm.Name = "Eindresultaat Onderhoud Zoeken" Then
        Me.[Datum Opgelost].Value = Forms![Eindresultaat Onderhoud Zoeken].Form.[Eindresultaat Onderhoud Zoeken Subformulier].Form.[Eindresultaat Onderhoud].Form.[Datum afsluiting]
    ElseIf Screen.ActiveForm.Name = "Beginsituatie" Then
        Me.[Datum Opgelost].Value = Forms![Beginsituatie].Form.[Subformulier Datum].Form.[Datum Intake]
    End If
ElseIf Me.OpgelostCheck.Value = False Then
    Me.[Datum Opgelost].SetFocus
    Me.[Datum Opgelost].Value = Null
End If
Me.OpgelostCheck.SetFocus
Me.[Datum Opgelost].Visible = False
Me.Refresh
End Sub

Private Sub VerwijderKnop_Click()
If Screen.ActiveForm.Name = "Intake2" Then
    DoCmd.RunCommand acCmdSaveRecord
    Me.Recordset.Delete
    Me.Recordset.MovePrevious
    Me.Refresh
ElseIf Screen.ActiveForm.Name = "Voortgangsrapportage" Then
    If Forms![Voortgangsrapportage].Form.[Voortgangsrapportage Subformulier].Form.Datum.Text = "" Then
        Beep
    Else
        If [VoortgangID] = Forms![Voortgangsrapportage].Form.[Voortgangsrapportage Subformulier].Form.[VoortgangID] Then
            DoCmd.RunCommand acCmdSaveRecord
            Me.Recordset.Delete
            Me.Recordset.MovePrevious
            Me.Refresh
        Else
            MsgBox ("Alleen hulpvragen die je voor deze voortgang hebt aangemaakt mogen worden verwijderd.")
        End If
    End If
ElseIf Screen.ActiveForm.Name = "Eindresultaat Onderhoud Zoeken" Then
    If [Datum Aangemaakt] = Forms![Eindresultaat Onderhoud Zoeken].Form.[Eindresultaat Onderhoud Zoeken Subformulier].Form.[Eindresultaat Onderhoud].Form.[Datum afsluiting] Then
        DoCmd.RunCommand acCmdSaveRecord
        Me.Recordset.Delete
        Me.Recordset.MovePrevious
        Me.Refresh
    Else
        MsgBox ("Alleen hulpvragen die je voor deze eindsituatie hebt aangemaakt mogen worden verwijderd.")
    End If
ElseIf Screen.ActiveForm.Name = "Beginsituatie" Then
    If [Datum Aangemaakt] = Forms![Beginsituatie].Form.[Subformulier Datum].Form.[Datum Intake] Then
        DoCmd.RunCommand acCmdSaveRecord
        Me.Recordset.Delete
        Me.Recordset.MovePrevious
        Me.Refresh
    Else
        MsgBox ("Alleen hulpvragen die je voor deze beginsituatie hebt aangemaakt mogen worden verwijderd.")
    End If
End If
End Sub
 
Visual Basic is iets anders dan Visual Basic for Applications, VBA is programmeren binnen Office applicaties. Verplaatst naar juiste sectie.
 
Om te beginnen: wat bedoel je hiermee?
Als we door records bladeren in een Access subform dan worden de records een voor een opgeslagen in de database.
Dat wekt namelijk de indruk dat je subformulier niet is gekoppeld aan een gegevensbron. Doorgaans doe je dat (zeker in een subformulier) wel, want een subformulier zou op zijn minst een connectie moeten hebben met het hoofdformulier, en dat houdt dan weer in dat er een tabel onder hangt. En als dat zo is, waarom gebruik je dan de <DELETE> knop niet die standaard in het (sub)formulier aangezet kan worden?
 
Subformulier is wel gekoppeld aan het hoofdformulier

Ik heb een screenshot toegevoegd.

Hulpvraag screenshot.JPG

Het record met test3 dient verwijderd te worden, maar het 1e record wordt verwijderd.

Weet iemand hoe het record waar de gebruiker in staat verwijderd kan worden?
 
Het record met Test3 is niet geselecteerd; de focus staat op het hoofdformulier. Verder zie ik de navigatieknoppen op het subformulier niet, dus hoe wou je het record verwijderen? Rechtermuisknop?
 
Verwijderen gaat via de delete + knop. Navigeren gaat via de knoppen > en < en dan doorloop je de records test1, test2 en test3. En het record test3 is wel geselecteerd alleen zie je dit niet in de lijst. De lijst is slechts een overzicht en hierin mag de gebruiker niet inkomen.

Heb je een oplossing?
 
Dus je formulier is eigenlijk één formulier dat is gebaseerd op een tabel, met daarop een lijst van de overige records uit diezelfde tabel? Access heeft daar tegenwoordig een veel betere techniek voor (gesplitst formulier) maar goed.
Ik snap die 6 meter code niet die je hebt bijgevoegd; als een formulier is gebaseerd op een tabel kun je een record zonder programmeren altijd verwijderen. Doe er anders een voorbeeldje bij, want ik vermoed dat je een constructie hebt bedacht die op afstand niet is te ontrafelen.
 
Beste Michel,

Ik zal het Hulpvraag proces nav. enkele schermafdrukken uitleggen:

We voeren een nieuwe hulpvraag in (Categorie, Opgelost, Hulpvraag) - Hulpvraag1.jpg.
Na indrukken knop Volgend record wordt het hulpvraag overzicht bijgewerkt - Overzicht 1 hulpvragen na indrukken knop volgend record.jpg.
We voeren een nieuwe hulpvraag in (Categorie, Opgelost, Hulpvraag) - Hulpvraag2.jpg.
Na indrukken knop Volgend record wordt het hulpvraag overzicht bijgewerkt - Overzicht 2 hulpvragen na indrukken knop volgend record.jpg.
We voeren een nieuwe hulpvraag in (Categorie, Opgelost, Hulpvraag) - Hulpvraag3.jpg.
Na indrukken knop Volgend record wordt het hulpvraag overzicht bijgewerkt - Overzicht 3 hulpvragen na indrukken knop volgend record.jpg.
We verwijderen hulpvraag2 door terug te bladeren met vorig record en dan op de verwijderknop te drukken - Overzicht 4 hulpvragen na indrukken knop verwijder record.jpg.
Meer velden uit een andere tabel staan onder de Hulpvragen - Meer velden binnen hulpvraag formulier.jpg.

Ik weet niet hoe een gesplitst formulier werkt. Kan je binnen hetzelfde subformulier hulpvraag gegevens invoeren en tegelijkertijd het resultaat na invoer van een hulpvraag tonen als overzicht van alle ingevoerde hulpvragen? Dat zou mooi zijn. Nu hebben we dit geprogrammeerd middels een query.

De hulpvragen worden opgeslagen in de tabel Hulpvragen.
De meerdere velden onder de hulpvraag staan in een andere tabel namelijk de tabel traject.
Er bestaat een relatie tussen deze twee tabellen.

Is het proces nu duidelijk?

Heb je een oplossing?

Meer velden binnen hulpvraag formulier.JPGOverzicht 4 hulpvragen na indrukken knop verwijder record hulpvraag2.JPGOverzicht 3 hulpvragen na indrukken knop volgend record.JPGhulpvraag3 ingevoerd.JPGOverzicht 2 hulpvragen na indrukken knop volgend record.JPGhulpvraag2 ingevoerd.JPGOverzicht 1 hulpvragen na indrukken knop volgend record.JPGhulpvraag1.JPG
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan