Uiteraard geen probleem...
Hier een (heel simpel...) voorbeeldje hoe je het zou kunnen doen.
Op een formulier staat een knop Opslaan. Daar hang je deze gebeurtenis achter:
Code:
Private Sub Opslaan_Click()
With CurrentDb.OpenRecordset("SELECT PersoneelNr, Achternaam FROM tblTabel " _
& "WHERE (PersoneelNr = " & Me.cboPersNr & " AND Achternaam = '" & Me.txtAchternaam & "')")
' Eerst controleren of het record al bestaat...
If .RecordCount = 0 Then
iCheck = MsgBox("Wil je opslaan?", vbYesNoCancel)
If iCheck = 6 Then
'Hier een actie voor opslaan, bijvoorbeeld:
strSQL = "INSERT INTO tblTabel " _
& "( PersoneelNr, Achternaam)" & vbCrLf
strSQL = strSQL & "VALUES (" & Me.cboPersNr & ", '" & Me.txtAchternaam & "')"
DoCmd.RunSQL (strSQL)
ElseIf iCheck = 7 Then
'Hier een actie voor niet opslaan, bijvoorbeeld formulier sluiten
DoCmd.Close acForm, Me.Form.Name
Else
'Niks doen, op het formulier blijven...
End If
End If
.Close
End With
End Sub
In de regel
With CurrentDb.OpenRecordset wordt de tabel met de te controleren waarden geopend. Ik heb in het voorbeeld twee varianten gebruikt: een numeriek veld (PersoneelNr) en een tekstveld (Achternaam). De Where clausule is namelijk verschillend voor de twee.
De opdracht opent dus de tabel, met een filtering op de twee velden die je wilt controleren.
Als een record al bestaat, is de Recordcount groter dan nul. Er is namelijk minstens één record gevonden. (zou overigens niet mogen, hooguit eentje...)
Als de RecordCount dus nul is, bestaat het record niet.
Dan wordt er een SQL string opgebouwd, die alle velden die je wilt opslaan bevat (achter de INSERT INTO tblTabel) , en vervolgens alle waarden die zijn ingevuld van het formulier gebruikt (VALUES (" & Me.cboPersNr & ", '" & Me.txtAchternaam & "')) in het voorbeeld.
Ook hier weer: een numeriek veld doe je anders als een tekstveld.
Vervolgens wordt de query uitgevoerd, en het record dus toegevoegd.
Als je twee keer op de knop drukt, zou het record de tweede keer dus niet mogen worden toegevoegd, omdat de Recordcount dan 1 is.
Kun je hier wat mee?