Avatar billede maria.cand Nybegynder
31. marts 2003 - 23:05 Der er 28 kommentarer og
1 løsning

Kalender

Jeg er ret ny i faget med både Access og VBA! Og derfor mangler jeg alså lidt hjælp til at oprette en kalender. Jeg har allerede i en tom formular oprettet Access´s egne kalender objekt. Men nu vil jeg gerne have koblet denne kalender til en tabel, hvor den gemmer oplysniger på de given datoer. Endvidere vil jeg gerne gøre det muligt at skrive i de enkelte dato felter i kalender f.eks. Fra 10-12 besøge Louise. Og dermed gemme denne note også i tablen..Det er vigtigt for mig det skæres ud i pap.. Er økonom og dermed ikke programør haj;-) - 1000 tak for hjælpen!!
Avatar billede mortrr Praktikant
01. april 2003 - 00:24 #1
Du behøver da ikke være flov over at være økonom.

Allerførst:
Kalender objektet er "bare" en nemmere måde at finde en dato på. Det kan vel sammenlignes med en udvidet kontrol af indtastning i et dato-felt.
Du kan ikke bare udvide den til at du kan skrive i den. Men du kan bruge den til at vælge datoer, og indtaste datoer.
Og du kan lave en visning af aftaler som ligner kalenderen.

En kalender er nok ikke den nemmeste at starte med, men du får mulighed for at lære noget, hvis du kæmper dig igennem det.
Jeg vil nu nok anbefale at starte med noget basal database-viden, og derefter noget generelt om at lave formularer i access, inden du kaster dig ud i den her.

Første problematik er datoen og tidspunktet.
Der findes ikke noget "tidspunkt" felt i fx Access.
Enten kan man gemme dato OG tidspunkt i et dato/tid felt, hvilket giver et problem med fx kalender objektet, da den ikke kender til tidspunkter, eller man kan splitte det op og gemme datoen i et dato/tid felt, og tidspunktet som et heltal (fx sekunder siden midnat). Det giver så et problem med at lave aftaler der forløber over flere dage.

Det er som regel bedst at gemme dato og tidspunkt i samme felt, og så arbejde sig uden om de problemer der er med fx kalender kontrollen.


Men jeg kunne prøve at give en vejledning, så kan du se om du kan finde igennem den...

Hvis du ikke har prøvet at lave tabeller, views og formularer, vil det følgende virke meget forvirrende, men hvis du har, så er der en chance for at du kan bruge det til at lave en kalender.

For at gemme aftalerne skal du bruge en tabel, hvor du gemmer start og sluttidspunkt for hver aftale. Tabellen kunne indeholde:
AftaleID - Autonmmereret - primært indeks
StartTid - Dato/Tid
SlutTid - Dato/Tid
Overskrift - Tekst
Beskrivelse - Memo

Da der også skal bruges en dag, uden tidspunkt, for aftalen, oprettes et view på grundlag af tabellen, som indeholder alle felter, plus et ekstra felt, Datoen, som defineres som Datoen: DateValue([StartTid])

Du kan nu lave en simpel formular, aftaler, på grundlag af ovenstående view, som indeholder aftalerne:
Tilføj felterne starttid, sluttid, overskrift og beskrivelse til en lille formular som ikke er specielt høj. Den skal bruges som underformular på en anden formular.

Den anden formular du skal bruge, dagen i dag, skal ikke laves på grundlag af en tabel eller view, da den bare skal angive hvilken dag du aktuelt kigger på, og den første formular med aftalerne som en "underformular":
Tilføj et kalender objekt, Kalender.
Og tilføj en underformular, nemlig den formular du lavede med aftalerne.

For at kæde hovedformular og underformular sammen, angiver man normalt et felt fra hovedformular, og et felt fra underformular, som angiver hvordan sammenhængen er. I dette tilfælde skal feltet fra hovedformularen være værdien fra kalenderen - Kalender.value
Værden fra underformularen er [Datoen].

Nu mangler det blot at underformularen opdateres, hver gang man vælger en ny dato i kalenderen.
Derfor skal der tilføjes en onclick event på kalenderen der kalder underformular.requery. Det vil hente aftalerne for den dato der klikkes på. Og hvis der indtastes en ny overskrift på en aftale, vil den få denne dags dato.

