Avatar billede CarstenHM Nybegynder
14. oktober 2014 - 08:19 Der er 9 kommentarer

Beregning i Access 2010

Hej
For at sige det som det er - Ja, jeg er ny i VBA.

Udfordring :

Jeg har lavet en DB, som skal lave følgende beregninger :

I en skydning kan der deltages med 3 forskellige typer våben. Hver skytte kan opnå følgende 5 resultater : Intet, Tilfredsstillende, Bronze, Sølv eller Guld.

Info : Våben 1 (Intet =< 120 Point) (imellem 121 og 139 Point = Tilfredsstillende (imellem 140 og 158 = Bronze) osv.
Info : Våben 2 (Intet =< 118 Point) (imellem 119 og 137 Point = Tilfredsstillende) (imellem 138 og 156 = Bronze) osv.

Beregningen (skal foregå i tabelfelt "Opnået" - som nu skal udlæse Våbentype fra tabelfeltet "Våbentype", og ud fra denne udlæsning anvende de tal der nu er gældende (se f.eks Våben 1).

Beregningen skal nu udføres, og en tilsvarende (beregnet) tekstværdi ( Intet, Tilfredsstillende, Bronze, Sølv eller Guld) skal returneres, og indsættes i tabelfeltet "Opnået" i den aktuelle post.

Jeg håber at der er nogle dygtige mennesker herinde, der kan hjælpe med en løsning, snarest.

På forhånd tak
Avatar billede martens Guru
14. oktober 2014 - 14:59 #1
mangler der ikke lige lidt info på våben 3 ;o)
Avatar billede CarstenHM Nybegynder
14. oktober 2014 - 15:35 #2
Der er de informationer, som kan danne grundlag for noget jeg kan arbejde videre ud fra. Var der noget bestemt du savnede ?
Avatar billede fdata Forsker
14. oktober 2014 - 18:12 #3
Du kan få en ide til hvordan det kunne lade sig gøre:

Forudsætninger:

- Dine beregninger skal ske i en formular (baseret på din skyderesultater).
- I formularen har du bla. felterne "Våbentype", "Point" og "Opnået"

Det mest korrekte vi være at oprette en lille tabel, som indeholder grænseværdierne for de forskellige point-grænser:

- Tabellen kalder vi Våbentyper
- Opret felterne
    Våbentype (Tekst)
    Max_Intet (Tal)
    Max_Tilfr (Tal)
    Max_Bronce (Tal)
    Max_Sølv (Tal)
(vi går ud fra at alt, der er bedre end sølv, giver guld - så altså: ingen øvre grænse på guld)

- Læg de forskellige våbentypenavne og grænseværdier ind i tabellen

- I din skyderesultattabel-formular lægger du så følgende kode i Point-feltets AfterUpdate/EfterOpdatering hændelse:

Private Sub Point_AfterUpdate()
  If IsNull(Me.Point) Then Exit Sub
 
  Dim Db As Database
  Dim Rst As Recordset
  Dim strSQL As String
  Dim Res As String
 
  Set Db = CurrentDb
  strSQL = "SELECT Våbentyper.* FROM Våbentyper WHERE Våbentype='" & Me.Våbentype & "'"
  Set Rst = Db.OpenRecordset(strSQL, dbOpenSnapshot)
  With Rst
    If Not .EOF Then
      If Me.Point > 0 And Me.Point <= !Max_Intet Then Res = "Intet"
      If Me.Point > !Max_Intet And Me.Point <= !Max_Tilfr Then Res = "Tilfredsstillende"
      If Me.Point > !Max_Tilfr And Me.Point <= !Max_Bronce Then Res = "Bronce"
      If Me.Point > !Max_Bronce And Me.Point <= !Max_Sølv Then Res = "Sølv"
      If Me.Point > !Max_Sølv Then Res = "Guld"
    End If
  End With
  Set Rst = Nothing
  Set Db = Nothing

  Me.Opnået = Res
End Sub
Avatar billede mugs Novice
14. oktober 2014 - 20:40 #4
Jeg mener nu ikke, at det er nødvendigt med en ekstra tabel. Det burde heller ikke være nødvendigt at gemme de beregnede værdier i en tabel.

Hvis det laves i en forespørgsel med flere iif sætninger bliver beregningerne udført hver gang forespørgslen køres.
Avatar billede CarstenHM Nybegynder
15. oktober 2014 - 11:13 #5
Har prøvet dette med iif, men kan ikke få det til at virke efter hensigten. Ville absolut være nemmest i udtryksgeneratoren, men der  kommer amatøren til kort :-)
Avatar billede mugs Novice
15. oktober 2014 - 11:34 #6
Her et eksempel fra en darabase der tildeler point i et spil kort. I pseudo kode sådan:

Hvis taæfelt er >20000 og talfelt er <30000 så skal udtryk1 være "ingenting", derefter følger en ny iif sætning o.s.v.


Udtryk1: IIf([Talfelt]>20000 And [talfelt]<30000;"Ingenting";IIf([Talfelt]>30000 And [talfelt]<40000;"Et par";IIf([Talfelt]>40000 And [talfelt]<50000;"To par")))
Avatar billede fdata Forsker
16. oktober 2014 - 19:37 #7
Hm.

Jeg tog udgangspunkt i:

1. Carsten skrev: Beregningen skal nu udføres, og en tilsvarende (beregnet) tekstværdi skal returneres og indsættes i tabelfeltet "Opnået" i den aktuelle post.

2. Pointtildelingen er afhængig af våbentypen. Det vil i bedste fald kræve en forespørgsel pr. våbentype plus lidt programmering. I værste fald en pænt uoverskuelig monster-forespørgsel.

3. Fordelen ved en separat tabel er at det på en meget enkel måde vil være muligt at ændre "grænseværdierne" for de forskellige våbentyper
Avatar billede CarstenHM Nybegynder
16. oktober 2014 - 21:29 #8
Hej - beklager min ignorante tilværelse :-)
Fdata - du har fat i essensen af hvad det er jeg ønsker løst.
Jeg skal såmænd bare bruge det på lørdag - så nej, hårklipning skal jeg ikke spekulere på, det næste lange stykke tid.
Tak for dit indlæg. Jeg har prøvet med dit program, men jeg må gøre noget forkert. Skal jeg oprette en knap, og så tildele din kode som hændelsespricedure, eller hvilke andre skjulte metoder ligger der gemt for en amatør ?

Mvh

Carsten
Avatar billede fdata Forsker
17. oktober 2014 - 10:10 #9
1. Opret våbentypetabellen som beskrevet ovenfor
2. Åbn den formular, som du vil bruge til at registrere resultaterne i, i Designvisning
3. Marker feltet "Point"
4. Tast F4 for at fremkalde Egenskabsarket
5. På fanen Hændelser finder du hændelsen AfterUpdate/EfterOpdatering
6. Dobbeltklik for at vælge Hændelsesprocedure
7. Klik knappen med de tre små streger ude til højre
8. Erstat den tomme procedure med min kode ovenfor

Bemærk, at der er tale om en lidt rå form for kode. Det kan godt være at du skal tilrette lidt for at få det til at spille 100%; men selve idéen burde holde.
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

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