Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: jagger am Januar 06, 2019, 16:56:51

Titel: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: jagger am Januar 06, 2019, 16:56:51
Guten Abend und allen noch ein frohes neues Jahr,

ich möchte ein Listemfeld wahlweise noch Ort, Datum oder Umsatz sortieren.
Das Listenfeld hat eine Abfrage als Datenquelle.
Wenn ich nun in der Abfrage in einer "Spalte" in der Zeile "Feld"
DatSort: Wenn([Formulare]![mnu_Kunden]![Filter_DOU]="2";[tDate];"0")
oder
UmSort: Wenn([Formulare]![mnu_Kunden]![Filter_DOU]="3";[Umsatz];"0")
eingebe, werden die Felder in der Datenblattansicht im Textformat ausgegeben.
Leider kann man dann nicht mehr sinvoll sortieren lassen.

[tDate] ist im Datumsformat
[Umsatz] ist eine Zahl (Double)

Wie kann man das Problem lösen?
Ich habe schon mit "Wert()", "Val()", "ZDouble()" usw. rumexperimentiert. Leider ohne Erfolg.

Mit Dank im Voraus

LG
jagger




Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: MzKlMu am Januar 06, 2019, 17:25:30
Hallo,
sortiere die Ursprungsfelder.
Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: Josef P. am Januar 06, 2019, 17:44:39
Hallo!

ZitatIch habe schon mit "Wert()", "Val()", "ZDouble()" usw. rumexperimentiert. Leider ohne Erfolg.
Wie sahen diese Experimente aus?

Zum Problem:
Welchen Datentyp hat deiner Meinung nach der Ausdruck "0" in Wenn([Formulare]![mnu_Kunden]![Filter_DOU]="2";[tDate];"0")

mfg
Josef
Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: jagger am Januar 06, 2019, 17:58:43
@
Zitat von: Josef P. am Januar 06, 2019, 17:44:39
Hallo!

ZitatIch habe schon mit "Wert()", "Val()", "ZDouble()" usw. rumexperimentiert. Leider ohne Erfolg.
Wie sahen diese Experimente aus?


es wurde weiterhin als Textfeld ausgegeben oder es kam die
Fehlermeldung, dass der Ausdruck oder die Berechnung zu komplex sind.

Zitat von: Josef P.
Zum Problem:
Welchen Datentyp hat deiner Meinung nach der Ausdruck "0" in
code]Wenn([Formulare]![mnu_Kunden]![Filter_DOU]="2";[tDate];"0")[/code]

mfg
Josef

auch bei
DatSort: Wenn([Formulare]![mnu_Kunden]![Filter_DOU]="2";[tDate];"")

auch bei wird es in ein Textfeld umgewandelt.
Das Gleiche passiert ja auch mit dem [Umsatz] und würde ich denken, dass "0" eine Datentyp "Zahl" bleiben könnte.

@MzKlMu,

wenn ich das mache, kann man die Sortierung des Listenfeldes nicht per "Knopfdruck" ändern.
Des wegen versuchen ich die Sortirung mit den "Zweifeldern" zu realisieren.
Oder kann man die Sortierung eine bestehenden Abfrage mit VBA beeinflussen?
Auch will ich dem Listenfeld auch keine andere (anders sortiert) Abfrage zuweisen.

Aber erst einmal Danke für die Anregungen.

LG
jagger

Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: Josef P. am Januar 06, 2019, 18:12:12
Zitatwürde ich denken, dass "0" eine Datentyp "Zahl" bleiben könnte.
"0" ist ein Text, da man Text in Jet/ACE-SQL mit " oder ' kennzeichnet.

Wenn([Formulare]![mnu_Kunden]![Filter_DOU]="2";[tDate];"0")
vs.
Wenn([Formulare]![mnu_Kunden]![Filter_DOU]="2";[tDate];0)

Auch zum Probieren:
Wenn([Formulare]![mnu_Kunden]![Filter_DOU]="2";[tDate];Null)

mfg
Josef
Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: jagger am Januar 06, 2019, 18:23:51
@Josef,

Wenn([Formulare]![mnu_Kunden]![Filter_DOU]="2";[tDate];0)
und Wenn([Formulare]![mnu_Kunden]![Filter_DOU]="3";[Umsatz];0)

ist die Lösung. Super! Danke!
Was doch so ein paar Gänsefüsschen ausmachen.  ::)

Jetzt funktioniert das prima

LG und noch einen schönen Abend
jagger
Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: MzKlMu am Januar 06, 2019, 18:36:21
Hallo,
man kann auch die Datenherkunft eines Listenfeldes per Knopfdruck umsortieren.
Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: jagger am Januar 06, 2019, 18:43:46
@MzKlMu,

Zitat
Auch will ich dem Listenfeld auch keine andere (anders sortiert) Abfrage zuweisen.

Danke für den Tipp, aber das wollte ich eben nicht.
Ich finde diese Lösung besser, da es nur eine Abfrage (Datenquelle) gibt. Wenn mal was verändert werden soll,
muss man nur eine Datenqwelle anpassen.