Det var faktisk det.
Avatar billede mugs Novice
01. april 2003 - 08:49 #2
Enig med mortrr, at Access indbyggede kalender ikke er et godt sted at starte. Jeg har en lille testdb, hvor du kan oprette en planlægningsperiode blot ved at indtaste 2 datoer (start og slut), så vil Access oprette hele perioden ligegyldigt om det drejer sig om 1 uge eller en måned.

Derefter kan du oprette en aktivitet deer strækker sig over f.eks 1 uge:

2003-04-01 - 2003-04-07 : Besøge Louise

Alt er programmeret i VBA.
Er du interesseret i test db, kan du blot lægge din e-mail og angiv samtidig, om du vil have den i Access97 eller 2000.
Avatar billede maria.cand Nybegynder
01. april 2003 - 10:27 #3
jeg vil da meget gerne have sendt din test data base på louiselime@oncable.dk..

Hvorfor skal det hele virke så svært? Jeg har arbejdet en del i Access, så jeg re ikke helt lost!! jeg har blandt andet lave en udlejningssystem til en maskinforretning og et kundesystem til et Brøndboringsfirma.. Men det her synes jeg godt nok virker svært! Nå jeg må se på det når jeg har fri for job - om jeg evt kan finde ud af det;-)
Avatar billede maria.cand Nybegynder
01. april 2003 - 10:38 #4
Glemte lige at tilføje, at jeg helst vil forsøge, at lave en kalender som mortrr har beskrevet!! MAN HAR VIL LOV AT HÅBE;-)
Avatar billede maria.cand Nybegynder
01. april 2003 - 12:23 #5
Vil selvfølgelig gerne have hjælp! HVis der er nogen der ønsker, at lægge en kommentar eller et svar!!
Avatar billede mortrr Praktikant
01. april 2003 - 12:39 #6
Prøv nu først om du kan finde ud af det, og tag så "problemerne" som de kommer.
Det er svært at give generel hjælp til hvordan du gør.
Avatar billede maria.cand Nybegynder
01. april 2003 - 13:36 #7
Ok mortrr - Den er i vinkel, så håber jeg at du evt. kan hjælpe hvis jeg kommer i en nødsituation;-)
Avatar billede mugs Novice
01. april 2003 - 16:09 #8
Eksempel sendt.
Avatar billede maria.cand Nybegynder
01. april 2003 - 19:33 #9
mortrr jeg har lidt problemer - Er et view ikke det samme som en forspørgelse? Det har jeg ihvertfald forsøgt, at oprette.. Nu er problemet.. At jeg efter have lavet en simpel forspørgsel bliver bedt om, at indtaste parameter værdi når jeg går ind i denne forspørgsel..Og selve forspørgelsen kan kun ses i designvisning.. Er det mig der er total fat svag;_) Hjælp
Avatar billede mortrr Praktikant
01. april 2003 - 21:14 #10
En view er en forespørgsel. Jeg bruger en engelsk office, og er kun sjældent i nærheden af en dansk, så bær over med mig.

Hvis den beder om en parameterværdi, er det fordi en funktion eller et feltnavn er skrevet forkert.

Hvis du gå ind i SQL-View (Vis - sql-xxx) når du designer forespørgslen, og du har brugt de felter jeg beskrev, så skal det stå som noget der ligner:

SELECT AftaleID, StartTid, SlutTid, Overskrift, Beskrivelse, DateValue(StartTid) AS Datoen FROM Kalender
eller
SELECT *, DateValue(StartTid) AS Datoen FROM Kalender
Avatar billede maria.cand Nybegynder
01. april 2003 - 23:51 #11
Nu har jeg fået selve viewet til at virke, men jeg ved ikke helt hvordan de 3 formularer skal kobles sammen. Da jeg ikke lige bliver spurgt omkring hvordan værdierne hænger sammen..

Jeg har en formular der hedder view ( den der er lavet på basis af viewet) - Envidere har jeg en der lille formular ( hvor jeg har felterne starttid, sluttid, overskrift og beskrivelse) -

Sidst men ikke mindst har jeg en tom formular, hvor jeg har placeret kalendren!!
Er jeg forsat galt på den?

Bare så i kan få en ide om min den kalender jeg gerne ville have - Kan i tage et kig på følgende - Den behøver nødvendigvis ikke, at være lige så omfattende.. Men det er netop noget ligende jeg rigtig gerne vil kunne lave!

