Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage nach Anzahl der Stellen hinterm Komma

Begonnen von Mykis, April 24, 2024, 17:17:24

⏪ vorheriges - nächstes ⏩

Mykis

Hallo Access-Freunde,

hier eine sicher einfache Frage für Profies.

Ich möchte mit einer Wenn-Funktion den Inhalt einer Abfrage wie folgt steuern. Wenn eine Zahl drei Stellen hinterm Komma hat, soll in dieser Spalte der Abfrage ein bestimmter Wert aus einer Tabelle angezeigt werden. Wenn die Zahl weniger oder keine Stellen hinterm Komma hat, soll da eine Leerstelle entstehen.

Beste Grüße
Frank

MzKlMu

Hallo,
wie kommt denn die Kommazahl zu Stande ?
Wird die berechnet ?

Wenn man 3 Stellen sieht, kann die Zahl trotzdem mehr Stellen haben.

Wozu soll das überhhaupt gut sein ?
Möglicherweise gibt es ja andere Lösungen.
Gruß Klaus

Mykis

Hallo Klaus,

die Zahlen sind Meßtischblätter (MTB). Beispiele: 5142,241; 5142,23; 5142; etc.
Hinter den Komma können nur die Zahlen 1-4 vorkommen. Mehr als 3 Kommastellen gibt es nicht.
Nur bei den MTB's mit drei Stellen hinterm Komma, sollen geografische Daten in der Abfrage enthalten sein.

LG
Frank


MzKlMu

Hallo,
prüfen kannst Du mit Mid (Teil) und die Zahl hinter dem Komma ausgeben.
Es muss aber geprüft werden (mit Wenn) ob überhaupt ein Komma da ist.

GD: Wenn(InStr([MTB];",")>0;Teil([MTB];InStr([MTB];",")+1))
Was Du jetzt weiter vorhast, habe ich nicht verstanden.

Anmerkung:
Gem Datenbankregeln wäre ein solcher Eintrag auf 2 Felder aufzuteilen. (1.Normalform, atomare Inhalte).
Das würde das vereinfachen. Zusammensetzen zum Anzeigen ist einfacher.
Gruß Klaus

Mykis

Hallo Klaus,
bei folgender Wenn-Funktion "nordwert2: Wenn(InStr([MTB];",")>0;Teil([MTB];InStr([MTB];",")+1);[nordwert1])" schreibt er den Nordwert2 nur bei ganzen MTB's und nicht bei MTB's mit drei Stellen hintern Komma. Alle anderen Felder sollen leer sein.

Leider habe ich mit diesen Wenn-Funktionen wenig Ahnung.

mtb   nordwert2
8415,223   223
5936,4             4
5539,13            13
5240,34            34
5708,32            32
3650,1             1
8739      5236,614

MzKlMu

Hallo,
ich kann dir nicht ganz folgen.
Wo kommt denn der Wert 5236,614 her?

Wie bereits gesagt, wenn das Koordinaten sind (Nordwert deutet darauf hin) gehört das auf 2 Felder aufgeteilt.
Gruß Klaus

Mykis

Die nordwerte stehen doch in dieser Spalte.
Für die ostwerte möchte ich das dann in der entsprechenden Spalte auch selektieren.

MzKlMu

Hallo,
Deine neue Antwort ist jetzt für mich noch verwirrender.
Wo kommen jetzt pötzlich die Ostwerte her.

Und meine Frage hast Du auch nicht beantwortet.
Gruß Klaus

Mykis

#8
Hallo Klaus,

da hab ich mich sicher blöd ausgedrückt. Ich habe eine Spalte "MTB" mit den oben gezeigten Beispielen. Nur bei MTB's mit drei Stellen hinterm Komma sollen in den Nachbarspalten "nordwert" und "ostwert" Koordinaten anzeigt werden. Das wollte ich mit einer Wenn-Funktion in den Koordinatenspalten filtern.

Der Wert 5236,614 ist der Nordwert des MTB 8739 in der Tabelle oben..

LG
Frank

MzKlMu

Hallo,
ich verstehe nur Bahnhof.
Wie kommst du auf den Ostwert?

