Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Text nach Datum in Abfrage sortieren

Begonnen von ChemSim, April 05, 2024, 06:03:36

⏪ vorheriges - nächstes ⏩

ChemSim

Hallo zusammen,

ich nutze folgende Abfrage als Datensatzquelle für mein Unterformular ufrmKapazitäten, welches als Endlosformular aufgerufen wird:

SELECT
    tblKapazitäten.KapazitätID,
    tblKapazitäten.AnlageID_F,
    tblKapazitäten.Kapazität,
    IIf([tblKapazitäten].[Termin]=#1/1/1900#,"n.a.",Format([tblKapazitäten].[Termin],"Short Date")) AS AngezeigtesDatum,
    tblKapazitäten.Quelle,
    IIf([tblKapazitäten].[Termin]=#1/1/1900#,"n.a.",[tblKapazitäten].[Termin]) AS Sortierdatum
FROM
    tblKapazitäten
ORDER BY
    IIf([tblKapazitäten].[Termin]=#1/1/1900#,"n.a.",[tblKapazitäten].[Termin]) DESC;

Auf dem Formular befindet sich ein Textfeld txtTermin, welches als Steuerelementinhalt "AngezeigtesDatum" hat. Durch die Abfrage wird bei Eingabe des Datums "01.01.1900" nicht das Datum an sich, sondern "n.a" angezeigt. Bei allen anderen Datumseingaben wird stattdessen das normale Datum in der Form tt.mm.jjjj angezeigt. Das funktioniert auch wunderbar.

Nun würde ich gerne die Sortierung so einstellen, dass das aktuellste Datum immer ganz oben ist und die Felder mit "n.a." immer ganz unten sind. Aktuell sind die Felder mit "n.a." über allen Datumangaben, da quasi Text vor Datum sortiert wird. Gibt es dafür eine Lösung?

ebs17

ZitatDas funktioniert auch wunderbar.
Ist aber gebündelter Unsinn.

Wirf dieses #1/1/1900# aus der Tabelle. das ist doch sicher kein realer Wert in Deinen Vorgängen, sondern eine eigenausgedachte Stilblüte.
Durch die ungeschickte IIF-Berechnung wird die Spalte zur Textspalte mit also dann Textsortierung, wo also ein 31.01.2024 größer und also aktueller ist als ein 02.04.2024.

Also: Aktualisierungsabfrage, wo #1/1/1900# auf NULL gesetzt wird (kein Eintrag wird sehr gut als nicht angegeben ) verstanden. Dann genügt die simpelste Sortierung:
ORDER BY Termin DESC
Wenn es Dein Wunsch ist, kannst Du aber auch weiter mit Windmühlen kämpfen.
Mit freundlichem Glück Auf!

Eberhard

MzKlMu

#2
Hallo,
wenn Du unbedingt das n.a. haben willst, kannst Du das mit einem berechneten Feld machen.
AngezeigtesDatum: Nz([Termin];"n.a.")Die Felder mit "01.01.1900" müssen dazu aber geleert werden (Null) wie von Eberhard vorgeschlagen.
Auch die Sortierung über Termin.
Das Feld Termin wird nicht angezeigt, dafür das berechnete Feld.
Gruß Klaus

ChemSim

#3
Hallo Klaus,

danke für die Rückmeldung. Meine Abfrage sieht nun so aus:

SELECT KapazitätID, AnlageID_F, Kapazität, Quelle, Termin, Nz([Termin],"n.a.") AS AngezeigtesDatum
FROM tblKapazitäten ORDER BY Termin DESC;

Das Textfeld txtTermin hat als Steuerelementinhalt "AngezeigtesDatum". Zudem habe ich alle Termin-Felder mit "01.01.1900" Einträgen aus der Tabelle tblKapazitäten geleert, sodass die Felder an diesen Stellen leer sind. Die Sortierung funktioniert jetzt.

Nun habe ich aber das Problem, dass ich jetzt keine neuen Datensätze mehr hinzufügen kann, denn sobald ich in das Textfeld txtKapazität, welches sich ebenfalls im Formular befindet, einen Wert eingebe, erscheint im Textfeld txtTermin automatisch "n.a." und dies lässt sich auch nicht mehr entfernen.

Gruß
Simon

MzKlMu

#4
Hallo,
das ist ja auch richtig so. Wenn Du eine Kapazität einträgst ist das Terminfeld auch leer (Null) und es wird folgerichtig auch n.a. eingetragen bzw. angezeígt.
Sobald Du aber einen Termin (im Feld Termin !) einträgst verschwindet n.a.

Wie genau hast Du die Felder geleert ?

PS:
Ich habe Deinen SQL Text oben verkürzt. Bei eindeutigen Feldnamen ist der Tabellenname vor den Feldnamen überflüssig. Bei einer Tabelle in der Abfrage braucht es die Tabellennamen nie, denn innerhalb einer Tabelle sind die Feldnamen von Hause aus eindeutig.
Gruß Klaus

ChemSim

Hallo Klaus,

ich glaube, du hast meine Intention nicht ganz verstanden. Das Formular hat drei, nicht vier Textfelder:

Sie dürfen in diesem Board keine Dateianhänge sehen.

Und so soll es auch bleiben. Ich möchte kein zusätzliches Feld. Es soll einfach nur "n.a." in das Terminfeld eingetragen werden, wenn es kein Datum hat, also leer ist.

Ich habe die 01.01.1900 Einträge der bestehenden Datensätze aus der Tabelle gelöscht.

Bezüglich der SQL-Abfrage: Das weiß ich, allerdings macht Access das automatisch, da kann ich nichts gegen tun.

MzKlMu

#6
Hallo,
schlicht und einfach, das geht nicht. Eine Datum kann nur Datumswerte aufnehmen. Sobald Du n.a hinzufügen willst wird aus Datum Text und eine korrekte Sortierung eines Datums ist nicht mehr möglich.
Es bleibt Dir für die Anzeige von n.a. nur mein Vorschlag.

Warum soll da unbedingt n.a. drin stehen, ein leeres Feld ist doch auch deutlich zu erkennen?

Zitatda kann ich nichts gegen tun.
Doch, hinterher löschen, wie ich es auch gemacht habe.
Die SQL Texte werden deutlich kürzer (und damit auch die Beiträge), was der Übersicht im Forum dient.
Gruß Klaus

ChemSim

Hallo,

ZitatEs bleibt Dir für die Anzeige von n.a. nur mein Vorschlag.

Ich kann es ja dann immer noch mit der Abfrage vom Anfang machen, dann geht das mit "n.a.", aber halt ohne Sortierung.

ZitatWarum soll da unbedingt n.a. drin stehen, ein leeres Feld ist doch auch deutlich zu erkennen?

In meiner Anwendung hätte ich gerne "n.a.", das leere Feld sieht im Hauptformular dann unvollständig aus. Aber ist Geschmacksache ...

ZitatDoch, hinterher löschen, wie ich es auch gemacht habe.

Wie bereits gesagt, das liegt an Access. Wenn ich es hinterher löschen, die Abfrage speichere und dann wieder öffne, ist es genauso wie vorher!

MzKlMu

Hallo,
ZitatIch kann es ja dann immer noch mit der Abfrage vom Anfang machen,
Aber in dem Feld kannst Du doch nichts eingeben oder ändern. Wenn dann doch ein Termin bekannt wird, brauchst Du doch das echte Terminfeld zur Eingabe/Änderung.

ZitatWenn ich es hinterher löschen,
Ich meinte doch hier im Forum löschen, doch nicht in Access, da macht es in der Tat keinen Sinn.
Es geht doch um die Platzersparnis für den Forumsbeitrag.
Gruß Klaus

ChemSim

Hallo,

ZitatAber in dem Feld kannst Du doch nichts eingeben oder ändern.

Das stimmt, das habe ich gerade auch bemerkt. Wenn ich es richtig verstanden habe, ist die einzig mögliche Lösung, insgesamt vier Textfelder zu erstellen: txtKapazität, txtTermin, txtAngezeigtesDatum und txtQuelle. Das Textfeld txtAngezeigtesDatum ist dann mit dem berechneten Feld

AngezeigtesDatum: Nz([Termin];"n.a.")
verknüpft und im Feld txtTermin kann ich dann einen Termin eingeben. Wenn ich das Feld leer lasse, wird im Textfeld txtAngezeigtesDatum "n.a." angezeigt. Andernfalls wird jedoch auch das gleiche Datum wie im Textfeld txtTermin angezeigt, wodurch es im Formular doppelt erscheint?

Es sei denn, man kann das Textfeld txtTermin nur zur Eingabe einblenden / sichtbar machen?


MzKlMu

Hallo,
ZitatAndernfalls wird jedoch auch das gleiche Datum wie im Textfeld txtTermin angezeigt, wodurch es im Formular doppelt erscheint?
Ja das ist richtig.

ZitatEs sei denn, man kann das Textfeld txtTermin nur zur Eingabe einblenden / sichtbar machen?
Ja, auch das ist möglich. Aber nur bei einem Einzelformular, bei Datenbalttansicht und Endlosformular ist das nicht sinnvoll, weil immer die komplette Spalte aus bzw. eingeblendet wird.

Du musst Dir halt wirklich überlegen, ob sich de Aufwand wegen der n.a. Anzeige lohnt.

Du könntest Dir überlegen das leere Feld über die bedingte Formatierung einzufärben (z.B. Blau).

Aber insgesamt finde ich den Aufwand nicht gerechtfertigt, zumal die leeren Felder über Sortierung immer unten stehen und dadurch auch sehr deutlich zu erkennen sind.
Gruß Klaus

ChemSim

Hallo,

danke für Deine Einschätzung, ich denke ich belasse es dann dabei, die Felder leer zu lassen.

Gruß
Simon