http://dataspherellc.com/CALENDAR.HTM

Jeg havde håbet at jeg under hver enkelt dato kunne have flere begivenheder!!
Avatar billede mortrr Praktikant
02. april 2003 - 00:04 #12
Du kommer nok ikke helt op på siden af datasphere's kalender lige med det samme. Det med at vise aftalen inde i kalenderen vil kræve at du selv "tegner" hele kalenderen. Ikke umuligt, men...

Men du skal nok få flere aftaler på samme dato.

Du skal bruge 2 formularer.
Den tomme med formularen, og den der er lavet på basis af viewet.
Du skal nu have "view"-formularen ind på kalender-formularen som en underformular.

Og "sammenkæde" dem med vædierne som beskrevet tidligere.
Avatar billede maria.cand Nybegynder
02. april 2003 - 00:18 #13
ok det har du nok ret i leger videre med det andet imorgen.. Du skal virkelig have 1000 tak for hjælpen.. Gad bare jeg var god til det;-) - Så jeg kunne lave en rigtig flot kalender..
Avatar billede maria.cand Nybegynder
02. april 2003 - 00:19 #14
Avs er vist ved at være træt - Kan heller ikke skrive mere!!
Avatar billede maria.cand Nybegynder
02. april 2003 - 16:26 #15
Ok mortrr!! Nu har jeg lige et spørgsmål mere.. Hmm hvad skal jeg bruge den lille formular til.. Jeg har jo ialt 3 - Nemlig den på basis af Viewet, den tomme med kalender objektet og den "lille"..

Jeg kan se , at du har skrevet 2 formular, men når jeg indsætter Viewet som en underformular i formularen med kalender objektet bliver jeg ikke bedt om, at kæde formularene sammen, som man normaltvis gør!! - Er det igen mig der fejler.. Jeg er ked af jeg skal spørge dig om så meget - Håber det ok!!
Avatar billede mortrr Praktikant
02. april 2003 - 16:42 #16
Du skal faktisk kun bruge de to. Den på basis af viewet (som bør være en "lille" formular - alle felter på samme "linie") og den med kalender objektet.

