Avatar billede hlnviv Juniormester
08. marts 2007 - 12:12 Der er 11 kommentarer og
1 løsning

En kode til en forspørgsel

Hej eksperter jeg har et felt hvor der fast står 50 så har jeg 5 andre felter der bliver indtastet i og så et felt hvor resultat skal stå i og i det felt skal jeg bruge en kode/udregning hvor det tal i de 5 felter afviger mest fra 50 skal stå f.eks. 50,2 50,4 50,2 50 50,1 så kommer der til at stå 0,4 i mit felt håber i forstår
Avatar billede Slettet bruger
08. marts 2007 - 14:12 #1
Jeg lavede en tabel med benchmark, tal1, tal2, tal3, tal4, tal5 og afvig

Så en autogenereret form og så indsæt koden:

Public Sub Afvigelse()
Dim a, b, c, d, e

If Me.Tal1 >= 50 Then
a = Me.Tal1 - Me.Benchmark
Else
a = Me.Benchmark - Me.Tal1
End If
If Me.Tal2 >= 50 Then
b = Me.Tal2 - Me.Benchmark
Else
b = Me.Benchmark - Me.Tal2
End If
If Me.Tal3 >= 50 Then
c = Me.Tal3 - Me.Benchmark
Else
c = Me.Benchmark - Me.Tal3
End If
If Me.Tal4 >= 50 Then
d = Me.Tal4 - Me.Benchmark
Else
d = Me.Benchmark - Me.Tal4
End If
If Me.Tal5 >= 50 Then
e = Me.Tal5 - Me.Benchmark
Else
e = Me.Benchmark - Me.Tal5
End If

If a >= b And a >= c And a >= d And a >= e Then Me.Afvig = a
If b >= a And b >= c And b >= d And b >= e Then Me.Afvig = b
If c >= a And c >= b And c >= d And c >= e Then Me.Afvig = c
If d >= a And d >= b And d >= c And d >= e Then Me.Afvig = d
If e >= a And e >= b And e >= c And e >= d Then Me.Afvig = e

End Sub

Private Sub Tal1_AfterUpdate()
Afvigelse
End Sub
Private Sub Tal2_AfterUpdate()
Afvigelse
End Sub
Private Sub Tal3_AfterUpdate()
Afvigelse
End Sub
Private Sub Tal4_AfterUpdate()
Afvigelse
End Sub
Private Sub Tal5_AfterUpdate()
Afvigelse
End Sub

Det minder måske lidt om farmors hjemmestrik, men det virker jo fint nok!~)
Avatar billede hlnviv Juniormester
09. marts 2007 - 07:10 #2
hej kan den laves så den kan puttes ind på samme måde så f.esk. denne her kode hvi du forstår
Godkent: IIf([Mål 1]>=21,4 And [Mål 1]<=21,6;IIf([Mål 2]>=21,4 And [Mål 2]<=21,6;IIf([Mål 3]>=21,4 And [Mål 3]<=21,6;IIf([Mål 4]>=21,4 And [Mål 4]<=21,6;IIf([Mål 5]>=21,4 And [Mål 5]<=21,6;IIf([Mål 6]>=25,8 And [Mål 6]<=26;IIf([Mål 7]>=25,8 And [Mål 7]<=26;IIf([Mål 8]>=25,8 And [Mål 8]<=26;IIf([Mål 9]>=25,8 And [Mål 9]<=26;IIf([Mål 10]>=25,8 And [Mål 10]<=26;"Ja";"Nej");"Nej");"Nej");"Nej");"Nej");"Nej");"Nej");"Nej");"Nej");"Nej")
Avatar billede hlnviv Juniormester
09. marts 2007 - 09:08 #3
så jeg kan sætte den ind i udtryksgenerator
Avatar billede balderk Nybegynder
09. marts 2007 - 14:48 #4
Alternativ (som sædvanlig):
Hvis du gemmer data (f.eks. 50,4) i eet felt og i et andet felt gemmer placeringen (1-5). Alle fem records skal kunne relateres til sammenligningsværdien.

Så vil du kunne bruge abs() til at finde den numeriske værdi - træk 50 fra - brug abs() til at finde numerisk værdi af forskel - stop dem i tabel e.l. og find højeste værdi.


Eksempel på data:
50  50,4  1
50  50,2  2
50  50,1  3
50  -50,2  4
50  49,0  5

Resultater

0,4
0,2
0,1
0,2
1,0
Avatar billede hlnviv Juniormester
09. marts 2007 - 16:27 #5
det forstå jeg ikke rigtig så meget af er ikke lige frem en øren til det
Avatar billede balderk Nybegynder
09. marts 2007 - 22:06 #6
Jeg går udfra, at dette også er til din værktøjskalibrering.
At der er fem målinger på hvert værktøj, og du er interesseret i at finde der, hvor der er størst afvigelse i værktøjets måling, ikke?

