combobox - nieuw item toevoegen bij niet in lijst

Status
Niet open voor verdere reacties.

Robby2

Gebruiker
Lid geworden
3 feb 2006
Berichten
40
Dag allemaal,

Ik heb een formulier met een gekoppeld subformulier. Als in het hoofdformulier combobox "c_nr" het cliëntnummer wordt geselecteerd, veranderen in het subformulier de bijbehorende gegevens.

Ik zou graag willen dat:
- als ik een niet bestaande waarde invul in de combobox er een nieuwe cliënt wordt goegevoegd.

Ik heb daar de volgende code voor gevonden:

Private Sub c_nr_NotInList(NewData As String, Response As Integer)
'Niet vergeten de eigenschap "alleen lijst" op "Ja" in te stellen
'Niet vergeten ActiveX Data Objects (ADO) bibliotheek te activeren
On Error GoTo ErrorHandler
Dim intResult As Integer
Dim strTitle As String
Dim strMsg1 As String
Dim strMsg2 As String
Dim strMsg As String
Dim cbo As Access.ComboBox
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strTable As String
' Dim strEntry As String
Dim strFieldName As String

strTable = "tblClientgegevens"
strFieldName = "c_nr"
Set cbo = Me![c_nr] 'Lijstnaam met invoervak
strTitle = strEntry & "Deze cliënt bestaat nog niet"
intMsgDialog = vbYesNo + vbExlamation + vbDefaultButton1
strMsg1 = "Wil je "
strMsg2 = "deze nieuwe cliënt toevoegen?"
strMsg = strMsg1 + strNewData + strMsg2
intResult = Msg(strMsg, intMsgDialog, strTitle)

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

intResponce = acDataErrAdded 'geen foutmeldingen tonen
End If

ErrorHandlerExit:
Exit Sub

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

End Sub

De procedure loopt vast op:
Dim dbs As DAO.Database
Dim rst As DAO.Recordset

(De bijbehorende bibliotheek is echter wel aangevinkt).

Kan iemand mij verder op weg helpen? (ik vroeg me trouwens ook af of het niet simpeler kan)

Hartelijk dank

Rob
I
 
Misschien moet je niet DAO maar ADO gebruiken.
ADO is de nieuwere versie van DAO.
Code:
Dim dbs as ADODB.Database
Wellicht helpt dit.

Verder is het zo dat de code erg veel variabelen laat zien die niet echt nodig zijn.
Gebruik variabelen als ze veranderd mogen worden of wanneer je dynamiek in je code wilt brengen. bedenk dan dat je ook constanten kan gebruiken.

Code:
...
'Niet vergeten ActiveX Data Objects (ADO) bibliotheek te activeren
...
Dim dbs As ADODB.Database
Dim rst As ADODB.Recordset
...
strMsg = "Wil je " & strNewData & " deze nieuwe cliënt toevoegen?"
...

HTH
Weest gegroet,
Guus
 
Ik heb nu het basis probleem opgelost, maar nu krijg ik steeds de melding dat een primaire sleutel geen nulwaarde mag bevatten. Ik neem aan dat die nulwaarde dan ontstaat door gekoppelde velden in andere (sub)formulieren Helaas wordt niet aangegeven welke variabele dan een null-waarde bevat. Ik probeer nu gelijktijdig de andere gekoppelde velden in andere tabellen te vullen, maar de foutmelding blijft. Misschien doe ik het niet goed. Heeft iemand een idee?

Private Sub c_nr_NotInList(NewData As String, Response As Integer)
'Niet vergeten de eigenschap "alleen lijst" op "Ja" in te stellen
'Niet vergeten ActiveX Data Objects (ADO) bibliotheek te activeren
'Microsoft 3.x DAO Library aangevinkt

On Error GoTo ErrorHandler

Dim cbo As Access.ComboBox
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strTable As String
Dim strFieldName As String
Dim strFieldName2 As String


Response = acDataErrContinue
Set dbs = CurrentDb()
Set cbo = Me![c_nr] 'Lijstnaam met invoervak

'Voeg cliënt toe in tabel tblInkomsten
strTable = "tblInkomsten" 'Naam opzoektabel
strFieldName = "d_nr" 'Naam veld waar nieuwe record moet worden opgeslagen
strFieldName2 = "d_dj"

Set rst = dbs.OpenRecordset(strTable)
rst.AddNew
rst(strFieldName) = strNewData
rst(strFieldName2) = Right(Date, 4)
rst.Update

'Voeg cliënt toe in tabel tblCodeboek
strTable = "tblCodeboek"
strFieldName = "Client nr"

Set rst = dbs.OpenRecordset(strTable)
rst.AddNew
rst(strFieldName) = strNewData
rst.Update

'Voeg cliënt toe in tabel tblClientgegevens
strTable = "tblClientgegevens"
strFieldName = "c_nr"

Set rst = dbs.OpenRecordset(strTable)
rst.AddNew
rst(strFieldName) = strNewData
rst.Update

Respons = acDataErrAdded
rst.Close

ErrorHandlerExit:
cbo.Undo
Exit Sub

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

End Sub

Hartelijk dankt
 
Als je niet weet waar hij fout gaat dan vlag je toch alles uit? Daarna kan je stukje bij beetje je commentaar quotjes weghalen tot je bij de vout komt!

Weest gegroet,
Guus
 
HI Guus,

Ik had aanvankelijk maar één ding aan staan.

Voeg cliënt toe in tabel tblClientgegevens
strTable = "tblClientgegevens"
strFieldName = "c_nr"

Set rst = dbs.OpenRecordset(strTable)
rst.AddNew
rst(strFieldName) = strNewData
rst.Update

Toen kreeg ik de foutmelding en was in de veronderstelling dat ik ook gelijktijdig andere parameters in andere tabellen moest vullen. Dus heb ik een aantal afhankelijke parameters toegevoegd. Ik kom er echter niet veerder mee. Ik denk dat ik een fundamentele denkfout maak in de manier waarop access omgaat met de gegevens en afhankelijkheden. Vermoedelijk iets kleins... (maar die dingen zijn vaak het lastigst).

Rob
 
Ik ben nu toch een stap verder. Ik had een fout in een variabelenaam waardoor een Null-waarde optrad. De data wordt toegevoegd in de tabel, maar ik krijg nu steeds de foutmelding dat er een dubbeling optreedt in de waarde (en dat is niet zo).

Private Sub c_nr_NotInList(strNewData As String, intResponse As Integer)
'Niet vergeten de eigenschap "alleen lijst" op "Ja" in te stellen
'Niet vergeten ActiveX Data Objects (ADO) bibliotheek te activeren
'Microsoft 3.x DAO Library aangevinkt

On Error GoTo ErrorHandler

Dim cbo As Access.ComboBox
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strTable As String
Dim strFieldName As String

intResponse = acDataErrContinue
Set dbs = CurrentDb()
Set cbo = Me![c_nr] 'Lijstnaam met invoervak

'Voeg cliënt toe in tabel tblClientgegevens
strTable = "tblClientgegevens"
strFieldName = "c_nr"

Set rst = dbs.OpenRecordset(strTable)
rst.AddNew
rst(strFieldName) = strNewData
rst.Update

intRespons = acDataErrAdded
rst.Close

ErrorHandlerExit:
cbo.Undo
Exit Sub

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

End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan