webForumDet fria alternativet

Jämföra flera fält

Databaser & SQL

8 svar · 197 visningar · startad av reka1

Medlem sedan sep. 2001650 inlägg
Frågan#1

Har lite problem med en sql-sats till ett bokningssystem.

sql = ("select * from bokningsinfo where starttid >= #" & starttid & "# and starttid <= #" & sluttid & "# or sluttid >= #" & starttid & "# and sluttid <= #" & sluttid &"# AND lokal = 'abc' AND bokdatum = #2003-12-12#")

Delen med start- & sluttider är ok. Det är delen med lokal, boknr och bokdatum som inte är helt 100, antar jag.

Om tex. lokalen abc med dess boknr är upptagen den 12/12-2003 kl 19:00 - 20:00 så generas en rapport att den redan är bokad.

Ändrar man datumet eller lokalen till något värde som är ledigt (te.x 2003-12-13. abd, etc), men bibehåller samma tidpunkter ges ändå "upptagetmeddelandet" trots att lokalen egentligen är ledig.

Oerhört tacksam för hjälp!

(Access används som databas)

Medlem sedan juni 200032 967 inlägg
#2

Du måste se till att gruppera dina villkor med parenteser om du har både and och or som villkor. And binder hårdast.

sql = ("select * from bokningsinfo where ((starttid >= #" & starttid & "# and starttid <= #" & sluttid & "#) or (sluttid >= #" & starttid & "# and sluttid <= #" & sluttid &"#)) AND lokal = 'abc' AND bokdatum = #2003-12-12#")

Det är i alla fall så jag tolkar att du vill ha villkoren.

Mvh,

Medlem sedan sep. 2001650 inlägg
#3

Tack för tips, men dessvärre så funkade det inte som jag ville.
Nu blev resultatet att det går att dubbelboka, dvs det är möjligt att boka kl 19:00 2 ggr samma dag.

Medlem sedan juni 200032 967 inlägg
#4

SQL-frågan ska alltså returnera något om det är upptaget och inte tillgängligt för bokning?

*tänker igen*

Medlem sedan juni 200032 967 inlägg
#5

Hmm, om den delen med start- och sluttider fungerar för sig, då borde det väl fungera att bara sätta en parentes runt den delen?

sql = ("select * from bokningsinfo where (starttid >= #" & starttid & "# and starttid <= #" & sluttid & "# or sluttid >= #" & starttid & "# and sluttid <= #" & sluttid &"#) AND lokal = 'abc' AND bokdatum = #2003-12-12#")

(under förutsättning att fältet bokdatum inte lagrar mer än själva datumet.)

Mvh

Medlem sedan sep. 2001650 inlägg
#6

Japp, sql-frågan fungerar ihop med en loop. Ifall ingen träff uppstår och sista posten nås så är alltså lokalen ledig, ifall det blir en träff på de inmatade fälten så är då lokalen redan upptagen.

Har redan provat att ändra paranteserna efter ditt förslag men det blir samma resultat - dubbelbokning.

Medlem sedan juni 200032 967 inlägg
#7

Starttid och sluttid, är det enbart tidvärden? bokdatum i tabellen, är det enbart ett datumvärde?

Hur ser den färdiga SQL-frågan ut?

Medlem sedan sep. 2001650 inlägg
#8

Nej, vänta förresten. Nu fungerar visst ditt förslag :)
Massor med tack för bra och snabb hjälp, @anders

Medlem sedan juni 200032 967 inlägg
#9

Jippi! Kul att det löste sig! :)

Hä' bar' å tack, å bju' igen.

Mvh,

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