vergelijken of werknemer al op deze datum staat ingepland

Status
Niet open voor verdere reacties.

dinoshop

Terugkerende gebruiker
Lid geworden
8 sep 2000
Berichten
1.100
Code:
Private Sub Werknemer_BeforeUpdate(Cancel As Integer)
Dim strSQL As String

strSQL = "SELECT Werknemer,AanvG,datum FROM TblPlanning "
strSQL = strSQL & "WHERE werknemer = '" & Me.Werknemer & "' " & vbCrLf
strSQL = strSQL & "AND Aanvg = '" & Me.AanvG & "'" & vbCrLf
strSQL = strSQL & " And datum = #" & CDate(Me.Datum) & "# " & vbCrLf
Dim tmp
tmp = InputBox("", "", strSQL)


 With CurrentDb.OpenRecordset(strSQL) 
     If .RecordCount > 0 Then
          MsgBox "Dit record bestaat al"
     Else
          'het record opslaan
     End If
     
 

 End With
End Sub

dit is wat ik gebruik maar geeft steeds een fout aan wat staat er verkeerd?
SELECT Werknemer,AanvG,datum FROM TblPlanning WHERE werknemer = '6001'
AND Aanvg = '18:00:00'
And datum = #1-1-2015#

dit geeft die aan in de popup
volgens mij is dat goed.
 
with currentDB.openrecortset(strSQL) word geel aangegeven dus ?????
 
... kan hij de recordset niet uitlezen. Ik zou zeggen: vang 'm af in een Inputbox, maak een query aan zonder tabel, klik op de knop SQL en plak de gekopieerde code uit de inputbox. Als je de query uitvoert, zie je gelijk waar de fout zit.
 
heb ik gedaan en hierbij voorbeeld.
volgens deze gegevens zou goed moeten zijn .query SQL.jpg

dus wat gaat er wel fout?
 
En kun je deze query straffeloos uitvoeren? Krijg je dan de records die je wilt zien? (Mijn gok: nee)
 
Deze krijg ik perfect maar de melding msgbox die moet opkomen als de naam en datum en tijd idem zijn niet.
hij gaat voor naar VBA en geeft dus de fout zoals besproken weer.
 
Wat mij opvalt is dat je de datum als datum/tijd veld gebruikt, maar de tijd als tekst. Vreemd. Tijd is tenslotte ook een datum/tijd veld.
 
heb hem aangepast maar het blijft zelfde geven
wat mij opvalt als ik gebruik maak van uitlezen zie ik dus netjes alles staan datum tijd en werknemer,

strSQL = strSQL & "AND Aanvg = #" & CDate(Me.AanvG) & "#" & vbCrLf

is de aanpassing
dit deel wordt dus geel With CurrentDb.OpenRecordset(strSQL)
 
SELECT Werknemer,AanvG,datum FROM TblPlanning WHERE werknemer = '6001'
AND Aanvg = #12:00:00#
And datum = #28-2-2015#

zet ik deze nu in query /sql dan werk deze niet expressie fout
 
Laatst bewerkt:
Een recordset die geopend wordt heeft meestal geen recordcount, tenzij je ADO gebruikt met een specifieke instelling. Access weet dus nooit hoeveel records er inzitten. Dat niet alleen: als Access het aantal records niet weet, staat de standaard waarde op -1. En dat is kleiner dan 0. Ergo: omdat -1 kleiner is dan 0, wordt je msgbox nooit getoond. Je moet eerst naar het eind van de recordset om te zien hoeveel records er zijn.
Code:
With CurrentDb.OpenRecordset(strSQL) 
     .MoveLast
     If .RecordCount > 0 Then
 
ook deze geprobeerd maar geen resultaat.
blijf melden en in query geeft die fout aan .
ook als ik de strSql per lijn probeer dus 2 uit zet en er op 1 probeer.

is er misschien nog een mogelijkheid om dit op te lossen?
wat hij moet doen is denk ik wel duidelijk, kijken of de naam datum en tijd het zelfde zijn zo ja dan msgbox .
 
Nogmaals als je de complete SQL kopieert vanuit een inputbox en in een nieuwe query plakt, zie je dan de juiste records, of niet? Want als een procedure blijft hangen op de regel die de query opent, dan zit daar geheid een fout in. En dan kan de query ook niet werken. Zonder db kan ik ver verder ook niks zinnigs over zeggen.
 
das wat ik al zij hij geeft dan meteen een fout aan

fout 2.jpg
 

Bijlagen

  • fout query.jpg
    fout query.jpg
    85,1 KB · Weergaven: 74
Laatst bewerkt:
Tja, zonder de db kan ik toch echt niet zien wat er verkeerd gaat. Overigens (daar verbaasde ik me vanaf het eerste bericht al over) zou dit: WHERE werknemer = '6001' ook al fout kunnen zijn. Bij ons is 6001 een getal, en zou het veld werknemer dus numeriek zijn. En dat filter je dus niet zo, maar zo: WHERE werknemer = 6001
 
Octa
in het formulier staat gegevens en ook een combobox met daar in namen deze zie je terug maar beginnen met id bv 6001
als deze voorkomt en ook de tijd en datum zijn zelfde dan moet hij een msgbox openen.
anders geen actie .
dat is de insteek, krijgt alleen niet aan de praat .
heb je iets aan deze gegevens ???
 
Nee; ik wacht gewoon op een db, want dit begint erg veel op gokken te lijken, en dan krijgen we problemen met de Chinese goksyndicaten :).
 
Ook bang voor de Chinezen :D. Ik wacht rustig af; vanmiddag heb ik sowieso geen tijd, dus dat wordt vanavond.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan