Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Mykis am April 24, 2024, 17:17:24

Titel: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: Mykis am April 24, 2024, 17:17:24
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
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: MzKlMu am April 24, 2024, 18:47:26
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.
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: Mykis am April 24, 2024, 19:16:02
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

Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: MzKlMu am April 24, 2024, 19:55:24
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.
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: Mykis am April 24, 2024, 21:05:12
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
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: MzKlMu am April 24, 2024, 21:18:31
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.
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: Mykis am April 24, 2024, 21:39:37
Die nordwerte stehen doch in dieser Spalte.
Für die ostwerte möchte ich das dann in der entsprechenden Spalte auch selektieren.
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: MzKlMu am April 24, 2024, 23:26:07
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.
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: Mykis am April 24, 2024, 23:44:21
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
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: MzKlMu am April 25, 2024, 09:11:13
Hallo,
ich verstehe nur Bahnhof.
Wie kommst du auf den Ostwert?

Mache mal ein Beispiel mit einer Excel Tabelle.
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: trebuh am April 25, 2024, 09:27:11
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
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: Mykis am April 25, 2024, 10:37:39
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
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: ebs17 am April 25, 2024, 10:41:43
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.)
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: Mykis am April 25, 2024, 12:11:17
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
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: MzKlMu am April 25, 2024, 12:31:10
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.
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: ebs17 am April 25, 2024, 12:44:37
Mein Vorschlag beschäftigt sich mit einer technischen Umsetzung, losgelöst vom inhaltlichen Sinn.

ZitatIch kürze in einer zusätzlichen Spalte die MTB's auf die Zahlen hinterm Komma
Das entspricht dem Vorschlag von Klaus weiter oben hinsichtlich Normalisierung.
Die Ziffern nach dem Komma haben offensichtlich eine andere atomare Bedeutung als jene vor dem Komma. Also liegt es nahe, für sinnvolle spezielle Auswertungen den Gesamtausdruck zu zerlegen.

Konsequent und professionell ist es dann, diese Trennung einmalig auszuführen und die atomaren Inhalte in eigenen Tabellenfeldern abzulegen. Zusammensetzen bei Bedarf ist supereinfach, mit zusammengebandelten Daten umzugehen dagegen ist regelmäßig umständlich und schwierig, wie ja auch Deine Fragestellung verdeutlicht - und bei dem Kernproblem bist Du in vielfacher Gesellschaft.

Da die dritte Ziffer der rechten Seite eine sichtbare eigene Rolle spielt, müsste man die bis zu drei Ziffern der rechten Seite vermutlich ebenfalls in eigene Felder separieren. Das sind keine Zahlen mit Zahlencharakter, sondern Text-Zusammensetzungen aus Ziffern.
Die Prüfung würde sich dann darauf beschränken, ob dieses dritte Ziffernfeld einen Inhalt hat oder nicht.
Im professionellen Umfeld kann man dann Einzelfelder indizieren und diese Indizes bei Abfragen performanceerhöhend einsetzen - in Datenbanken gibt es potentiell viele Daten, die schnell zu verarbeiten sind.
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: Mykis am April 25, 2024, 13:16:12
Hallo Klaus,

in einer zusätzlichen Spalte (MTB1) meiner Abfrage kürze ich die MTB's auf die Zahlen hinterm Komma. Es entsteht also eine ganze Zahl mit max. 3 Stellen. Wenn die Zahl dort kleiner 111 ist, wird bei Nordwert und Ostwert nix angezeigt.
Die resultierende Tabelle hänge ich zum Verständnis unten an.

LG
Frank
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: Mykis am April 25, 2024, 13:28:42
Hallo Eberhard,

ZitatKonsequent und professionell ist es dann, diese Trennung einmalig auszuführen und die atomaren Inhalte in eigenen Tabellenfeldern abzulegen.

In meiner Datenbank wird dieses Procedere nur bei einer Abfrage benötigt. Der Aufwand soll sich also in Grenzen halten.
Vielen Dank für deine hilfreichen Erklärungen.

LG
Frank
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: MzKlMu am April 25, 2024, 13:38:03
Hallo,
ZitatDie resultierende Tabelle hänge ich zum Verständnis unten an.
Die Tabelle hilft gar nichts. Im Gegenteil, jetzt bin ich noch mehr verwirrt. Wo kommen denn die Einträge für Nordwert und Ostwert her ?
Ich kann da keinerlei Zusamemnhänge zwischen MTB und diesen Werten erkennen.

Die in #13 gezeigten Formeln haben doch beide die gleiche Bedingung, wie sollen da Unterschiede zu Stande kommen?


Alles mehr als verwirrend, ich blicke es nicht.

Aber vielleicht bin ich ja besonders schwer von Begriff.
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: ebs17 am April 25, 2024, 14:07:44
Zur Eigenbewertung:
ZitatDer Aufwand soll sich also in Grenzen halten.
Eine Aufteilung ist unstrittig notwendig. Also beurteilen wir Aufwand.

1) Bei einem Datenimport in eine DB-Tabelle wird MTB einmalig aufgeteilt, die Einzelinformationen werden in eigene Tabellenfelder gespeichert und sind dort ständig verfügbar.
2) Bei der Abfragelösung erfolgt die Aufteilung von MTB pro Abfrageaufruf.

Wenn also die Abfrage mehr als einmal aufgerufen wird: Wo wird mehr Aufwand getrieben?

ZitatIn meiner Datenbank wird dieses Procedere nur bei einer Abfrage benötigt.
Aus dem Kontext ist leicht entnehmbar, dass sowohl Du als Entwickler als auch die Datenbank als solche noch sehr am Anfang stehen. Datenbanken sind oft sehr langlebig, und insbesondere wenn Nutzer deren Vorteile nach und nach sehen und ahnen, steigen Anforderungen.
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: Mykis am April 25, 2024, 14:09:57
Hallo Klaus,

Deutschland ist unter anderem in ein MTB-System eingeteilt. Das aus Quadranten, Viertelquadranten, Sechzentelquadranten etc. besteht. Die norwerte und ostwerte in meiner Tabelle sind Dezimalkoordinaten, die jeweils den Mittelpunkt des entsprechenden Quadranten in der Karte darstellen. MTB und Koordinate hängen also mathematisch zusammen. Jeder Fudort in meiner Pilzdatebank ist also durch ein MTB und diese beiden Koordinaten georeferenziert und kann in Karten z.B. durch einen Punkt dargestellt werden.

LG
Frank
Titel: Re: Abfrage nach Anzahl der Stellen hinterm Komma
Beitrag von: Mykis am April 25, 2024, 15:15:57
Hi Eberhard,

diese abgeschnittenen MTB benötige ich nicht noch einmal. Es geht nur um eine einmalig genutzte Exportfunktion für Funddaten. Deshalb wollte ich dafür nicht erst eine indizierte Tabelle mit diesen Werten anlegen. Aufwand wäre das natürlich keiner, da hast du ja Recht. :)

LG
Frank