13. oktober 2002 - 10:42Der 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"
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
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.
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.
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
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
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
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?
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.
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å?
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.
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]);
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.
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.
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.