LG
jagger
Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: MzKlMu am Januar 06, 2019, 19:08:45
Hallo,
von einer Abfrage habe ich auch gar nichts gesagt. Die eigentliche Datenquelle bleibt unangetastet. Das wird nur temporär geändert.
Me.ListenFeldname.RowSource = "Select Feldname1, Feldname2 From Tabellename Order By tDate Desc"
sortiert das Listenfeld nach tDate absteigend.
Du hast dann immer noch nur eine Abfrage die beim 1. Anzeigen des Listenfeldes greift.
Mit einem Button kannst Du eine umsortierte Datenherkunft zuweisen.
Die Zuweisung von RowSource führt auch ein Requery aus, sodass das Ergebnis sofort zu sehen ist.

Wenn Du dann Deine Sortierwünsche in eine Optiongruppe packst, kannst Du blitzschnell ohne jeweils extra Buttons die 6 Sortierungen (3 Felder Aufsteigend/Absteigend) einstellen.
Auch ein Kombifeld wäre möglich mit 3/6 Auswahlmöglichkeiten. Platzsparenderer und einfacher als die Buttons. Und die Codepflege für Änderungen ist auch einfacher.
Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: jagger am Januar 06, 2019, 19:21:11
Hallo MzKlMu,

das geht natürlich auch, aber die Abfrage zu dem Listenfeld ist etwas umfangreicher.
SELECT tab_ex_Kunden.AGKDNR, tab_ex_Kunden.LFKDNR, Nz([Ort]) AS City, Nz([Strasse]) AS Street, tab_ex_Kunden.Suchname, tab_ex_Kunden.Einkäufer, IIf([Formulare]![mnu_Kunden]![sfKdNr]<>"*",[qry_lbx_IN_mnu_Kunden_StKoll]![Kollkürzel],[qry_lbx_IN_mnu_Kunden_Termine]![Kollkürzel]) AS Ausdr1, qry_lbx_IN_mnu_Kunden_Termine.tProgramm, qry_lbx_IN_mnu_Kunden_Termine.tCaption AS Termingrund, qry_lbx_IN_mnu_Kunden_Termine.tNotiz AS Bemerkung, Format$([tDate],"dd/mm/yy") AS Datum, qry_lbx_IN_mnu_Kunden_Termine.tUm, qry_lbx_IN_mnu_Kunden_Termine.tTimeOn, qry_lbx_IN_mnu_Kunden_Termine.tLocation, qry_lbx_IN_mnu_Kunden_Umsatz_04.Umsatz, IIf([Formulare]![mnu_Kunden]![Filter_DOU]="2",[tDate],0) AS DatSort, IIf([Formulare]![mnu_Kunden]![Filter_DOU]="3",[Umsatz],0) AS UmSort, Nz([ACC]) AS AccS, tab_ex_Kunden.Haka
FROM ((tab_ex_Kunden LEFT JOIN qry_lbx_IN_mnu_Kunden_StKoll ON tab_ex_Kunden.AGKDNR = qry_lbx_IN_mnu_Kunden_StKoll.AGKDNR) LEFT JOIN qry_lbx_IN_mnu_Kunden_Termine ON tab_ex_Kunden.AGKDNR = qry_lbx_IN_mnu_Kunden_Termine.tAGKDNR) LEFT JOIN qry_lbx_IN_mnu_Kunden_Umsatz_04 ON tab_ex_Kunden.AGKDNR = qry_lbx_IN_mnu_Kunden_Umsatz_04.AGKDNR
WHERE (((Nz([tDate])) Between [Formulare]![mnu_Kunden]![Dvon] And [Formulare]![mnu_Kunden]![Dbis]) AND ((Nz([kdnr])) Like [Formulare]![mnu_Kunden]![sfKdNr])) OR ((([Formulare]![mnu_Kunden]![Dvon]) Is Null))
GROUP BY tab_ex_Kunden.AGKDNR, tab_ex_Kunden.LFKDNR, Nz([Ort]), Nz([Strasse]), tab_ex_Kunden.Suchname, tab_ex_Kunden.Einkäufer, IIf([Formulare]![mnu_Kunden]![sfKdNr]<>"*",[qry_lbx_IN_mnu_Kunden_StKoll]![Kollkürzel],[qry_lbx_IN_mnu_Kunden_Termine]![Kollkürzel]), qry_lbx_IN_mnu_Kunden_Termine.tProgramm, qry_lbx_IN_mnu_Kunden_Termine.tCaption, qry_lbx_IN_mnu_Kunden_Termine.tNotiz, Format$([tDate],"dd/mm/yy"), qry_lbx_IN_mnu_Kunden_Termine.tUm, qry_lbx_IN_mnu_Kunden_Termine.tTimeOn, qry_lbx_IN_mnu_Kunden_Termine.tLocation, qry_lbx_IN_mnu_Kunden_Umsatz_04.Umsatz, IIf([Formulare]![mnu_Kunden]![Filter_DOU]="2",[tDate],0), IIf([Formulare]![mnu_Kunden]![Filter_DOU]="3",[Umsatz],0), Nz([ACC]), tab_ex_Kunden.Haka, tab_ex_Kunden.Datentyp, tab_ex_Kunden.Aktiv, tab_ex_Kunden.Kundenstatus, Nz([Plz]), tab_ex_Kunden.Bundesland, tab_ex_Kunden.Land, Nz([Suchname]) & Nz([Strasse]) & Nz([Ort]) & Nz([Name]) & Nz([Inhaber]) & Nz([Einkäufer]) & Nz([Vorname]), tab_ex_Kunden.Ort, tab_ex_Kunden.Suchname
HAVING (((tab_ex_Kunden.AGKDNR) Like [Formulare]![mnu_Kunden]![sfAGKDNR]) AND ((Nz([Ort])) Like [Formulare]![mnu_Kunden]![sfOrt]) AND ((Nz([Strasse])) Like [Formulare]![mnu_Kunden]![sfStrasse]) AND ((IIf([Formulare]![mnu_Kunden]![Filter_DOU]="2",[tDate],0))>=0) AND ((Nz([ACC])) Like IIf([Formulare]![mnu_Kunden]![ACC]="ü","ü","*")) AND ((tab_ex_Kunden.Datentyp) Like [Formulare]![mnu_Kunden]![afDatentyp]) AND ((tab_ex_Kunden.Aktiv) Like [Formulare]![mnu_Kunden]![afAktiv]) AND ((tab_ex_Kunden.Kundenstatus) Like [Formulare]![mnu_Kunden]![afKundenstatus]) AND ((Nz([Plz])) Like [Formulare]![mnu_Kunden]![sfPLZ]) AND ((tab_ex_Kunden.Bundesland) Like [Formulare]![mnu_Kunden]![sfBundesland]) AND ((tab_ex_Kunden.Land) Like [Formulare]![mnu_Kunden]![sfLand]) AND ((Nz([Suchname]) & Nz([Strasse]) & Nz([Ort]) & Nz([Name]) & Nz([Inhaber]) & Nz([Einkäufer]) & Nz([Vorname])) Like [Formulare]![mnu_Kunden]![sfVolltextsuche]))
ORDER BY IIf([Formulare]![mnu_Kunden]![Filter_DOU]="2",[tDate],0) DESC , IIf([Formulare]![mnu_Kunden]![Filter_DOU]="3",[Umsatz],0) DESC , tab_ex_Kunden.Ort, tab_ex_Kunden.Suchname;


Da kam mir meine Version einfacher vor. Kann aber sein, dass ich das falsch sehe.

LG
jagger

Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: MzKlMu am Januar 06, 2019, 19:34:25
Hallo,
die Abfrage ist in der Tat umfangreich. Dann würde ich auch vorschlagen es so zu lassen. Allerdings, glaube ich bietet diese Abfrage noch allerhand Vereinfachungspotintial.
Wenn ich recht gezählt habe, gruppierst Du ja über alle Spalten, was ja keinen Sinn macht. Und LIKE ohne Joker (*) macht auch keinen Sinn.
Und wenn die Tabellen eindeutige Feldnamen haben (was anzustreben ist), kann auf die Tabellenamen vor den Feldnamen verzichtet werden (außer bei JOINS).
Warum verwendest Du statt des Listenfeldes nicht einfach ein Endlosformular?
Scheint mir ohnehin besser zu sein. Da wird das Umsortieren zu einem einfachen Einzeiler.
Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: jagger am Januar 06, 2019, 20:00:10
Hallo MzKlMu,

Du hast recht, die Optimierung muss ich noch angehen.
Was muss ich auswählen, um die Gruppierung nicht über alle Spalten zu machen? Ausdruck?
Mit "Und LIKE ohne Joker (*) " muss ich mich auch noch beschäftigen. Das ist noch Neuland für mich.
Habe bisher immer nur den Ausdrucksgenerator genutzt.

Das Listenfeld benutze ich, weil in dem Formular in einigen Situaionen an der gleichen Position ein optisch identisches Listenfeld mit der Möglichkeit der Mehrfachauswahl (MultiSelect simple) eingeblendet wird.

Danke und LG
jagger
Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: jagger am Januar 07, 2019, 18:56:22
Hallo MzKlMu,

noch einmal zu dem "LIKE ohne Joker (*)".
Das *bla* kommt bei mir vom Textfeld von dem Formular.
Das meinst Du doch, oder?

Wie kann ich die Sache mit den Gruppierungen über alle Spalten umgehen?

Wenn man das Ʃ Symbol anklickt, wird ja bei Funktion automatisch "Gruppierung" eingetragen.

LG
jagger

Titel: Re: Formate werden in Abfrage durch "wenn - dann" umgewandelt
Beitrag von: MzKlMu am Januar 07, 2019, 19:07:34
Hallo,
dann musst Du das Like lassen.

Lasse doch die Gruppierungzeile weg, wenn nur Gruppierung eingestellt ist (in allen Spalten) wird doch nicht aggregiert.
Oder hast Du doch eine Aggregierung drin?