Avatar billede dsjk Novice
13. oktober 2002 - 10:42 Der er 30 kommentarer og
2 løsninger

løbe alle poster igennem og ret data på baggrund af alder

Jeg har en database med oplysninger om medlemmer ved en badminton forening, og jeg vil gerne lave en knap, som laver nogle opdateringer når der starter en ny sæson.

Jeg har en tabel:
Persondata, som indeholder alle oplysninger.
bl.a. "fødselsdato" (ex. 08-07-1979)
og hvilken gruppe den enkelte spiller er tilknyttet
i feltet "gruppe"

Når jeg trykker på knappen, som ikke er lavet endnu, skal der ske følgende:

- Alle poster bliver løbet igennem
- Den beregner personens alder, fra fødselsdagen til 31-12-(indeværende år) (fx. 08-07-1979 - 31-12-2002 = 23)
- og hvis alderen er 9-10 skal gruppefeltet stå på U9
11-12 = U11
13-14 = U13
- og hvis gruppefeltet bliver rettet skal det smides dagsdato ind i feltet "rettet"

Hvordan gøres dette?

dsjk
Avatar billede mugs Novice
13. oktober 2002 - 10:51 #1
Prøv at se vedr. beregning af alder:

http://www.eksperten.dk/spm/114681

Beregningen af gruppen kan du indsætte i formularens OnCurrent event som en Select Case.
Avatar billede dsjk Novice
13. oktober 2002 - 11:21 #2
hmm, jeg kan ikke få det til at virke.

Har lavet et modul Beregnalder, med funktionen alder:

