Avatar billede wilweb Nybegynder
19. oktober 2003 - 00:22 Der er 8 kommentarer og
1 løsning

Udtræk fra 3 tabeller (forsat fra. 414069)

Jeg er ved at lave ET BOOKING STSTEM med 3 tabeller i en Access2000 database!

Tabel1 = tbl_aabningstider
Tabel2 = tbl_kalender
Tabel3 = tbl_bookingitem

tbl_aabningstider indeholder:
aaID    - aaOnoff     - aaKlokken
1    - 1        - 0030
2    - 1        - 0100
3    - 1        - 0130
4    - 1        - 0200
5    - 1        - 0230   
osv.
47    - 1        - 2330
48    - 1        - 0000

tbl_kalender indeholder:
kID     - kDato     - kUserid    - bID        - aaID
1      16-11-2003      10          1          3
2      16-11-2003      10          1          4
3      16-11-2003      3          2          2
4      16-11-2003      10          1          48
5      21-11-2003      4          4          2
osv.

tbl_bookingitem indeholder:
bID        - bItem
1        - Naja
2        - Kim
3        - Ole
4        - Hans
5        - Kirsten

Nu vil jeg gerne lave to sql forespørgelser:

En der udskriver alle aaKlokken D. 16-11-2003, hvor aaOnoff er = 1 og hvor bID = 1:
0030
0100 Naja
0130 Naja
0200
osv.
osv.
2330
0000 Naja

og så en forespørgelse der finder

0030
0100 Naja + kim + Hans
0130 Naja
0200
osv.
osv.
2330
0000 Naja

Det er altså en hvor jeg vil se hele dagen ud (båder der hvor der er booket tid og der hvor der ikke er) ud fra hviken bID (behandler) 
Det er altså en hvor jeg vil se hele dagen ud (båder der hvor der er booket tid og der hvor der ikke er) alle bID (behandler) 

Det er et spørgsmål forsat fra http://www.eksperten.dk/spm/414069

Håber på hjælp sor jeg er kørt helt fast.
:> Gizom
Avatar billede tfa_dk Nybegynder
19. oktober 2003 - 01:04 #1
Her kommer den første:

