Hallo Gemeinde,
ich habe eine Tabelle mit 6 Feldern. In diesen Feldern stehen Zahlen.
Diese Zahlen sollen in einem berechneten Feld zusammengefast werden.
Allerdings sollen die Fleder mit dem Wert Null nicht mit erfasst werden.
Bild für Anfrage Felder.png
In diesem Bild habe ich die Felder als Text formatiert und mit dem Code zusammengefasst!
NrBerechnet: [anAnNr1] & "."+[anAnNr2] & "."+[anAnNr3] & "."+[anAnNr4] & "."+[anAnNr5] & "."+[anAnNr6]
Jetzt brauche ich die Werte aber als Zahl. Gibt es da eine Möglichkeit das einfach zu erstellen??
Gruß :)
Danny
Hallo Danny,
was heißt "als Zahl"? Ohne Punkte? Dann multipliziere doch einfach mit 10, 100, 1000, usw. Dann steht der Eintrag an der jeweiligen Stelle.
Hallo,
das kann als Zahl nicht dargestellt werden, Du verkettest da ja Punkte (.) Das ist und bleibt Text.
Was sind das für Werte (anAnNr1 - ..6) ?
Moin es handelt sich um den Felddatentyp Zahl!
Die Felder sind zum sortieren in Reihenfolge für mich wichtig (glaube ich)!
Das was zusammengefasst werden soll muss keine Zahl sein und ist nur für das Formular zum Anzeigen gedacht.
Kann ich auch über die Textfilter richtig in Reihenfolge sortieren??
Dann könnte das ja so bleiben wie es ist. Das ganze ist sowas wie die Reihenfolge eines Inhaltsverzeichnisses.
Also sind die Werte als Zahl Quatsch??
Hallo,
das berechnete Feld kann nur Text sein und wird auch als Text sortiert.
Mit einem Filter kann man nicht sortieren.
Hallo,
ich verwende so eine Verkettung auch bei hierarchischen Daten, ganz besonders, um eben eine Reihenfolge hinzubekommen, die der Hierarchie entspricht und innerhalb einer Ebene nicht unbedingt nach z.B. einem enthaltenen Namen sortiert werden soll, sondern z.B. nach einer Sortierzahl.
Die richtige Sortierung ist auch mit Text ganz einfach zu bewerkstelligen: Du mußt wissen, wie groß die größte Zahl werden könnte, und dann formatierst Du die Zahl mit führenden Nullen. Dabei ist nur wichtig, daß die Anzahl der größten Zahl auf der gleichen Ebene entspricht.
Ergebnis ist dann z.B.
0001.0001.0001.000000016.00003.000001
Der gesamte String kann dann mit korrekter numerischer Sortierung je Hierarchieebene verwendet werden.
Die Umwandlung ist simpel mit "Format" zu bewerkstelligen.
In SQL Server gibt es rekursive Abfragen, da kann man sich solche Sortierpfade automatisch erstellen lassen, wenn die Hierarchie ordentlich aufgebaut wurde (nicht wie hier in Aufzählungsfeldern).
Gruß
Christian
Hallo Brallu,
Zitat von: Bitsqueezer am Oktober 31, 2025, 22:03:21Der gesamte String kann dann mit korrekter numerischer Sortierung je Hierarchieebene verwendet werden.
Die Umwandlung ist simpel mit "Format" zu bewerkstelligen.
In dem Fall also z. B. so (Beispiel Abfrage in SQL-Ansicht):
SELECT
...
anAnNr1 & "." + anAnNr2 & "." + anAnNr3 & "." + anAnNr4 & "." + anAnNr5 & "." + anAnNr6 AS NrBerechnet
...
FROM
DeineTabelle
ORDER BY
anAnNr1,
anAnNr2,
anAnNr3,
anAnNr4,
anAnNr5,
anAnNr6Das würde auch eine Indexnutzung zulassen, falls die Aufzählungsfelder indiziert sind (bessere Performance bei vielen Datensätzen).
Hallo,
in SQL Server kann man solche Spalten auch als persistent markieren, dann sind sie selbst gespeichert und indizierbar. Das geht in Access zwar leider nicht, aber man kann natürlich den Ergebnisstring als Feld speichern und indizieren, dann hat man nur ein Sortierkriterium.
Nur reicht es hier nicht, die Zahlen mit "." zu verketten - wie gesagt, mit führenden Nullen auffüllen mit Format, ansonsten werden die Zahlen im String als Text sortiert.
Gruß
Christian
Danke für eure Hilfe aber das passt so noch nicht. :-\
Hier noch ein paar Anmerkungen:
Also das Berechnete Feld kann Text sein! Das ist nur das was in der Abfrage angezeigt werden soll.
Mit diesem Feld wird später nichts berechnet oder so und es soll genau so aussehen!
Aber die 6 Felder brauche ich um die Reihenfolge der Datensätze in der Abfrage zu sortieren!
Also die sollen Aufsteigend sortiert werden!!!
Um beim Sortieren nicht die Reihenfolge 1, 10, 11, usw. zu bekommen
(Felder sind als Text Formatiert und da kommt dann das Ergebnis raus)
benötige ich die 6 Felder als Zahl formatiert. Hier bekomme ich dann beim Sortieren die Reihenfolge 1, 2 ,3 usw. wie ich sie brauche.
Daher habe ich das Problem das ich die Variante aus meinem ersten Beitrag nicht verwenden kann!
Also mit & "."+ zwischen den Feldern geht es ja so nur bei Textfeldern.
Also würde ich gerne die 6 Felder (mit Zahlenwert) verbinden (mit . zwischen den Zahlen) und das Ergebnis kann Zahl, Sonderformat oder Text sein.
Dafür brauche ich eine Formel Idee für das berechnete Feld!
Ich hoffe das ist jetzt besser erklärt. Sorry
Hallo Brallu,
die Lösungsweg, welchen du suchst, steht bereits in #5. Formatiere die String mit führenden "0" auf eine gleiche Stringlänge für alle Felder und setzen diese Teilstrings zusammen. So erhältst du ein Sortkriterium, das deinen Wünschen entsprechen sollte, solange es sich nur um Ziffern handelt.
Der Lösungsansatz aus #6 sollte ebenfalls funktionieren.
Wenn das immer noch nicht richtig sein sollte, musst du dein Problem nochmal mit anderen Worten beschreiben und ggf. eine Beispiel DB hier hochladen.
Knobbi38
Hallo Knobbi,
#5 versuche ich noch einmal
#6 anAnNr1 & "." + anAnNr2 & "." + anAnNr3 & "." + anAnNr4 & "." + anAnNr5 & "." + anAnNr6 AS NrBerechnet
Hier müssen die 6 Felder aber als TEXT gespeichert sein.
Das passt so aber nicht!
Aber egal ich habe mir ein Feld Sortierung eingebaut und die Datensätze durchnummeriert. So kann ich das Problem umgehen!
Danke für eure Antworten! :)
#gelöscht (doppelt)
#gelöscht (doppelt)
Hallo Brallu!
Zitat von: Brallu am November 01, 2025, 17:08:13#6 anAnNr1 & "." + anAnNr2 & "." + anAnNr3 & "." + anAnNr4 & "." + anAnNr5 & "." + anAnNr6 AS NrBerechnet
Hier müssen die 6 Felder aber als TEXT gespeichert sein.
Da hast du Recht. Wenn diese vom Datentyp
Zahl sind, dann müsste es so lauten:
anAnNr1 & Format(anAnNr2,"\.0") & Format(anAnNr3,"\.0") & Format(anAnNr4,"\.0") & Format(anAnNr5,"\.0") & Format(anAnNr6,"\.0") AS NrBerechnetund es könnte wie in #6 angeführt nach den Zahlenfeldern sortiert werden (Order by anAnNr1, anAnNr2 usw.)
Anstatt mit Format() könnte man das berechnete Feld in einer Abfrage auch so erstellen:
SELECT Replace(Trim$(Nz([anAnNr1],"") & " " & Nz([anAnNr2],"") & " " & Nz([anAnNr3],"") & " " & Nz([anAnNr4],"") & " " & Nz([anAnNr5],"") & " " & Nz([anAnNr6],"")) , " ", ".")
FROM MyTable
Order By [anAnNr1] ,[anAnNr2] ,[anAnNr3] ,[anAnNr4] ,[anAnNr5] ,[anAnNr6]
Hier kann die Sortierung dann wie gewünscht ebenfalls mit den numerischen Feldwerten erfolgen.
Als VBA Funktion dann so:
Public Function FMTHY(ParamArray FValue()) As String
Dim s As String
Dim i As Long
For i = 0 To UBound(FValue)
s = s & " " & Nz(FValue(i), "")
Next
FMTHY = Replace(Trim(s), " ", ".")
End Function
und der Aufruf in SQL:
SELECT FMTHY(f1,f2,f3,f4,f5,f6) AS HY
FROM MyTable;
Hallo Knobbi38,
interessante kreative Lösung.
Die nz-Funktion könnte auch weggelassen werden bei Abfragen in Access. Dadurch würde auch die Performance noch besser.
SELECT Replace(Trim([anAnNr1] & " " & [anAnNr2] & " " & [anAnNr3] & " " & [anAnNr4] & " " & [anAnNr5] & " " & [anAnNr6])," ",".")
FROM MyTable
Order By [anAnNr1] ,[anAnNr2] ,[anAnNr3] ,[anAnNr4] ,[anAnNr5] ,[anAnNr6]
Und statt Trim$ (VBA-Funktion) würde ich Trim verwenden (VBA-Funktion aber auch eigenständige SQL-Funktion nach meinem Kenntnisstand).