Public Function Alder(Dato1 As Date, Dato2 As Date) As Integer
    If DateSerial(Year(Dato2), Day(Dato1), Month(Dato1)) > Date Then
        Alder = DateDiff(\"yyyy\", Dato1, Dato2) - 1
    Else
        Alder = DateDiff(\"yyyy\", Dato1, Dato2)
    End If
End Function

men hvordan kalder jeg modulet, er det sådan her:

Call Beregnalder.Alder(fødselsdato, "31-12-2002")

eller hvordan gør jeg?
Avatar billede mugs Novice
13. oktober 2002 - 11:42 #3
Jeg kan heller ikke få det til at virke. Må jeg sende dig et eksempel på kald af et modul?

Den er i Access97, men skal også virke i 2000 og XP. Blot læg din e-mail.
Avatar billede dsjk Novice
13. oktober 2002 - 11:43 #4
Tak

kl@densortejakke.dk
Avatar billede mugs Novice
13. oktober 2002 - 11:47 #5
Sendt.
Avatar billede terry Ekspert
13. oktober 2002 - 12:17 #6
I would also concider making a query which calculates the age and also which group each person is in then you will ALWAYS be able to see th einformation without having to update your tables.
Avatar billede dsjk Novice
13. oktober 2002 - 12:20 #7
mugs > har kigget på den, og har delvis fået det til at virke

Terry > how do I do that?
Avatar billede terry Ekspert
13. oktober 2002 - 14:09 #8
You make a query and from this query you can call the function that mugs has sent you to calculate age, then you can use the IIF function to calculate gruppefeltet.
Avatar billede dsjk Novice
15. oktober 2002 - 22:46 #9
jeg vil gerne have dato2 til at være "fast", den skal være 01.01.næste år, dvs. i år skal det være 2003, men til næste år skal det være 2004.

Hvordan får jeg det?

dsjk
Avatar billede mugs Novice
15. oktober 2002 - 22:58 #10
En meget klodset løsning er, at du har et datofelt samt et år-felt, og laver en Select Case struktur på dette. Lidt i stil med dette:
 
Select Case Dato
Case #1/1/1997# To #12/31/1997#
År = 1998
Case #1/1/1998# To #12/31/1999#
År = 2000
End Select

Men det absolut ikke en løsning jer er stolt over - men er for træt til andet.
Avatar billede dsjk Novice
15. oktober 2002 - 23:00 #11
hmm, jeg behøver det ikke lige nu, så når du er frisk ... :o)
Avatar billede dsjk Novice
16. oktober 2002 - 21:55 #12
så har jeg delvis fået lavet et forespørgsel, der viser det rigtige:

SELECT Alder([fødselsdato]) AS Alder, *
FROM persondata;

og i kolonnen alder stå nu personens alder, hvordan bruger jeg så IIF functionen?
Hvis alder 9 eller 10 så skal gruppefeltet være U11
Hvis alder 11 eller 12 så skal gruppefeltet være U13
Hvis alder 13 eller 14 så skal gruppefeltet være U15
Hvis alder 15 eller 16 så skal gruppefeltet være U17
Hvis alder 17 eller 18 så skal gruppefeltet være Senior

dsjk
Avatar billede terry Ekspert
17. oktober 2002 - 08:15 #13
and?
Avatar billede dsjk Novice
17. oktober 2002 - 08:48 #14
how do I finish the query, to update the field "gruppe" useing the query, and IIF?

I have not used IIF before, and are a bit lost.
Avatar billede terry Ekspert
17. oktober 2002 - 09:01 #15
Well you could make another function so you dont use IIF.

In the function where you calculate ALDER you can return the "Gruppefelt" instead.

Function Alder(inDate as date) as integer


Alder = .....


'Now you could alter the function to return a string instaed which contains ""Gruppefelt"
'You will need an integer to hold the alder you calculate

DIM age as integer



    SELECT CASE age
        Case 9, 10
            Alder = "U11"
        Case 11, 12
            Alder = "U13"

        ..
        Case else
            Alder = "Senior"           

    End SELECT

End function


Now you can make an update query

UPDATE persondata SET gruppefelt = alder([fødselsdato]);


or something like that!
Avatar billede dsjk Novice
17. oktober 2002 - 09:16 #16
ok, I will try when I get home tonight
Avatar billede terry Ekspert
17. oktober 2002 - 09:18 #17
OK, if you have any problems then you can contact me at terry@santhell.dk
Avatar billede mugs Novice
17. oktober 2002 - 09:38 #18
Flg. Select Case er indsat i en Access97 db og fungerer. Indsat i Formularens VedAktuel (OnCurrent). Nyt eksempel er sendt:

Select Case Alder
Case 9 To 10
gruppe = "U9"
rettet = Date
Case 11 To 12
gruppe = "U13"
rettet = Date
Case 13 To 14
gruppe = "U15"
rettet = Date
Case 15 To 16
gruppe = "U17"
rettet = Date
Case 17 To 18
gruppe = "Senior"
rettet = Date
Case Else
gruppe = Null
rettet = Null
End Select
Avatar billede dsjk Novice
18. oktober 2002 - 18:04 #19
da jeg desværre har haft travt, og ikke rigtig har været hjemme, har jeg ikke fået kigget på det endnu.
Og får muligvis først kigget på det i starten af næste uge
Avatar billede mugs Novice
18. oktober 2002 - 19:42 #20
OK
Avatar billede dsjk Novice
03. november 2002 - 13:32 #21
ok, så har jeg endelig fået kigget på det.

mugs > har ikke prøvet din løsning da det skal være en knap man trykker på for at starte en ny sæson, og opdateringerne skal kun køres en gang om året.

terry > Har fået dit forslag til at virke, og gruppefeltet opdateres fint, men kan jeg få opdateret "rettet" - feltet med dd, såfremt et medlem er rykket over i en anden gruppe?

dsjk
Avatar billede mugs Novice
03. november 2002 - 15:00 #22
Hvis du ser på mit forslag bliver feltet "rettet" opdateret med dd når koden eksekveres når formularen opnår status som OnCurrent. du kan blot flytte koden til en kommandoknap, så skulle det fungere efter hensigten.
Avatar billede terry Ekspert
07. november 2002 - 19:31 #23
dsjk this question has been open almost a month now, are you going to close it?
Avatar billede dsjk Novice
08. november 2002 - 08:39 #24
jeg skal nok lukke det når jeg har fået det hele til at virke.

Problemet er at jeg har lidt travlt for tiden, og har derfor ikke fået lavet det færdig.

dsjk
Avatar billede dsjk Novice
10. november 2002 - 11:47 #25
jeg har denne kode i et modul:
Public Function Alder(Dato As Date) As Integer
Dim Dato2 As Date
Dim Age As Integer

Dato2 = Date
Select Case Dato2
Case #1/1/2002# To #12/31/2002#
Dato2 = #1/1/2003#
Case #1/1/2003# To #12/31/2003#
Dato2 = #1/1/2004#
Case #1/1/2004# To #12/31/2004#
Dato2 = #1/1/2005#
Case #1/1/2005# To #12/31/2005#
Dato2 = #1/1/2006#
Case #1/1/2006# To #12/31/2006#
Dato2 = #1/1/2007#
End Select


    If DateSerial(Year(Dato2), Month(Dato), Day(Dato)) > Dato2 Then
        Age = DateDiff("yyyy", Dato, Dato2) - 1
    Else
        Age = DateDiff("yyyy", Dato, Dato2)
    End If
   
Select Case Age
Case 7 To 8
    Alder = "3"
Case 9 To 10
    Alder = "4"
Case 11 To 12
    Alder = "5"
Case 13 To 14
    Alder = "6"
Case 15 To 16
    Alder = "7"
Case 17 To 18
    Alder = "2"
Case Else
    Alder = "1"
End Select

End Function

og bruger denne forespørgsel til at kører det med:
UPDATE persondata SET gruppe = alder([fødselsdato]);

Hvordan flytter jeg koden til en kommandoknap? og hvor skal den stå?

dsjk
Avatar billede mugs Novice
10. november 2002 - 12:15 #26
Du kopierer simpelthen koden og indsætter den i knappens OnClick event. Efter Ens Select tilføjer du flg.:

DoCmd.OpenQuery "Forespørgslens Navn"

hvilket åbner din opdateringsforespørgsel.

når du kører en opdateringsdforespørgsel får du en advarsel fra Access der siger, at du er ved at ændre data i tabellen. Hvis du vil være fri for den, kan du indsætte flg. i starten af din kode:

DoCmd.SetWarnings False

Men husk at indsætte denne i slutningen:

Docmd.SetWarnings True

Hvis du du bruger False, forbliver systemadvarslerne frakoblede i hele applikationen, derfor altid True til sidst.
Avatar billede dsjk Novice
10. november 2002 - 12:43 #27
ok, har nu prøvet at tilføje dato i rettet, men det virker ikke helt, hvordan skal forespørgslen lyde når den både skal rette gruppe og rettet?
nu:
UPDATE persondata SET gruppe = alder([fødselsdato]);


dsjk
Avatar billede mugs Novice
10. november 2002 - 12:48 #28
Du trækker simpelthen feltet "rettet" ned i opdateringsforespørgslens designgitter på samme måde som feltet "gruppe", og i feltet Opdateres til indtaster du datoen.
Avatar billede mugs Novice
10. november 2002 - 12:51 #29
Noget i stil mede dette:

UPDATE Tabel1 SET Tabel1.gruppe = 9, Tabel1.rettet = Date()+2;

som opdaterer tabel1 felterne gruppe til 9 og rettet til dags dato + 2, altså 2002-11-12.
Avatar billede dsjk Novice
10. november 2002 - 12:59 #30
ok, det er jo klart, tænkte mig ikke helt om det :O)

Så er der kun en lille fejl:
Feltet rettet skal kun have Date() hvis gruppe feltet rettes, kan man gøre det?

dsjk
Avatar billede dsjk Novice
14. november 2002 - 20:41 #31
så er problemet løst:

jeg har lavet et ekstra felt i tabellen: oldgruppe.
Jeg starter med at flytte nuværende gruppe over i old gruppe.
så kører jeg opdateringen der skal bestemme om nogle spillere skal i en ny gruppe.
til sidst flytter jeg date() ind i rettet i de tilfælde gruppe er forskellig for oldgruppe.

Tak for hjælpen.

dsjk
Avatar billede terry Ekspert
15. november 2002 - 08:16 #32
tak :o)
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