Dubbele gegevens negeren

Status
Niet open voor verdere reacties.

JeroenMioch

Gebruiker
Lid geworden
1 dec 2007
Berichten
215
Ik voer gegevens uit drie velden in met een knop. Namelijk Datum, kenteken, en Reden. Wat ik wil is dat als Datum en kenteken overeenkomen access de invoer van de gegevens in de tabel (TBLwaarschuwingen) negeert.

Weet iemand hier de code voor ?
 
Ik hoop dat je in die tabel ook een sleutelveld hebt, bijvoorbeeld een ID veld. Dit veld kun je gebruiken om m.b.v. een subquery de records uit te sluiten die er al inzitten. Hoe je die controle uitvoert hangt een beetje af van de methodiek die je gebruikt om de records toe te voegen. Doe je dat op een formulier waarop de gebruiker een datum en kenteken invult, dan gebruik je die gegevens in de subquery. Maar je kunt ook parameters maken, al is dat wat onhandiger in het gebruik. Maar je moet op de een of andere manier wel een vergelijking kunnen maken tussen de ingevoerde gegevens, en de in te voeren gegevens.
 
Hey Michel !

Ja mijn gebruikers maken gebruik van een formulier om de gegevens in te voeren.
De tabel heeft ook inderdaad een ID veld, al is die voor de gebruiker niet zichtbaar.
Datum word automatisch gegenereerd, Het kenteken en de reden van waarschuwen word ingevuld door de gebruiker.

Dit is de code voor de knop :

Code:
Private Sub Knop182_Click()
On Error GoTo Err_Knop182_Click

With CurrentDb.OpenRecordset("SELECT * FROM TBLwaarschuwingen")
        .AddNew
        ![Datum2] = Date
        !Kenteken2 = Me.FilterKenteken
        !reden = Me.[keuzelijst met invoervak10]
        !PNummer = Me.PNummer
        .Update
        .Close
    End With
    
    DoCmd.GoToRecord , , acNewRec
    
    FilterKenteken = ""
    [keuzelijst met invoervak10] = ""
    
Exit_Knop182_Click:
    Exit Sub

Err_Knop182_Click:
    MsgBox "Kenteken é®*reden van waarschuwen moeten ingevuld zijn, record is niet opgeslagen", vbInformation, "Attentie !"
    Resume Exit_Knop182_Click
    
End Sub
Dus zoiets als If [datum2] & [kenteken2] = [datum2] & [kenteken2] then exit sub
Ik weet dat dit niet de manier is, maar zoiets dus ..
 
Laatst bewerkt door een moderator:
Je legt de controle op de verkeerde plek; daar moet je namelijk mee beginnen. Dus zoiets:
Code:
Dim strSQL As String
    strSQL = "SELECT * FROM TBLwaarschuwingen " _
        & "WHERE (Cdbl([Datum2]) =" & CDbl(Me.Datum2) _
        & " AND [Kenteken2] = '" & Me.Kenteken2 & "')"
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount = 0 Then
            With CurrentDb.OpenRecordset("tblWaarschuwingen")
                .AddNew
                ![Datum2] = Date
                ![Kenteken2] = Me.Kenteken2
                !reden = Me.reden
                !PNummer = Me.PNummer
                .Update
                .Close
            End With
        Else
            MsgBox "Dit record bestaat al...", vbOKOnly
            Exit Sub
        End If
        .Close
    End With
    Me.Form.Requery
    DoCmd.GoToRecord , , acNewRec

