Abfrage und Zuordnung

Moderator: ModerationP

Abfrage und Zuordnung

Beitragvon Gast » 28. Feb 2021, 22:44

Hallo,
in einer Abfrage wird der BMI aus Gewicht und Körpergröße (kg/Größe in m^2) berechnet. Ist er kleiner als 18,5, so ist man nach folgendem untergewichtig.
Wie kann man die Zuordnung erreichen, wie sie nach dem Semikolon aufgeführt ist? Geht das auch in der Abfrage?
< 18,5; Untergewicht
18,5 - 24,9; Normalgewicht
> 25,0; Übergewicht:
25,0 - 29,9; Präadipositas
30,0 - 34,9; Adipositas Grad 1 (moderate Adipositas)
35,0 - 39,9; Adipositas Grad 2 (starke Adipositas)
40,0; Adipositas Grad 3 (extreme Adipositas)
Gruß Carla
Gast
 

Re: Abfrage und Zuordnung

Beitragvon uwms » 01. Mär 2021, 08:53

Hi,

das kannst du z.B. mit geschachtelten "Wenn" erreichen:

Code: Alles auswählen
bmiklasse: wenn([gewicht]<18,5;"Untergewicht";wenn([gewicht]<25;"Normalgewicht";wenn([gewicht]<30;"Präadipositas","usw")))


Grüße aus Münster
Uwe
uwms
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 308
Registriert: 20. Nov 2015, 14:44

Re: Abfrage und Zuordnung

Beitragvon Bitsqueezer » 01. Mär 2021, 10:10

Hallo,

sinnvollerweise, indem Du eine entsprechende Zuordnungstabelle erstellst, die Du dann in einer Abfrage verwenden kannst.

Wenn es schon unbedingt mit Funktionen sein soll, bitte Switch verwenden, keine geschachtelten IIfs...;)

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8276
Registriert: 21. Jun 2007, 12:17

Re: Abfrage und Zuordnung

Beitragvon uwms » 01. Mär 2021, 10:32

Hallo Christian,

switch geht natürlich auch, ist aber mehr Schreibaufwand ohne eine konkreten Vorteil.
Eine Lösung über Zuordnungstabelle hatte ich auch überlegt, habe aber keine schöne Lösung gefunden. Wie ist dein Ansatz?

Grüße aus Münster
Uwe
uwms
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 308
Registriert: 20. Nov 2015, 14:44

Re: Abfrage und Zuordnung

Beitragvon KlausMz » 01. Mär 2021, 10:49

Hallo,
wieso ist Switch mehr Schreibaufwand? Ich finde es eher umgekehrt, von der Lesbarkeit mal ganz abgesehen.
Außerdem haben die verschachtelten Wenns Grenzen die bei ca. 7 liegt.
Switch zwar auch, aber da sind es deutlich mehr (ca. 20).
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40101
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Abfrage und Zuordnung

Beitragvon knobbi38 » 01. Mär 2021, 12:15

Hallo Carla,

ich habe das in einer separaten Lookup-Tabelle abgelegt, wobei du dann zur Auswertung nur einen Grenzwert verwendest, entweder den unteren oder den oberen. Einmal mit kleiner und dann mit größer zu arbeiten, ist jetzt nicht so gut.

Gruß Ulrich
Zuletzt geändert von knobbi38 am 01. Mär 2021, 14:02, insgesamt 1-mal geändert.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3262
Registriert: 02. Jul 2015, 14:23

Re: Abfrage und Zuordnung

Beitragvon Gast » 01. Mär 2021, 13:42

Hallo,
danke. Ich habe einige Anläufe gemacht und nicht gedacht, dass das mit einer Lookup-Tabelle so schwierig wird. Mit der Wenn-Schachtelung hat es geklappt. Danke an Uwe.
Aber wegen der genannten Grenzen (in der OH nicht zu finden; auch nicht unter Spezifikationen) möchte ich das Prinzip mit der Lookup-Tabelle hinbekommen.
Ich habe jetzt eine dreispaltige Tabelle GrenzwertUnten|GrenzwertOben|Gewichtsklasse (Text). Die beiden ersten vom Typ Double.
zur Auswertung nur einen Grenzwert verwendest, entweder den unteren oder den oberen.