- Hvis du så har een tabel med stamdata for værktøjet, f.eks. [IdNummer] og [Mål] (f.eks. 50) samt een tabel med alle måleresultaterne fordelt på felterne [MålingNummer] (key), [IdNummer] (for værktøj), [DatoOgTid] (for målinger) og [Måling]
- Og de to tabeller er relateret gennem [IdNummer]
- Så kan du basere din form på en query, som ser sådan ud:

SELECT tools.IdNummer, Max(Abs([mål]-[måling])) AS afvigelse
FROM tools INNER JOIN målinger ON tools.IdNummer = målinger.IdNummer
WHERE (((målinger.DatoOgTid)>#1/1/2007#))
GROUP BY tools.IdNummer;

Denne query viser den største afvigelse pr. værktøj for valgte tidsperiode - her her målinger efter 01.01.2007
Avatar billede hlnviv Juniormester
10. marts 2007 - 00:39 #7
det er rigtig det er til værktøjskalibrering der er ikke enstydig målinger til hvert værktøj men det er rigtig jeg vil finde den største afvigelse som også kan være et - resultat (nigativ) i dette tilfælde måler men på fem gang på en klode for at finde ud af gentagelse nøjagtighed men det er nu llige meget det jeg søger er som i Kommentar: hlnviv 09/03-2007 07:10:58 hvor den kommer med et ja eller nej så skal den her komme med den største afvigelse [måleklods] 50    [Mål1] 50,01 [Mål2] 49,09 [Mål3] 50,00 [Mål4] 50,01 [Mål5] 50,02 altså [res]=0,02  hvis mulig at sætte ind dirkerte i udtryksgenerator i min forspørgsel
Avatar billede balderk Nybegynder
12. marts 2007 - 14:32 #8
Hvis du fortsat vil have dem i forskellige felter, skal du nok lave de mange nestede iif-sætninger
Avatar billede hlnviv Juniormester
12. marts 2007 - 14:50 #9
kan du ikke lave det første eks. så kan jeg bygge vidre på den
Avatar billede balderk Nybegynder
15. marts 2007 - 12:40 #10
Denne er lavet i excel i stedet, da det er lidt hurtigere at skrive. Logisk er opbygningen den samme i Access - det hedder så bare iif, og du er nødt til at lave parentes om feltnavnene

Den viser opbygningen for 3 målinger (i cellerne b1-d1) og een sammenligningsværdi (i a1). Som du kan se bliver det lidt smålangt allerede for tre værdier.

=+HVIS(ABS(A1-B1)>A1-C1;HVIS(ABS(A1-B1)>ABS(A1-D1);ABS(A1-B1);ABS(A1-D1));HVIS(ABS(A1-C1)>ABS(A1-D1);ABS(A1-C1);ABS(A1-D1)))

Jeg ville egentlig have lavet den, som en maks() funktion, men kan ikke få den til at virke i udtryksgenerator. Jeg kan kun anbefale dig, at lære lidt VBA/SQL , det gør det meget nemmere, når kompleksiteten stiger.
Avatar billede terry Ekspert
17. marts 2007 - 10:14 #11
SELECT Nr, Max(M) AS MDev
FROM (SELECT Skydellære.[Værktøjs  NR] AS Nr, iif(Skydellære.[Gen Mål 1] > 50 ,  Skydellære.[Gen Mål 1] - 50, 50 - Skydellære.[Gen Mål 1] ) AS M
FROM Skydellære
UNION ALL
SELECT Skydellære.[Værktøjs  NR], iif(Skydellære.[Gen Mål 2] > 50 ,  Skydellære.[Gen Mål 2] - 50, 50 - Skydellære.[Gen Mål 2] ) AS M
FROM Skydellære
UNION ALL
SELECT Skydellære.[Værktøjs  NR], iif(Skydellære.[Gen Mål 3] > 50 ,  Skydellære.[Gen Mål 3] - 50, 50 - Skydellære.[Gen Mål 3] ) AS M
FROM Skydellære
UNION ALL
SELECT Skydellære.[Værktøjs  NR], iif(Skydellære.[Gen Mål 4] > 50 ,  Skydellære.[Gen Mål 4] - 50, 50 - Skydellære.[Gen Mål 4] ) AS M
FROM Skydellære
UNION ALL SELECT Skydellære.[Værktøjs  NR], iif(Skydellære.[Gen Mål 4] > 50 ,  Skydellære.[Gen Mål 4] - 50, 50 - Skydellære.[Gen Mål 4] ) AS M
FROM Skydellære)
GROUP BY Nr
HAVING ((Not (Max(M)) Is Null));
Avatar billede terry Ekspert
17. marts 2007 - 10:15 #12
I'm also assuming that the readings can deviate + or - so the iif takes this into concideration. If readings can only be plus of 50 then you can alter this.
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