VBA stukje op weg

Status
Niet open voor verdere reacties.

Gruytkluit

Gebruiker
Lid geworden
13 aug 2009
Berichten
24
Beste mensen,

Ik heb momenteel een database met een paar tabellen. Tijdens het toevoegen van een Record wil ik controleren of dat nummer nog open staat in de tabel. Middels een formulier wil ik een record toevoegen.

De tabel heeft de volgende velden:
PersoneelID; AanwezigheidStart; AanwezigheidEind; Opmerking

Het formulier heet frmInklokken met het veld Pnummer (onafhankelijk object)

Zodra ik de waarde in Pnummer invoer wil ik dat het systeem gaat kijken of de persoon al ingeklokt staat. Dat is het geval indien PersoneelsID gelijk is aan Pnummer EN als AanwezigheidEind leeg is

Ik heb een stukje code aangepast, maar weet niet hoe ik het volgende erin krijg:

Code:
strSQL = strSQL & "WHERE ([AanwezigheidEind] Is Null);"
hier moet nog iets met Pnummer en PesoneelsID gebeuren

Als het waar is moet de Query qryInklokken uitgevoerd worden. Weet niet of onderstaande regels goed zijn?
Code:
Dim stDocName As String
    stDocName = "qryInklokken"
    DoCmd.OpenQuery stDocName, acNormal, acEdit

Hieronder de nog niet werkende code.:o Hopelijk kan iemand mij helpen???

Code:
Private Sub Pnummer_AfterUpdate()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strTabel As String
Dim strSQL As String
'check aanwezigheid'
    strTabel = "[tlbAanwezigheid]"
    strSQL = "SELECT [PersoneelsID], [AanwezigheidStart], [AanwezigheidEind]" & vbCrLf
    strSQL = strSQL & "FROM " & strTabel & " " & vbCrLf
    strSQL = strSQL & "WHERE ([AanwezigheidEind] Is Null);"   
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(strSQL)
    
If rst.RecordCount = 0 Then
    Dim stDocName As String
    stDocName = "qryInklokken"
    DoCmd.OpenQuery stDocName, acNormal, acEdit

Else
End If
MsgBox "U heeft zich al aangemeld...", vbOK
    rst.Close
    Set rst = Nothing
    dbs.Close
    Set dbs = Nothing
DoCmd.Close
End Sub
 
Je filter om te checken ontbeert inderdaad nog de component PersoneelID. Je kunt alles zonder extra query doen:

Code:
Private Sub PNummer_AfterUpdate()
Dim strTabel As String
Dim strSQL As String

    strSQL = "SELECT [PersoneelsID], [AanwezigheidStart], [AanwezigheidEind], Opmerking FROM tlbAanwezigheid " & vbCrLf
    strSQL = strSQL & "WHERE ([PersoneelsID]=" & Me.PNummer & " AND [AanwezigheidEind] Is Null);"
    
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount = 0 Then
            .AddNew
            .Fields("PersoneelID") = Me.PNummer
            .Fields("AanwezigheidStart") = Me.Aanwezigheidstart
            .Fields("AanwezigheidEind") = Me.AanwezigheidEind
            .Fields("Opmerking") = Me.Opmerking
            .Update
            .Close
        Else
            MsgBox "U heeft zich al aangemeld...", vbOK
        End If
    End With
        
End Sub
 
Krijg het nog niet aan de praat.

In het formulier waar de check uitgevoerd wordt moeten indien leeg alleen de velden Personeelsnummer en AanwezigheidStart gevuld worden.
Personeelsnummer met Me.Pnummer en AanwezigheidStart met Now()

Ik dacht dat eenvoudig met een vulQuery te doen. Onderstaande code geeft nu de foutmelding op "Gegevenstypen komen niet overeen in criteriumexpressie"

Ik heb een lege DB bijgevoegd.....

Code:
Private Sub PNummer_AfterUpdate()
Dim strTabel As String
Dim strSQL As String

    strSQL = "SELECT [PersoneelsID], [AanwezigheidStart], [AanwezigheidEind], Opmerking FROM tlbAanwezigheid " & vbCrLf
    strSQL = strSQL & "WHERE ([PersoneelsID]=" & Me.Pnummer & " AND [AanwezigheidEind] Is Null);"
    
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount = 0 Then

        Dim stDocName As String
        stDocName = "qryInklokken"
        DoCmd.OpenQuery stDocName, acNormal, acEdit

        Else
        MsgBox "U heeft zich al aangemeld...", vbOK
    End If
    End With

End Sub

Alvast bedankt voor de hulpBekijk bijlage final_version.zip
 
Je wekt de indruk dat je PersneelsID een getal is, maar dat is het niet, het is een tekstveld. (je zult daar wel een reden voor hebben...) Dan moet je ook filteren met een tekststring:
Code:
    strSQL = strSQL & "WHERE ([PersoneelsID]='" & Me.Pnummer & "' AND [AanwezigheidEind] Is Null)"
 
Hallo Michel

Super die hulp. Het werkt:thumb: kan ik weer lekker doorklussen

:)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan