Avatar billede k_n Nybegynder
04. oktober 2004 - 13:34 Der er 24 kommentarer og
1 løsning

List ledige tider ud fra dato i comboboks

I forbindelse med en tidsreservations db har jeg to combobokse.

Fra combo1 henter jeg datoen via datopicker fra combo2 vil jeg så gerne ha' listet de ledige tider.

Jeg har 2 tabeller:
Tblreservation: kunde_id, reservationsdato og tid_id

Der er 19 tider der kan reserveres og de findes i tabel 2:
Tbltid: tid_id og tid

Så forstiller jeg mig noget med at få listet de 19 mulige tid_id'er undtaget de tid_id'er der findes under tblreservation for den dato jeg valgte i combo1

Håber der er nogen der kan hjælpe mig.

PS. da både reservationsdato og tid_id i tblreservationer er nøglefelter, er det ikke muligt at lave dobbeltbooking, så derfor ville det allerbedste være, om det var muligt at liste alle 9 mulige tider, blot med den finesse at de reserverede tider stod med rødt, men det er sikkert ikke muligt i access.
Avatar billede jensen363 Forsker
04. oktober 2004 - 13:38 #1
Hvilke relationer er der imellem tabel 1 og tabel 2 ?
Avatar billede jensen363 Forsker
04. oktober 2004 - 13:48 #2
Benyt eventuelt denne i comboboks2

SELECT Tbltid.Tid_id, Tbltid.tid
FROM Tbltid LEFT JOIN Tblreservation ON Tbltid.Tid_id = Tblreservation.tid_id
WHERE (((Tblreservation.tid_id) Is Null));
Avatar billede jensen363 Forsker
04. oktober 2004 - 13:55 #3
Korrektion comboboks2 :

SELECT Tbltid.Tid_id, Tbltid.tid
FROM Tbltid LEFT JOIN Tblreservation ON Tbltid.Tid_id = Tblreservation.tid_id
WHERE (((Tblreservation.tid_id) Is Null)) OR (((Tblreservation.Reservationsdato)=[Formularer]![Tblreservation]![Reservationsdato]));

Det sidste ( rød/grøn ) kan vist ikke lade sig gøre i comboboksen
Avatar billede overchord Nybegynder
04. oktober 2004 - 14:21 #4
jeg ville evt gaa en lidt anden vej, som muligvis er langsommmer - men det kan da afproeves. Du ved at du har de 19 tids-slots for hver data saa du ved at du skal hae 19 raekker i comboen, og jeg vil foreslaa at du har 2 kolonner: tid og status, hvor status kan indikere en booking.

Saa din RowSource for combo'en er altid tiderne 1-19 i col(0), og status kan som udgangspunkt vaere blank indtil du klikker paa datoen i combo1 hvorefter du looper igennem de 19 tidspunkter:

For i = 1 to 19

if Dcount("tid_id", "TblReservation", "TblReservation.Dato = " & me.combo1.value & " AND TblReservation.tid_id = " & i) > 0 then

me.combo2.Column(2,i) = "Reserveret"

end if

next i

Ikke afproevet. Men med denne metode vil du f.eks ogsaa kunne tilfoeje kunde_id eller navn i comboen paa det tidspunkt hvor der er en reservation.
Avatar billede k_n Nybegynder
04. oktober 2004 - 21:53 #5
Har forsøgt mig frem og tilbage med Jensens forslag uden at kunne få det til at virke, men sikkert bare fordi jeg  er lidt tung i det. :)

Overchord > dit forslag lyder rigtig godt, især fordi jeg så evt. også ville kunne få navn med. Evt. måske bare erstatte reserveret med navn, og så på den måde se at det er reserveret... Desværre får  jeg en fejlmeddelse, når jeg sætter din kode ind og jeg har ikke meget (ingen) forstand på den slags.

Fejlmeddelsen lyder "compile erro: end if whitout blok if"
Avatar billede k_n Nybegynder
04. oktober 2004 - 22:01 #6
hov... overchord... Det var mig der ikke havde skrevet det korrekt.. nu kommer der ingen fejlmeddelse.. men det ser ikke ud til at køre som det skal og samtidig ser det ud til at jeg nu kan dobbeltbooke..
Avatar billede k_n Nybegynder
04. oktober 2004 - 22:15 #7
nu har jeg vist fundet det rigtige sted at indætte koden, men får en run-time error '2001' med teksten, "du har annuleret den forrige handling"
når jeg forsøger at vælge en tid.

min kode ser sådan ud:

Private Sub combo2_BeforeUpdate(Cancel As Integer)
For i = 1 To 19

If DCount("tid_id", "TblReservationer", "TblReservations.Dato = " & Me.combo1.Value & " AND TblReservationer.tid_id = " & i) > 0 Then
Me.combo2.Column(2, i) = "Reserveret"
End If
   

Next i
End Sub
Avatar billede overchord Nybegynder
05. oktober 2004 - 12:37 #8
proev at smide en me.combo2.requery ind lige foer end if og se om det hjaelper
Avatar billede overchord Nybegynder
05. oktober 2004 - 12:40 #9
Hvis det ikke virker helt som det skal kan vi altid "snyde" lidt og lave det som er vaerdi-liste istedet, hvor man looper igennem de 19 gange, men fremfor at opdatere hver enkelt gang smider vi det hele i en streng som saa bliver sat til rowsource for comboen.
Avatar billede k_n Nybegynder
05. oktober 2004 - 12:45 #10
har fået fjernet run time error uden me.combo2.requry.

og den lister også tiderne, men den skriver ikke noget ud for de tider der er reserveret.
Avatar billede overchord Nybegynder
05. oktober 2004 - 13:46 #11
Hvordan er din combo bundet til data lige nu?
Avatar billede k_n Nybegynder
05. oktober 2004 - 14:37 #12
Jeg er lidt på Herrens mark her, da det er 5-6 år siden jeg sidst legede med access.

Syntes jeg har forsøgt mig med alle mulige kombinationer.
Mener du hvilken kontrol elementkilde min combo2 har..?
det er tid_id i tbl_reservationer.
Rækkekilden (RowSource) har tbltid
Avatar billede overchord Nybegynder
05. oktober 2004 - 15:16 #13
ok, proev at skifte den ud med en liste med de 19 tal. Idet du altid har de 19 tids-slots vil det vaere det samme for hver dato der vises - eneste forskel er reservationerne i kolonner nummer to.
1. Skift kontrol elementkilde til en vaerdi liste/value list
2. I Raekkekilden skal der nu indskrives vaerdier skiftevis for kolonne 1 og kolonne 2 - som default vil reservationerne altid vaere tomme, saa vaerdilisten bliver "1"; "-"; "2"; "-" ...osv
3. Naar comboen er rettet til paa den maade kan vi arbejde lidt anerledes med den idet den kun indirekte er bundet til data naar du vaelger en dato i din combo1.

Saa i din combo1_click haendelse laegger du:

Private sub combo1_click()

dim ValList as string
dim Reservation(19) as string
dim i as integer

For i = 1 To 19
If DCount("tid_id", "TblReservationer", "TblReservations.Dato = " & Me.combo1.Value & " AND TblReservationer.tid_id = " & i) > 0 Then
reservation(i) = "Reservaeret"
else
Reservation(i) = "-"
End If
   
for i = 1 to 19
vallist = "'" & i & "'; '" & Reservations(i) & "'; "
Next i

vallist = left(vallist,len(vallist)-2)
me.combo2.rowsource = vallist
me.combo2.reuqery

end sub
Avatar billede k_n Nybegynder
05. oktober 2004 - 15:52 #14
du skriver:
1. Skift kontrol elementkilde til en vaerdi liste/value list

mener du ikke jeg skal sætte Rækkekildetype til værdiliste?
men hvad skal kontrol elementkilde så være
Avatar billede overchord Nybegynder
05. oktober 2004 - 16:26 #15
jo - det er netop det jeg mener - jeg arbejder selv med en engelsk version, saa nogle gange lidt svaert at gaette de danske navne :-)
Naar du saetter raekkekildetypen til en vaerdiliste skulle kontrol elemen-kilden autmatisk forsvinde, hvis ikke, saa slet hvad der staar i feltet
Princippet er at combo2 i sig selv ikke er bundet direkte til data idet det "kun" er en rapporteringsmekanisme. Istedet traekkes paa data fra combo1 og de eksisterende relationer.
Avatar billede k_n Nybegynder
05. oktober 2004 - 16:32 #16
Hvad med din først kode fra kommentar 04/10-2004 14:21:37
skal den så ikke være der længere?
Avatar billede k_n Nybegynder
05. oktober 2004 - 17:02 #17
Nu får jeg godt nok 2 kollonner, tid_id og den til visning af om tiden er reserveret, i sidstnævnte er der kun en streg, også ved de tider som skulle være reserveret.

Når jeg sletter kontrol elementkilden kan jeg heller ikke gemme.

Hulk! hulk!
Avatar billede overchord Nybegynder
05. oktober 2004 - 17:56 #18
hmm det lyder maerkeligt... Prev at oprette en ny combo-boks, hvor du ved guiden oprettelse vaelger selv at indskrive vaerdier fremfor at hente dem fra en tabel eller forespoergsel.
Den oprindelige kode er erstattet med den fra 05/10-2004 15:16:01
En ting som muligvis foraarsager fejlen ved Dcount er at det er et dato-format: proev at erstatte DCount udtrykket med:
DCount("tid_id", "TblReservationer", "TblReservations.Dato = #" & Me.combo1.Value & "# AND TblReservationer.tid_id = " & i)
Avatar billede k_n Nybegynder
05. oktober 2004 - 19:23 #19
Samme resultat desværre
Avatar billede overchord Nybegynder
06. oktober 2004 - 10:58 #20
Hvad staar der i kontrol element kilden?

Hvilken version af access arbejder du forresten i?
Jeg kan evt lave et eksempel og email til dig enten i Access 97 eller 2000
Avatar billede k_n Nybegynder
06. oktober 2004 - 11:54 #21
Jeg har prøvet både at lave det sådan at den gemmer det i hukommelsen (ingenting i kontrol element kilden)
og så den gemmer i tid_id

Jeg arbejder i access 2000

Du skal ha' mange tak for du gider bruge så meget tid på dette og når du får tid, må du også meget gerne sende en eksempel til mig.
Min email adr er: carlos@lite.dk
Avatar billede overchord Nybegynder
06. oktober 2004 - 13:01 #22
ok jeg laver et hurtigt eksempel i Access97 i frokostpausen, hvis der stadig er problemer kan jeg lave et acc2000 eksempel iaften naar jeg kommer hjem :-)
Avatar billede overchord Nybegynder
06. oktober 2004 - 13:50 #23
eksempel sendt.
Avatar billede k_n Nybegynder
06. oktober 2004 - 15:56 #24
Tusind tak

Den du sendte fungerer fint, så jeg må bare se om jeg kan få det til at virke på min egen. :)
Avatar billede overchord Nybegynder
06. oktober 2004 - 16:45 #25
ok, jeg haaber det kan bruges. Hvis du faar problemer, saa smid en besked herinde.
Til andre: Loesningen var baseret paa ovensteende eksempel fra 05/10-2004 15:16:01.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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