SELECT tbl_aabningstider.aaKlokken, tbl_bookingitem.bItem
FROM tbl_bookingitem RIGHT JOIN (tbl_kalender RIGHT JOIN tbl_aabningstider ON tbl_kalender.aaID = tbl_aabningstider.aaID) ON tbl_bookingitem.bID = tbl_kalender.bID
WHERE (((tbl_kalender.kDato)=#11/16/2003#) AND ((tbl_aabningstider.aaOnoff)=On)) OR (((tbl_kalender.kDato) Is Null) AND ((tbl_aabningstider.aaOnoff)=On));

Til den anden skal der bruges en pivottabel og det kan jeg ikke lige huske, så den kommer først senere.
Avatar billede tfa_dk Nybegynder
19. oktober 2003 - 01:46 #2
Der er nogle problemer / valg i den anden forespørgsel.
1a: Du ved ikke hvor mange kolonner der kommer retur fra forespørgslen, der vil komme en for hver bItem der er brugt.
1b: Der vil komme blanke felter / værdier der hvor der ikke er angivet et bItem eller de steder et bItem ikke bliver brugt hvis det bruges et andet sted.

2: Hvis din kode kan afvikle forespørgsler med vb funktioner kan du lave en funktion der returnerer bItems for en dato + aaID og så returnere det som en string. Så er der kun 2 kolonner.

3: Lav funktionen beskrevet i 2: i din egen kode baseret på en simpel forespørgsel der løbes igennem i koden.

Forespørgsel: qKlokken er forespørgslen fra mit første svar tilføjet bID

TRANSFORM First(qKlokken.bItem) AS FørsteOfbItem
SELECT qKlokken.aaKlokken
FROM qKlokken
GROUP BY qKlokken.aaKlokken
PIVOT qKlokken.bID;


Ps. Svar et mangler en betingelse på (bID=1) og (tbl_aabningstider.aaOnoff)=On) kan flyttes a.h.t. performance.

qKlokken:
SELECT tbl_aabningstider.aaKlokken, tbl_bookingitem.bItem, tbl_bookingitem.bID
FROM tbl_bookingitem RIGHT JOIN (tbl_kalender RIGHT JOIN tbl_aabningstider ON tbl_kalender.aaID = tbl_aabningstider.aaID) ON tbl_bookingitem.bID = tbl_kalender.bID
WHERE ((tbl_aabningstider.aaOnoff=On) AND (((tbl_bookingitem.bID=1) AND (tbl_kalender.kDato=#11/16/2003#)) OR (tbl_bookingitem.bID  Is Null)));
Avatar billede wilweb Nybegynder
19. oktober 2003 - 08:10 #3
WOW! jeg går straks i gang med at se på det.
Avatar billede wilweb Nybegynder
19. oktober 2003 - 09:14 #4
Æv, jeg gør et eller andet forkert!

Fejltype:
Microsoft JET Database Engine (0x80004005)
Datatyper i JOIN-udtrykket stemmer ikke overens.
/booking/_dagoversigt.asp, line 16

Det jeg har lavet om er at sætte en session("Dato") ind i strSQL i stedet for den hard-kodet 11/16/2003

strSQL="SELECT tbl_aabningstider.aaKlokken, tbl_bookingitem.bItem FROM tbl_bookingitem RIGHT JOIN (tbl_kalender RIGHT JOIN tbl_aabningstider ON tbl_kalender.aaID = tbl_aabningstider.aaID) ON tbl_bookingitem.bID = tbl_kalender.bID WHERE (((tbl_kalender.kDato)=#" & session("Dato") & "#) AND ((tbl_aabningstider.aaOnoff)=On)) OR (((tbl_kalender.kDato) Is Null) AND ((tbl_aabningstider.aaOnoff)=On));"

linje 16:
Set rs = Conn.Execute(strSQL)
Avatar billede wilweb Nybegynder
19. oktober 2003 - 09:23 #5
Det var vist noget med us/dk dato format, satte session.LCID=1033

men så kommer der et problem med at udskrive resultatet i:
Fejltype:
Microsoft VBScript runtime (0x800A01A8)
Object required: ''
/booking/_dagoversigt.asp, line 33

linje 33 er den første herunder:
    Do While Not rs.EOF
        Response.write "<tr><td class='text2' width='50' align='Center'>" & rs("aaKlokken") & "</td><td class='text1'>" & rs("bItem") & "</td></tr>"
    rs.MoveNext
    Loop
Avatar billede wilweb Nybegynder
19. oktober 2003 - 10:17 #6
tfa_dk :> det er nogle flotte svar du har givet mig, men jeg må indrømme at jeg ikke helt har styr på hvordan jeg skal give mig i kast med det, for lige meget hvordan jeg har prøvet så får jeg fejl. Det skal du naturligvis ikke lide under, så giv mig lige et svar så du kan få dine velfortjente point.

Det jeg prøvede på var, at jeg se hvor der var tider optaget på en given dag og med en valgt behandler. Var der ingen tider reserverede den dag skulle der bare være et tomt skema med åbningstiden. (Nr. 2 var så det samme som Nr. bare med alle behandlere på).

Jeg fornemmer på dit svar at min database ikke helt er struktureret til opgaven, så måske skulle jeg starte med at spørge om hvordan en database burde se ud, men det er jo en anden boldgade!
Avatar billede tfa_dk Nybegynder
19. oktober 2003 - 10:49 #7
Jeg mener ikke der er noget i vejen med din løsning, bortset fra at der ikke kan oprettes aftaler uden for de fast definerede tidspunkter.

Jeg har lavet begge forespørgsler i en Access database og så skiftet til SQL visning. Jeg har nu læst dit oprindelige spørgsmål og kan se du bruger det til noget web noget og det er ikke mit område. Kan du ikke bruge Access forespørgsler direkte i din kode i stedet for alle disse komplekse SQL sætninger? Jeg kan e-maile mit eksempel til dig hvis det kan bringe dig videre.

Hvis du kan bruge Access forespørgsler i din koden bliver den meget lettere at vedligeholde da du kan rette i de underlæggende tabeller uden at skulle rette ret meget / tit i web koden.
Avatar billede tfa_dk Nybegynder
19. oktober 2003 - 10:57 #8
Fejl i linie 33:
Response.write "<tr><td class='text2' width='50' align='Center'>" & rs("aaKlokken") & "</td><td class='text1'>" & rs("bItem") & "</td></tr>"
mangler du ikke tabelnavn i udtrykket rs("aaKlokken") det står der i alle de andre?
Avatar billede wilweb Nybegynder
19. oktober 2003 - 11:48 #9
Nej det har du ret i men de fast definerede tidspunkter kan jo sættes til on/off og hvis admin vælger at sætte alle i on position skulle der kunne defineres aftaler hver halve time hele døgnet.

Ups det har du også ret i tbl_aabningstider.aaKlokken osv..

Du må meget gerne sende en email med dit eksempel til willi@gizom.com
Takker endnu en gang..
Gizom:>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester