[VBA/Access] Fout bij afsluiten formulier

Pagina: 1
Acties:

  • Carpenter
  • Registratie: December 2002
  • Laatst online: 13:42
Beste mensen,

Ik heb in een formulier een annuleerknop gemaakt met de voldende code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Private Sub btn_annuleren_Click()
On Error GoTo Err_Close

    Dim dbs As Database, rst_medewerker_nieuw, rst_medewerker_verwijderd As Recordset
    Dim medewerkerprofiel As TextBox
    Dim medewerker_nieuw As TextBox
    Dim message
    
    Set dbs = CurrentDb()
    Set rst_medewerker_nieuw = dbs.OpenRecordset("SELECT * FROM tbl_medewerker_profiel_medewerker WHERE medewerker_profiel_medewerker_status = 'nieuw'", dbOpenDynaset, dbReadOnly)
    Set rst_medewerker_verwijderd = dbs.OpenRecordset("SELECT * FROM tbl_medewerker_profiel_medewerker WHERE medewerker_profiel_medewerker_status = 'verwijderd'", dbOpenDynaset, dbReadOnly)
    Set medewerkerprofiel = txt_medewerker_profiel_id
    Set medewerker_nieuw = Forms!frm_constanten!txt_const_medewerker_profiel_nieuw
    
    message = MsgBox("Alle niet opgeslagen gegevens gaan verloren. Wilt u doorgaan?", vbYesNo, "Waarschuwing")
    
    If message = vbYes Then
        If rst_medewerker_nieuw.RecordCount >= 1 Then
            dbs.Execute "DELETE * FROM tbl_medewerker_profiel_medewerker WHERE medewerker_profiel_id=" & [medewerker_profiel_id] & " AND medewerker_profiel_medewerker_status = 'nieuw';"
        End If
        
        If rst_medewerker_verwijderd.RecordCount >= 1 Then
            If medewerker_nieuw = 1 Then
                dbs.Execute "DELETE * FROM tbl_medewerker_profiel_medewerker WHERE medewerker_profiel_id=" & [medewerker_profiel_id] & " AND medewerker_profiel_medewerker_status = 'verwijderd';"
            Else
                dbs.Execute "UPDATE tbl_medewerker_profiel_medewerker SET medewerker_profiel_medewerker_status = Null WHERE medewerker_profiel_id = " & medewerkerprofiel & ";"
            End If
        End If
        DoCmd.SetWarnings False
        
        DoCmd.RunCommand acCmdUndo
            
        DoCmd.SetWarnings True
            
        DoCmd.Close acForm, "frm_release_medewerker_profiel", acSaveNo
    End If
    
    dbs.Close

Err_Close:
    txt_medewerker_profiel_id = 0
    
    If message = vbYes Then
        DoCmd.Close acForm, "frm_release_medewerker_profiel", acSaveNo
        
        DoCmd.SetWarnings True
    End If
    
    dbs.Close
    
End Sub

Hier worden ook alle gerelateerde records vewijderd of geupdate. Alleen nou heb ik het volgende probleem: als ik het formulier open in toevoegmodus en ik voer wat dingen in en een gerelateerd record in het subformulier dan krijg ik een popup als ik op de annuleerknop klik waar hij vraagt naar een parameterwaarde 'txt_medewerker_profiel_id'. Als ik in de code over dit 'veld' heen ga met de muis dan krijg ik een melding 'De expressie verwijst naar een object dat is gesloten'. Hoe los ik dit op want dit is echt heel erg irritant en ik snap er niets van.

  • Boss
  • Registratie: September 1999
  • Laatst online: 13:24

Boss

+1 Overgewaardeerd

In welke regelnummer krijg je die fout?

Het lijkt erop dat het niet in je code zit, maar de koppeling tussen sub/hoofd formulier.

Heb je het hoofdformulier wel opgeslagen (vooral bij nieuw record erg belangrijk) voordat je in het subformulier aan het werk gaat?

Overigens doe je een hoop dingen niet zo handig, vind ik. Je gebruikt SQL en recordsets door elkaar heen, dat is onduidelijk. Bij de WHERE bij het verwijderen filter je al op ID, en dan ook nog eens op een ander veld. En waarom eerst die waarden uit die textboxes in een variabele stoppen, terwijl je ze ook direct zou kunnen aanspreken met je code?

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Carpenter
  • Registratie: December 2002
  • Laatst online: 13:42
Je hebt bij veel dingen gelijk :X ik zal eerst de code es even updaten