Hvis "wizards" er slået fra (Tryllestaven i toolboxen. Jeg slår den altid selv fra), vil den ikke komme og spørge hvilke felter der kæder dem sammen.
Så skal du selv ind på Egenskaber for underformularen, på Data "tabben", og skrive felterne i "Link Child Fields" og "Link Master Fields". Child Fields er Datoen (det beregnede felt i viewet). Master Fields er Kalenderen.Value ("Kalenderen" er navnet på dit kalender-objekt.
Avatar billede mortrr Praktikant
02. april 2003 - 16:49 #17
Og så skal "Default View" på underformularen være "Continous Forms". Det hedder nok noget lignende "Standard Visning" og "Fortløbende formularer".
På Egenskaber for formular - Format
Avatar billede maria.cand Nybegynder
02. april 2003 - 17:45 #18
Ja ja - Jeg må nok bare snart akende, at jeg ikke er god til det her.. Den melder to fejl:

1. I min view formal er der fejl i dato feltet.. Jeg har følgende SQL: SELECT Aftaleid, Kalender.Starttid, Kalender.Sluttid, Kalender.Overskrift, Kalender.Beskrivelse, DateValue(Startid) AS Dato
FROM Kalender;

2. Den anden fejl er, at jeg ikke kan kæde to ubundne formularer sammen når jeg forsøger, at gøre dette inde i egenskaber for underformularen..( når den er sat ind i tom formulkar med kalender objektet).. Mystisk!!
Avatar billede mortrr Praktikant
02. april 2003 - 17:57 #19
1. Jeg mener Dato er et reserveret ord i den danske Access. Det var derfor jeg kaldte den Datoen

Hvis du åbner viewet, ser den så rigtig ud?

2. Hvilken fejl får du?
Du må ikke kalde de felt/tekst-bokse som felterne vises i det samme som selve feltet. Så bliver Access forvirret.
Så hvis du har et felt der hedder Starttid, så kald tekst-boksen på formularen for fx tbStarttid. (Egenskaber - Andet - Navn)
Avatar billede henrik13 Nybegynder
03. april 2003 - 09:10 #20
Kikker
Avatar billede maria.cand Nybegynder
03. april 2003 - 17:39 #21
JA den melder desværre stadig fejl ved datoen.. Når jeg forsøger, at angive en beskrivelse ( i feltet beskrivelse )  i viewet og den sætter aotonummeringen igang står der fejl i Datoen...
Avatar billede mortrr Praktikant
03. april 2003 - 17:44 #22
Også selv om der står en dato i starttid?
Hvis ja, så prøv med
DateValue([Startid]) AS Datoen
Avatar billede maria.cand Nybegynder
03. april 2003 - 18:14 #23
Det virker nu hvor jeg bare skriver som DateValue([Startid]) AS Datoen..Men men nu indeholder mit view vel kun dato..
Avatar billede maria.cand Nybegynder
03. april 2003 - 18:16 #24
Sorry det virker nu - Det er bare mig der ikke tænker.. Tror jeg
Avatar billede maria.cand Nybegynder
03. april 2003 - 18:23 #25
Men inde i formularen for jeg følgende fejl "Datoen er baseret på et udtryk og kan ikke redigeres"
Avatar billede mortrr Praktikant
03. april 2003 - 23:30 #26
Ja selvfølgelig gør du det.
Nu er det mig der ikke tænker.

Nå - så finder vi på en anden metode.

Egentligt er der jo så ikke brug for viewet. Den lille formular kunne lige så godt være lavet på baggrund af tabellen. Men det behøver ikke blive lavet om.

Først fjerner du "Link felterne".

Så skal der bruges noget andet der udvælger aftalerne.
Det kunne være en event/hændelse når man klikker på kalenderen.
Så højreklik på kalenderen (i design-visning), vælg "Build event" ("Generer hændelse" - øverst) og "Code Builder" (... Kode visning?).
Så kommer du over i "Microsoft Visual Basic" - en slags tekst-editor.
Øverst i denne er der to drop-down bokse. I venstre side "kontroller"/objekter, og i højre side events/hændelser for den valgte kontrol.
I venstre side skal du vælge kalender-kontrollen, og i højre side "Click".
Click-eventen skal se sådan ud :
========
Private Sub Calendar_Click()
    newRecSource = "select * from kalenderview where year([StartTid])=" & Year(Calendar.Value) & " AND month([Starttid])=" & Month(Calendar.Value) & " AND day([Starttid])=" & Day(Calendar.Value)
    Me!SubAftaler.Form.RecordSource = newRecSource
End Sub
========
"Calendar" er kalender-objektet og SubAftaler er underformularen med aftaler.

Tilbage til visning, og du skulle nu kunne se aftaler for en dag ved at klikke på datoerne i kalenderen.

Og så til nye aftaler.
Her skal der sættes en event på underformularen.
Så design underformularen - Højreklik - Build Events - Code Builder.
Dennegang er det eventen BeforeInsert på formularen. Den "kører" hver gang man går igang med at indsætte nye data.
Den skal se ud som:
==========
Private Sub Form_BeforeInsert(Cancel As Integer)
  If "" & Me!tbStarttid.Value = "" Then
    Me!tbStarttid.Value = Parent.Calendar.Value
  End If
End Sub
==========
tbStarttid er textboksen med Starttid. Calendar er stadig kalender objektet.

Gem og luk, og åben hoved formularen.
Nu burde datoen automatisk blive lagt ind i feltet, når du skriver tekst i en ny aftale.

Hvis der, mens du er inde i "Visual Basic" kommer nogle tomme event-procedurer, som fx:
Private Sub Form_Load()
End Sub
så bare lad dem være eller slet dem.
Avatar billede maria.cand Nybegynder
07. april 2003 - 18:43 #27
Har accepteret svar og sp er lukket
Avatar billede mortrr Praktikant
07. april 2003 - 21:42 #28
Det kan jeg se.

Nu har jeg normalt ikke så meget tilovers for point-systemet herinde, men hvorfor du valgte at give point til mugs fatter jeg altså ikke.

Men det kunne jo være at du ikke har kunnet bruge noget af det jeg skrev.
Avatar billede maria.cand Nybegynder
07. april 2003 - 21:56 #29
Det er jeg virkelig ked af, men jeg kunne jo ikke give dig point.. Men jeg skulle have afsluttet svaret.. Jeg fandt en anden løsning..
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