Muss mit DLookup gearbeitet werden? Und muss die Zuordnung nicht mit between gemacht werden? Alles, was ich dazu anstellte, musste in die Tonne :(
Gruß Carla
Gast
 

Re: Abfrage und Zuordnung

Beitragvon knobbi38 » 01. Mär 2021, 14:19

Hallo Carla,

hier mal ein Mini-Beispiel.

Gruß Ulrich

Nachtrag für Gastzugänge:

Tabelle: tblLookupBMI:
Code: Alles auswählen
-------------------------------------------------------
|ID  |BMI   |Beschreibung                             |
-------------------------------------------------------
|  1 | 18,5 | Untergewicht                            |
-------------------------------------------------------
|  2 | 25,0 | Normalgewicht                           |
-------------------------------------------------------
|  3 | 30,0 | Präadipositas                           |
-------------------------------------------------------
|  4 | 35,0 | Adipositas Grad 1 (moderate Adipositas) |
-------------------------------------------------------
|  5 | 40,0 | Adipositas Grad 2 (starke Adipositas)   |
-------------------------------------------------------
|  6 | 99,0 | Adipositas Grad 3 (extreme Adipositas)  |
-------------------------------------------------------

und dann die Abfrage qryBMI in der SQL-Ansicht:
Code: Alles auswählen
PARAMETERS pBMI IEEESingle;
SELECT TOP 1 BMI, Beschreibung
FROM tblLookupBMI
WHERE BMI > pBMI
ORDER BY BMI;
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von knobbi38 am 01. Mär 2021, 14:32, insgesamt 1-mal geändert.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3262
Registriert: 02. Jul 2015, 14:23

Re: Abfrage und Zuordnung

Beitragvon uwms » 01. Mär 2021, 14:29

Ah, einfach mit "top" - gute Idee und elegante Lösung Ulrich!

Grüße
Uwe
uwms
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 308
Registriert: 20. Nov 2015, 14:44

Re: Abfrage und Zuordnung

Beitragvon Gast » 02. Mär 2021, 10:04

Hallo,
vielen Dank Ulrich.
Excellent und großer Lernfortschritt für mich :D
LG Carla
Gast
 

Re: Abfrage und Zuordnung

Beitragvon knobbi38 » 02. Mär 2021, 11:25

Hallo,

wenn ich helfen kann immer wieder gerne.

Grüße Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3262
Registriert: 02. Jul 2015, 14:23

Re: Abfrage und Zuordnung

Beitragvon Gast » 02. Mär 2021, 14:02

Hallo,
ich leider schon wieder.
Der BMI wird ja in einer Abfrage aus Größe und Gewicht berechnet. Diese Spalten sind in der Tabelle Personen. Die Abfrage ist Datensatzquelle bei einem Formular und der berechnete BMI wird für jeden Datensatz gezeigt. Also OK.
Ich sehe jetzt das Problem, dass das Formular nicht mehr editierbar ist, wenn eine zweite Abfrage mit der Lookup-Tabelle zur Datensatzquelle hinzugefügt würde, um auch die Beschreibung zu zeigen.
Abgesehen von der Frage, welche Felder für die Beziehung verwendet werden müssen.
Wie kann man das lösen?
Gruß Carla
Gast
 

Re: Abfrage und Zuordnung

Beitragvon Beaker s.a. » 02. Mär 2021, 14:21

Hallo Carla,
Beziehung gibt es hier nicht, die BMI-ID wird ja nicht als FK gespeichert.
In der DS-Herkunft des Forms hast aber ein Feld mit dem berechneten BMI.
Zur Anzeige des Klartextes braucht du also nur ein ungebundenes Textfeld
mit dem SteuerelementeInhalt
Code: Alles auswählen
=DomWert("Beschreibung";"tblLookupBMI";"BMI > " & []!DeinTextfeldMitBMI


gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1136
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Abfrage und Zuordnung

Beitragvon knobbi38 » 02. Mär 2021, 15:10

Hallo Carla,

du mußt nicht dem Formular die Lookup-Tabelle hinzufügen, sondern du verwendest einfach eine ungebundene Textbox mit einem Ausdruck als Steuerelementinhalt. Leider geht das nicht so einfach mit dem DomWert() wie Ekkehard das angedeutet hat, weil, wie in der Query schon angedeutet, "TOP 1" und "ORDER BY" verwendet wird, was damit nicht geht. Stattdessen kann aber eine Funktion als Ausdruck verwendet werden, welcher der BMI-Wert aus der Textbox als Parameter mitgegeben wird. Das hat darüberhinaus noch den Vorteil, daß eine Parameterquery "qryBMI" verwendet werden kann:
Code: Alles auswählen
' *****************************************************************************
' Modul: modBMIHelper
' *****************************************************************************
'
Option Compare Database
Option Explicit

Public Const MOD_NAME As String = "modBMIHelper"

Public Function GetBMIBeschreibung(ByVal BMIValue As Variant) As Variant
  Dim qdf As DAO.QueryDef
  Dim rst As DAO.Recordset
 
    Const QRY_NAME As String = "qryBMI"
 
  GetBMIBeschreibung = vbNullString
 
  On Error GoTo Err_Handler
 
  If Not IsNumeric(BMIValue) Then
    Exit Function
  End If
 
  Set qdf = DBEngine(0)(0).QueryDefs(QRY_NAME)
  qdf.Parameters(0).Value = BMIValue
  Set rst = qdf.OpenRecordset(dbOpenForwardOnly, dbReadOnly)
 
  If Not (rst.BOF And rst.EOF) Then
    GetBMIBeschreibung = rst!Beschreibung
  End If
 
  rst.Close
  qdf.Close
 
Exit_Handler:
  Set rst = Nothing
  Set qdf = Nothing
  Exit Function
 
Err_Handler:
  Debug.Print MOD_NAME & ".GetBMIBeschreibung(" & Nz(BMIValue) & ")" _
    & " Error: "; Err.Number, Err.Description
  Resume Exit_Handler
End Function

und bei der ungebundenen Textbox wird dann einfach der Ausdruck
Code: Alles auswählen
=GetBMIBeschreibung([txtBMI])
als Steuerelementinhalt eingetragen.

Gruß Ulrich
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3262
Registriert: 02. Jul 2015, 14:23

Re: Abfrage und Zuordnung

Beitragvon Gast » 02. Mär 2021, 18:12

Hallo,
vielen Dank. Ich hoffe, dass ich es richtig gemacht habe. Zumindest läuft es jetzt.
Das Formular benutzt nun 2 Abfragen. Eine zur Berechnung des BMI und eine für die Anzeige der Beschreibung.
Vielleicht ist das der Grund, dass die Anzeige der Beschreibung etwas langsamer erfolgt als die der anderen Daten. Vielleicht aber auch, weil ein Recordset auf der Grundlage von qryBMI geöffnet wird.
Bei einem Endlosformular würde das Recordset bei jedem Datensatz geöffnet und geschlossen werden. Beim Scrollen wird wohl nachgeladen werden. Aber die zeitliche Verzögerung habe ich nicht getestet.
Oder hängt es damit zusammen, dass eine Funktion vom ungebundenes Textfeld aufgerufen wird?
Gruß Carla
Gast
 

Nächste

Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: dera1 und 2 Gäste