PDA

Vollständige Version anzeigen : Funktion mit Abfrage füllen


Bernhard Kleine
22.01.2008, 14:29
1. Ich habe Labordaten, die je nach Labor mal mit g/ltr oder mMol/ltr dimensioniert sind. Für jeden Laborwert ist ein weiteres Feld vorhanden mit der gemessenen Dimension, also g/ltr oder mMol/ltr.
2. Ich habe eine Tabelle, in der die Umrechnungsfaktoren abgelegt sind.
3. Wenn ich nun eine Abfrage mache, möchte ich per VBA-Funktion die Umrechnung durchführen: In der Tabelle steht 15; g/ltr. Ich möchte aber ?? mMol/ltr anzeigen. die Spaltennamen der Umrechnungstabelle sind so konstruiert: g/ltr->mMol/ltr. Wie sieht das Gerüst für eine solche Abfrage auf die Umrechnungstabelle aus?

Public Function Umrechnung(blutwert as dezimal ,Dim1 as string,Dim2 as string) As Variant

Dim Spaltenname AS string
Spaltenname = Dim1 & "->" & Dim2

Faktor = "SELECT Spaltenname FROM Datenbank.blutchemie_umrechnungen _
WHERE analyse=blutwert;"

Umrechnung=blutwert*faktor

end function

4. In der Abfrage steht dann Umrechnung("haemoglobin";"g/ltr";"mMol/ltr") as haemoglobin_umgerechnet.

Da dies meine erste Abfrage ist, die ich eine Funktion einbette, entschuldigt bitte meine Naivität.

bernhard

ebs17
22.01.2008, 14:40
Deine Berechnung kannst Du auch direkt in der Abfrage ausführen:

haemoglobin_umgerechnet: [blutwert] * DomWert("Spaltenname";"[Datenbank.blutchemie_umrechnungen]";"analyse=blutwert")

Das Ganze zuzüglich der Einheiten.

Bernhard Kleine
22.01.2008, 14:47
Danke für die schnelle Antwort. Allerdings wäre es mir lieber, eine solche funktion zu haben, da ich dann auf Dauer weniger schreiben muss!

Bernhard

ebs17
22.01.2008, 15:03
Eine Funktion hat (i.d.R.) nur einen Rückgabewert:

Public Function Umrechnung(blutwert as dezimal) As Variant ' besser Double ?
Umrechnung = blutwert * DLookup("Spaltenname", _
"[Datenbank.blutchemie_umrechnungen]", "analyse = blutwert")
End function

Den Spaltennamen musst Du separat bilden.

ebs17
22.01.2008, 15:12
Zur Ergänzung, falls mehrere Rückgabewerte aus einer Funktion benötigt werden (wird aber eher selten angewendet).

Bernhard Kleine
22.01.2008, 15:22
Ich habe jetzt zuerst mal die von dir vorgeschlagene Version getestet:

crea_normiert: Wenn([creatini_dim]="µM";[creatinine]*DomWert("'µM->mg/dl'";"blutchemie_umrechnungen";"Analyse=Kreatinin");[creatinine])

und bekomme folgende Fehler:

Der Ausdruck, den Sie als Abfrageparameter eingegeben haben, hat folgenden Fehler verursacht: 'Microsoft Access kann den eingegeben Namen "Kreatinin" nicht finden.'

Blutchemie_umrechnungen hat sieht für kreatinin so aus:

Analyse mg/dl->µM µM->mg/dL
Kreatinin 88,4 0,0113


Muss ich das jetzt verstehen?

ebs17
22.01.2008, 15:45
Muss ich das jetzt verstehen?

Wenn Du weiterkommen willst: Unbedingt!!

Hinweise:

(1) Statt "'µM->mg/dl'" besser "[µM->mg/dl]"
Namen mit Sonderzeichen/Leerzeichen mit eckigen Klammern einschließen, besser aber auf solche Bezeichnungen verzichten

(2) Zu dem Fehler:
"Analyse='Kreatinin'"
Der Vergleichswert im Kriterium ist ein String und muss daher in Gänsefüßchen, hier ersatzweise in Hochkommata eingeschlossen werden.

Bernhard Kleine
22.01.2008, 15:57
DANKE!

ich habe jetzt folgenden funktionsaufruf

crea_normiert: Wenn([creatini_dim]="µM";[creatinine]*Umrechnungsfaktor("'Kreatinin'";"[µM->mg/dl]");[creatinine])

und folgende Funktion

Public Function Umrechnungsfaktor(Blutwert As String, Spalte As String) As Variant


Umrechnungsfaktor = DLookup(Spalte, "Blutchemie_Umrechnungen", "Analyse=" & Blutwert)

End Function

und es scheint zu funktionieren!!