Mache mal ein Beispiel mit einer Excel Tabelle.
Gruß Klaus

trebuh

Hallo.

Wenn ich es richtig verstanden habe, sind zu diesen Messtischwerten die jeweiligen Koordinaten hinterlegt.
Aber nur bei den Messtischwerten, wo 3 Stellen hinter dem Komma angegeben sind, sollen die jeweiligen Koordinaten angezeigt werden.
Nur weshalb eine Leerstelle entstehen soll, wenn weniger als 3 Kommastellen (oder keine) vorhanden ist, erschließt sich mir nicht ganz.

Gruß
Hubert

Mykis

Hallo Klaus und Hubert,

entschuldigt bitte meine unprofessionelle Problembeschreibung und Danke für eure Geduld.
Im Anhang eine Exceltabelle mit Beispieldaten. Von dieser Tabelle sollen alle Datensätze an die Zentrale weitergemeldet werden, aber in den Spalten "nordwert" und "ostwert" nur Werte, die bei MTB's mit drei Stellen hinterm Komma stehen. Die entsprechenden MTB's habe ich rot markiert. Die anderen Koordinaten sind zu ungenau. Das soll über eine Abfrage realisiert werden.

LG
Frank

ebs17

#12
Eine kleine Übung:
Sub test_Decimals()
    Dim A As Variant, i As Long

    A = Array(8415.223, 5240.34, 3650.1, 8739)
    For i = 0 To UBound(A)
        Debug.Print A(i), test_Dec3_num(A(i))
    Next
    Debug.Print
    For i = 0 To UBound(A)
        Debug.Print A(i), test_Dec3_txt(A(i))
    Next
    Debug.Print
    For i = 0 To UBound(A)
        Debug.Print A(i), IIf(test_Dec3_num(A(i)), 555, Null)
    Next
End Sub

Function test_Dec3_num(ByVal AnyValue As Double) As Boolean
    test_Dec3_num = (AnyValue * 1000) Mod 10 > 0
End Function

Function test_Dec3_txt(ByVal AnyValue As Double) As Boolean
    test_Dec3_txt = Len(Mid(AnyValue, InStr(AnyValue, ",") + 1)) = 3
End Function
Enthalten sind zwei Tests auf 3 Dezimalstellen. Die numerische Variante (mathematische Berechnung auf eine Zahl) sagt mir mehr zu. Der Fall mit einer 0 auf der dritten Dezimalstelle tritt per Definition nicht auf.

Die resultierende Abfrage könnte also lauten:
SELECT
   T.MTB,
   IIf(test_Dec3_num(T.MTB), T.nordwert, Null) AS nordwert,
   IIf(test_Dec3_num(T.MTB), T.ostwert, Null) AS ostwert
FROM
   TableX
(Funktion test_Dec3_num in einem Standardmodul hinterlegen.)
Mit freundlichem Glück Auf!

Eberhard

Mykis

Hallo Eberhard,

vielen Dank für deinen möglichen Lösungsweg. Den habe ich aber auf Grund meiner bescheidenen Kenntisse nicht hinbekommen. Ich habe aber einen eigenen Weg gefunden. Ich kürze in einer zusätzlichen Spalte die MTB's auf die Zahlen hinterm Komma und kann dann die Koordinaten nach der enstehenden Zahl auswählen. Also bei allen Werten die kleiner als 111 sind, wird keine Koordinate angezeigt.

In der Spalte "Nordwert" steht also: 
Nordwert1: Wenn([MTB1]<111;"";[Nordwert])in der Spalte "ostwert":
Ostwert1: Wenn([MTB1]<111;"";[Ostwert])
Vielleicht keine professionelle Lösung, aber funktioniert.

LG
Frank

MzKlMu

Hallo,
Du hast doch in der Wenn Formel jedes mal die gleiche Bedingung (<111) wie sollen da unterschiedliche Werte für Nord und Ost zu Stande kommen ? Bzw. wie unterscheiden sich dann Nord- und Ostwert ?

Das ganze Vorhaben ist für mich immer noch rätselhaft.
Gruß Klaus