08. marts 2007 - 12:12Der 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
Udfordringerne hober sig op i fødevare- og drikkevareindustrien og gør den til en af de mest sårbare.
24. oktober 2024
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!~)
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")
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
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
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
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.
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.
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));
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.
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.