31. marts 2003 - 23:05Der 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!!
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.
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.
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;-)
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
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
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!
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.
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..
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!!
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.
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
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!!
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)
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...
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.
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..
Synes godt om
Ny brugerNybegynder
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.