[Access] Item toevoegen aan keuzelijst in subformulier

Pagina: 1
Acties:
  • 188 views sinds 30-01-2008
  • Reageer

  • Millennyum
  • Registratie: Januari 2001
  • Laatst online: 04-05-2023
In mijn Access database heb ik een formulier dat organisatie-gegevens weergeeft. Op dit formulier bevindt zich een subformulier, waarmee gebruikers trefwoorden kunnen toekennen aan de betreffende organisatie.
Nu wil ik dat gebruikers ook zelf trefwoorden kunnen invullen, die niet in de lijst staan. Er moet dan een schermpje komen met de vraag of de gebruiker het item wil toevoegen.

Op internet en op GoT ben ik meerdere voorbeelden tegengekomen hoe dit moet. Ze werken echter allemaal niet bij mij. :'(
Aangezien ik niets van VB weet en gewoon de scriptjes kopieer en aanpas aan mijn tabellen en velden, weet ik niet zo goed waar het probleem zit. Ik heb het vermoeden dat het of in de definitie van mijn variabelen zit, of dat het komt doordat de scriptjes niet zijn gebouwd op het gebruik van subformulieren en ik daardoor op een verkeerde manier naar de tabel / het gegevensveld verwijs.

De gegevens van mijn database:
- Het formulier heet 'Fondsen"
- Het subformulier heet 'Subformulier Trefwoorden Organisaties'
- De tabel met waarden heet 'Trefwoorden'
- De tabel bestaat uit de kolommen 'Id' en Trefwoord'
- De keuzelijst op het subformulier heet 'Trefwoord' en haalt zijn gegevens uit de kolom 'Trefwoord'

Ik heb onder meer de volgende scriptjes geprobeerd:

Uit het Access handboek:
code:
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
52
53
Private Sub Trefwoord_NotInList(NewData As String, Response As Integer)

On Error GoTo ErrorHandler

    Dim intResult As Integer
    Dim strTitle As String
    Dim intMsgDialog As Integer
    Dim strMsg1 As String
    Dim strMsg2 As String
    Dim strMs As String
    Dim cbo As Access.ComboBox
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim strTable As String
    Dim strFieldName As String

strTable = "Trefwoorden"

strFieldName = "Trefwoord"

Set cbo = Me![Trefwoord]

strTitle = "Trefwoord niet in lijst"
intMsgDialog = vbYesNo + vbExclamation + vbDefaultButton1
strMsg1 = "Het door u ingevoerde woord is geen keuzeitem in de lijst. Wilt u het woord "
strMsg2 = " toevoegen aan de trefwoordenlijst?"
strMsg = strMsg1 + NewData + strMsg2
intResult = MsgBox(strMsg, intMsgDialog, strTitle)

If intResult = vbNo Then
    Response = acDataErrContinue
    cbo.Undo
    Exit Sub
ElseIf intResult = vbYes Then
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(strTable)
    rst.AddNew
    rst(strFieldName) = NewData
    rst.Update
    rst.Close
    
    Response = acDataErrAdded

End If

ErrorHandlerExit:
    Exit Sub

ErrorHandler:
    MsgBox "Error No: " & Err.Number & "; Description: " & Err.Description
    Resume ErrorHandlerExit
  
End Sub

Met als resultaat de melding: "Compileerfout: een door de gebruiker gedefinieerd gegevenstype is niet gedefinieerd", verwijzend naar de regel "Dim dbs As DAO.Database"


Uit [rml][ Access 97] 'Item not in list' melding *[/rml]:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Dim lastno As Variant
    Dim rst As ADODB.Recordset
        If MsgBox("Wilt u het trefwoord " & NewData & " aan de keuzelijst toevoegen?", vbYesNo, "Niet in lijst") = vbYes Then
        rst.Open " [Subformulier Trefwoorden Organisaties].Form![Trefwoord] "
        rst.AddNew
        rst![Trefwoord] = NewData
        rst.Update
        rst.Close
        Response = acDataErrAdded
    Else
        Me.Undo
    End If
    
    Set rst = Nothing

Met als resultaat de melding: "Fout 91 tijdens uitvoering: Objectvariabele of Blokvariabele With is niet ingesteld", verwijzend naar de regel "rst.Open " [Subformulier Trefwoorden Organisaties].Form![Trefwoord] " "


Van More Software Tools:
code:
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
'Suppress the default error message.

Response = acDataErrContinue

' Prompt user to verify if they wish to add a new value.

If MsgBox(NewData & " is geen keuzeitem in de lijst met trefwoorden. Wilt u de term als trefwoord toevoegen?", vbYesNo) = vbYes Then

' Set Response argument to indicate that data is being added.

'Open a recordset of the Trefwoorden Table.

Dim db As Database

Dim rstTrefwoord As Recordset

Dim sqlTrefwoorden As String

Set db = CurrentDb()

sqlTrefwoorden = "Select * From Trefwoorden"

Set rstTrefwoord = db.OpenRecordset(sqlTrefwoorden, dbOpenDynaset)

'Add a new Trefwoord with the value that is stored in the variable NewData.

rstTrefwoord.AddNew

rstTrefwoord![Trefwoord] = NewData

rstTrefwoord.Update

'Inform the combo box that the desired item has been added to the list.

Response = acDataErrAdded

rstTrefwoord.Close

'Close the recordset

End If

Met als resultaat de melding: "Compileerfout: een door de gebruiker gedefinieerd gegevenstype is niet gedefinieerd", verwijzend naar de regel "db As Database"


Wie kan mij vertellen wat ik fout doe / op welke manier ik een van deze scriptjes werkend krijg?

[ Voor 30% gewijzigd door Millennyum op 15-09-2004 16:54 ]


  • Witte
  • Registratie: Februari 2000
  • Laatst online: 29-01 15:02
Ik denk dat een aantal foutmeldingen met je 'verwijzingen' te maken hebben.
Open VBA, ga naar Extra, verwijzingen en zet een vinkje voor:

Microsoft DAO 3.6 Object Library

Houdoe


  • Millennyum
  • Registratie: Januari 2001
  • Laatst online: 04-05-2023
_O_ Hulde aan Witte!! _O_
Dat was inderdaad het probleem! Hoe had ik hier nu ooit zelf achter moeten komen...?? :| |:(

Anyway, voor degene die na mij komt: de eerste code, dus die uit het Access handboek, heb ik momenteel werkend. De laatste daar bleken ook nog wat andere foutjes in te zitten dus gebruik die niet ;)