Onderstaand heb ik twee procedures geschreven welke het zelfde doen: een primaire sleutel uit een brontabel zoeken en deze samen met een waarde uit het formulier in een andere brontabel plaatsen. De brontabel waarin de gegevens worden geplaatst heeft een unieke index van deze twee velden (dus een combinatie van deze twee velden mag maar één keer voorkomen). De codes werken. Echter zou ik een van deze codes graag vereenvoudigen en deze als definitief gaan toepassen op meerdere plekken in de database. Als iemand mij een suggestie kan doen, of een eerste aanzet kan doen, dan hoor ik graag. Ik ziet het even niet meer
Code 1:
Code 2:
Code 1:
Code:
Private Sub cboFabrikanttypeID_DblClick(Cancel As Integer)
End Sub
On Error GoTo ErrorHandler
'Doel gekozen fabrikanttypeID uit werktabel toevoegen aan brontabel waarbij fabrikanttypeID samen
'met een ander veld een unieke index vormen
'Controleren of in de combo's een geldige waarde uit de lijst gekozen is
If Me.cboObjecttypeID.ListIndex >= 0 And Me.cboFabrikanttypeID >= 0 Then
'Bepalen of FabrikanttypeID al in brontabel aanwezig is tezamen met veld welke samen een index vormen
'met unieke waarden
If DCount("FabrikanttypeID", "tblSD_Fabrikanttype", _
"SD_ID = " & DLookup("SD_ID", "tblSD", "SpanningID = " & Me.Parent!cboSpanningID _
& " And VariantID = " & Me.Parent!cboVariantID _
& " And ObjecttypeID = " & Me.cboObjecttypeID) _
& " And FabrikanttypeID = " & Me.cboFabrikanttypeID & "") = 0 Then
strTitle = "Bronbestand"
strPrompt = "Fabrikanttype " & Me.cboFabrikanttypeID.Column(1) & " " & "toevoegen aan standaard?"
intReturn = MsgBox(Prompt:=strPrompt, _
buttons:=vbQuestion + vbYesNo, _
Title:=strTitle)
If intReturn = vbYes Then
DoCmd.SetWarnings False
strSQL = "INSERT INTO tblSD_Fabrikanttype (SD_ID, FabrikanttypeID) " _
& "SELECT SD_ID, " & Me.FabrikanttypeID & " FROM tblSD " _
& "WHERE (((tblSD.ObjecttypeID)= " & Me.cboObjecttypeID & ") " _
& "AND ((tblSD.SpanningID)=" & Me.Parent!cboSpanningID & ") " _
& "AND ((tblSD.VariantID)= " & Me.Parent!cboVariantID & "));"
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
End If
Else
strTitle = "Bronbestand"
strPrompt = "Fabrikanttype " & Me.cboFabrikanttypeID.Column(1) & " " & "bestaat al"
intReturn = MsgBox(Prompt:=strPrompt, _
buttons:=vbOKOnly, _
Title:=strTitle)
End If
End If
ErrorHandlerExit:
DoCmd.SetWarnings True
Exit Sub
ErrorHandler:
MsgBox "Error No: " & Err.Number & "; Description: " & _
Err.Description
Resume ErrorHandlerExit
End Sub
Code 2:
Code:
Private Sub cboFabrikanttypeID_DblClick(Cancel As Integer)
On Error GoTo ErrorHandler
'Doel gekozen fabrikanttypeID uit werktabel toevoegen aan brontabel waarbij fabrikanttypeID samen
'met een ander veld een unieke index vormen
'Controleren of in de combo's een geldige waarde uit de lijst gekozen is
If Me.cboObjecttypeID.ListIndex >= 0 And Me.cboFabrikanttypeID >= 0 Then
strTitle = "Bronbestand"
strPrompt = "Fabrikanttype " & Me.cboFabrikanttypeID.Column(1) & " " & "toevoegen aan standaard?"
intReturn = MsgBox(Prompt:=strPrompt, _
buttons:=vbQuestion + vbYesNo, _
Title:=strTitle)
If intReturn = vbYes Then
'Opzoeken SD_ID op basis van gegevens in hoofd/subformulier
strSQL = "SELECT tblSD.SD_ID, tblSD.ObjecttypeID, tblSD.SpanningID, tblSD.VariantID " _
& "FROM tblSD " _
& "WHERE (((tblSD.ObjecttypeID)= " & Me.cboObjecttypeID & ") " _
& "AND ((tblSD.SpanningID)=" & Me.Parent!cboSpanningID & ") " _
& "AND ((tblSD.VariantID)= " & Me.Parent!cboVariantID & "));"
Set rst = CurrentDb.OpenRecordset(strSQL)
With rst
If .RecordCount > 0 Then
lngID = ![SD_ID]
End If
.Close
End With
Set rst = CurrentDb.OpenRecordset("SELECT * FROM tblSD_Fabrikanttype")
With rst
If .RecordCount > 0 Then
.AddNew
![SD_ID] = lngID
![FabrikanttypeID] = Me.cboFabrikanttypeID
.Update
End If
.Close
End With
End If
End If
ErrorHandlerExit:
Exit Sub
ErrorHandler:
'Indien FabrikanttypeID samen met het andere veld al aanwezig is dan foutmelding afhandeling
If Err = 3022 Then
strTitle = "Bestaat al"
strPrompt = "Fabrikanttype " & Me.cboFabrikanttypeID.Column(1) & "" _
& " bestaat al in standaard"
MsgBox Prompt:=strPrompt, _
buttons:=vbInformation + vbOKOnly, _
Title:=strTitle
Resume ErrorHandlerExit
Else
MsgBox "Error No: " & Err.Number & "; Description: " & _
Err.Description
Resume ErrorHandlerExit
End If
End Sub