webForumDet fria alternativet

Access 07: Between A och B

Databaser & SQL

3 svar · 468 visningar · startad av Mattias Nordin

Medlem sedan dec. 20051 056 inlägg
Frågan#1

Hej, jag behöver hjälp att förstå hur följande fråga fungerar. Jag använder koden nedan för att testa om bokningar redan finns i bokningsregistret...

sql =  "SELECT booking_id FROM T_bokad_av_användare "	      &_
" WHERE (#" &sFromDate &"# BETWEEN bokad_start AND bokad_slut "   &_
" OR #" &sToDate  &"# BETWEEN bokad_start AND bokad_slut "	      &_
" OR (#" &sFromDate &"# <= (SELECT Min(bokad_start) FROM T_bokad_av_användare) "	&_
" AND #" &sToDate  &"# >= (SELECT Max(bokad_slut) FROM T_bokad_av_användare)) "	&_
" ) AND produkt_id = " &sProductDbId

Jag fick hjälp att skriva den för några år sedan. Vill nu försöka pimpa upp den då jag inser att den gör en sak fel.

Om vi antar att följande bokningar finns sedan tidigare:

A 08:00 - 09:00

C 11:00 - 15:00

Och jag försöker sedan lägga till ytterligare en bokning mellan 09:00 - 10:00 så får jag en konflikt med A, vilket är något jag vill tillåta (bokningar bör få starta på samma minut).

Bokning med start 09:01 fungerar naturligtvis men användarna skriver alltid 09:00.

Tackasam för hjälp med att förstå Between syntaxen. :stud

Medlem sedan juli 200012 978 inlägg
#2

Om du lägger till en minut på bokad_start och minskar med en minut på bokad_slut så bör du klara dig Eller acceptera lika med, Equal too

Medlem sedan dec. 20051 056 inlägg
#3

Jag var inne på hur man får frågan att acceptera equal... men nu när du nämner det så är kanske det enklaste sättet det bästa. Lägger jag på sFromDate = DateAdd("N", 1, sFromDate) på startdatumet så fungerar det ju i princip alltid.

Alternativt så lägger jag bara på +1 på kontrollen som kontrollerar om bokning redan finns... får suga på det ett tag.

Tack Larsp för att hjälpa mig hitta stigen igen.

Medlem sedan juni 200032 967 inlägg
#4

Jag tycker att det låter som en bra idé att lägga på en minut. :-)

Men nu står jag faktiskt inte ut längre: Mattias, Lasp heter Lasp, och inte Larsp. :)

258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)