Overigens: kun je code opmaken met de codetag (knop #)?
 
Michel, bedankt ik ga er mee aan de slag. Kijken of het nu wel lukt.

Oh en Huijb, geen idee wat je bedoelt, en de manier waarop je jezelf duidelijk wil maken is op een schoolmeester uit de jaren 70 manier. Misschien is het handig als je gewoon verteld wat het probleem is ?
 
Laatst bewerkt:
Misschien het verstandig om de link, die ik je al twee keer heb gegeven en waarvan je de eerste opmerkte dat je wist waarom het ging, doorleest.
 
Michel ik krijg een foutmelding :

"kan de Methode of gegevenslid niet vinden"

bij regel :

Code:
& "WHERE (Cdbl([Datum2]) =" & CDbl(Me.Datum2) _

Ik heb al zitten kijken of er misschien iets ontbreekt, maar ik kan het helaas niet ontdekken
 
Ik heb je db niet, dus ik ging er maar even voor het gemak vanuit dat je een tekstvak Datum2 hebt. Als dat bij jou anders is, moet je de naam uiteraard veranderen. Of de code veranderen naar CDbl(Me!Datum2). Kan ook nog helpen.
 
Hey Michel,

Ik probeer echt van alles maar het wil gewoon niet lukken.
Wat me opvalt is dat de eerste CDbl al niet in "blauw" word weergegeven, zoals de tweede.
Ik heb inderdaad in TBLwaarschuwingen een rij waar de datum word bewaard, deze heet Datum2. Waarop gecontroleerd moet worden is of de datum van vandaag hetzelfde is als de waarde van die datum2 (tesamen met het kanteken natuurlijk)

De waarde van het kenteken haal ik uit het tekstvak FilterKenteken op mijn formulier Parkeerbeheer, Waarbij deze dus overgenomen moet worden door het veld Kenteken2 uit TBLwaarschuwingen tenzij de waarde van de datum en het kenteken dus overeenkomen met al een record.

Na een paar kleine aanpassingen ziet de code er nu zo uit :

Code:
Private Sub Knop182_Click()
Dim strSQL As String
    strSQL = "SELECT * FROM TBLwaarschuwingen" _
        & "WHERE (CDbl([Datum2]) =" & CDbl(Datum) _
        & " AND [Kenteken2] = '" & Me.FilterKenteken & "')"
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount = 0 Then
            With CurrentDb.OpenRecordset("tblWaarschuwingen")
                .AddNew
                ![Datum2] = Date
                ![Kenteken2] = Me.FilterKenteken
                !reden = Me.[keuzelijst met invoervak10]
                !PNummer = Me.PNummer
                .Update
                .Close
            End With
        Else
            MsgBox "Dit record bestaat al...", vbOKOnly
            Exit Sub
        End If
        .Close
    End With
    Me.Form.Requery
    DoCmd.GoToRecord , , acNewRec
End Sub

Echt jammer dat ik mn database niet mee kan zenden, zou het een stuk makkelijker maken, maarja.
Ik zit echt mn hoofd te breken waarom het niet wil lukken
 
Probeer eerst dit eens:

Code:
Dim strSQL As String
    strSQL = "SELECT * FROM TBLwaarschuwingen" _
        & "WHERE (CDbl([Datum2]) =" & CDbl(Datum) _
        & " AND [Kenteken2] = '" & Me.FilterKenteken & "')"
Dim tmp
tmp = InputBox("", "", strSQL)
De code die je in de inputbox krijgt kopieer je, en daar maak je een nieuwe query van. (Nieuwe query maken, geen tabel selecteren en op de knop SQL klikken. Vervolgens de code plakken).
Als de query werkt, is dat in ieder geval ok, geeft hij al een foutmelding, dan moet je proberen de query alsnog werkend te krijgen, door de fout er uit te halen (obviously...)
Van de (dan) werkende query maak je een nieuw SQL commando voor de VBA string, zodat hij de volgende keer wel werkt.
Het klopt overigens dat de code WHERE (CDbl([Datum2]) niet blauw is; deze CDbl wordt in de query uitgevoerd, en niet in VBA.
 
Laatst bewerkt:
Hey Michel,

Ik heb hem maar even naar je mail gestuurd via mn Tele2 account (onderwerp : parkeer database). ik hoop dat je er even naar wil kijken
Laat me even weten of ie goed is aangekomen, Hotmail wilde de bijlage niet versturen, hopelijk Tele2 wel.

Met vriendelijke groet :

Jeroen Mioch
 
Hey Michel,

Ik had het bestand vorige week gestuurd, (hernoemd naar .txt) heb je hem nog ontvangen ?

Groeten : Jeroen
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan