Abfrageeditor zeigt nicht alles

Moderator: ModerationP

Abfrageeditor zeigt nicht alles

Beitragvon Gast » 26. Apr 2021, 13:51

Hallo,
eine Abfrage enthält als erstes Select den *-Joker, dann kommen einige Aliase zur Berechnung.
Entworfen im Abfrageeditor, funktioniert auch im Formular, alle Felder werden gezeigt.
Nicht so in der Datenblattansicht des Editors, dort fehlen viele Felder aus den Joker-Feldern.
Daher die Frage, ob der Editor seine Macken hat und ob man sich auf ihn verlassen kann.
VG Peter
Gast
 

Re: Abfrageeditor zeigt nicht alles

Beitragvon knobbi38 » 26. Apr 2021, 14:57

Hallo Peter,

auf die QBE kann man sich diesbezüglich schon verlassen. Wenn due es genau wissen möchtest, schaltest du in die SQL-Ansicht um.
Meistens sitzt der Fehler vor dem PC.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3261
Registriert: 02. Jul 2015, 14:23

Re: Abfrageeditor zeigt nicht alles

Beitragvon Gast » 26. Apr 2021, 15:23

Hallo,
Meistens sitzt der Fehler vor dem PC.

Da besteht kein Zweifel. Der Beweis ist hier: :lol:
Mit
Code: Alles auswählen
SELECT Nachname, IIf([Geschlecht] Is Not Null, IIf([Geschlecht]='M', "Herr", "Frau"),"") AS Anrede
FROM tblPersonen;
läuft die Abfrage.
Mit Nz() beiß ich mir die Zähne aus, aber immerhin läuft so problemlos die Geschlechtsumwandlung (alles "Herr"außer bei NULL):
Code: Alles auswählen
SELECT Nachname, IIf(Nz([Geschlecht],"")<>"",IIf("[Geschlecht]='M'","Herr","Frau"),"") AS Anrede
FROM tblPersonen;

Was ist da eigentlich verkehrt?
VG Peter
Gast
 

Re: Abfrageeditor zeigt nicht alles

Beitragvon KlausMz » 26. Apr 2021, 15:35

Hallo,
was willst Du damit jetzt beweisen ?
Da ist ja kein * zu sehen.

Übrigens, so etwas löst man mit einer Tabelle für das Geschlecht und kann damit auch gleich die Briefanrede erfassen.
Und spart sich dann das IIf Gedöns.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40099
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Abfrageeditor zeigt nicht alles

Beitragvon Bitsqueezer » 26. Apr 2021, 16:02

Hallo,

das Sternchen sollte man grundsätzlich in Abfragen vermeiden und immer eine konkrete Feldliste angeben.

Im Abfrageeditor geht das ganz simpel: Doppelklick auf die dargestellte Tabelle markiert ALLE Felder, die man dann per Drag&Drop nach unten ziehen kann - fertig.

Ich weiß nicht genau, ob das bei Access auch so ist und habe gerade keine Lust, es zu testen, aber in SQL Server, bei dem Abfragen "Views" heißen, ist es so, daß ein "SELECT *" in einer View nur den Momentan-Designstand zum Zeitpunkt der Viewerstellung aufnimmt und in die Metadaten der View speichert.

Ändert man danach das Tabellendesign, werden neue Felder in der View nicht sichtbar, da sie zum Zeitpunkt der Erstellung noch nicht existierten. Gefährliche Sache also, sich auf das "*" zu verlassen. Innerhalb der gleichen Abfrage kann man das verwenden, solange sich das "SELECT *" auf eine Unterabfrage der gleichen Abfrage bezieht (die dann eine konkrete Feldliste verwenden muß), da dann nur die Felder aus der gleichen Abfrage verwendet werden.

Wie gesagt, nicht getestet, ob das bei Access auch so ist, aber generell gibt es keinen guten Grund, außer Programmiererfaulheit, diese Methode anzuwenden. Eine Abfrage soll immer nur so wenig Felder wie möglich verwenden, nur genau so viele, wie man wirklich im Ergebnis braucht. Also auch nicht solche Felder, die man nur in z.B. WHERE abfragen möchte, aber ansonsten in der Ergebnisliste für den Verwender nicht gebraucht werden. So schreibt man performante Abfragen.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8276
Registriert: 21. Jun 2007, 12:17

Re: Abfrageeditor zeigt nicht alles

Beitragvon Gast » 26. Apr 2021, 16:52

Hallo,
Joker verwende ich nie, nur jetzt, um einen kurzen SQL-String zu haben. Den Joker habe ich jetzt auch rausgelassen, um das Problem bei der 2. Abfrage einzugrenzen. Vielleicht liegt es ja an dem Ausdruck. Läuft es fehlerlos, packe ich die anderen Felder dazu.
Wo liegt denn bei der 2. Abfrage der Fehler?
so etwas löst man mit einer Tabelle für das Geschlecht und kann damit auch gleich die Briefanrede erfassen.

Denkst du an ein berechnetes Feld in der Tabelle? Für 2 Buchstaben M und W extra eine Tabelle und da auch noch die Anrede rein? Ist ja ein Verstoß gegen die 2. NF.
Das könnte und soll doch die Abfrage leisten.
VG Peter
Gast
 

Re: Abfrageeditor zeigt nicht alles

Beitragvon KlausMz » 26. Apr 2021, 17:00

Hallo,
Ist ja ein Verstoß gegen die 2. NF.
Nein, das ist mit Sicherheit kein Verstoß gegen die Normalform.
Wer IIf verwenden muss/will hat ein Problem mit der Normalform.

Lege Dir eine Tabelle an mit folgenden Feldern.

Code: Alles auswählen
GeschlID       Kürzel  Anrede   Briefanrede
  0            NULL     NULL       NULL
  1              m      Herr      Sehr geehrter
  2              w      Frau      Sehr geehrte

NULL = leeres Feld

In die jetztige Tabelle nimmst Du die GeschlID als Fremdschlüssel auf.
0 als Standardwert.
Die Geschlechsttabelle in den Beziehungen verknüpfen.
Geschlecht per Kombi dann wählen.

Und schon hat sich IIf erledigt.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40099
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Abfrageeditor zeigt nicht alles

Beitragvon Gast » 26. Apr 2021, 18:26

Hallo,
vielen Dank, Klaus.
Beim Lesen wird klar, dass das so gehen wird.
Ich habe auch eine Combo, die 2 Werte M/W aus der Werteliste. Ich weiß, dass du und andere das ablehnen.
Aber bei deiner Lösung habe ich doch dasselbe Problem:
wie bekommt man die Werte der Lookup-Tabelle in eine Datensatzquelle?
Also dass in einem Datensatz unter Anrede z.B. "Herr" steht, in einem anderen "Frau" (dto.die Briefanrede).
Ich habe damit mehr das Problem als mit der Umsetzung zu einem Formular.
Bei meiner Variante habe ich nur 1 Tabelle, bei deiner 2. Bei meiner Variante wird dynamisch Mann/Frau gezeigt, wenn man M/W in der Combo wählt, Auch befürchte ich auch, dass ich bei einer Abfrage mit 2 Tabellen nicht editieren kann.
Auf die 2.NF komme ich später zurück, wenn du erlaubst.
Jetzt setze ich deinen Vorschlag erst einmal um.
VG Peter
Gast
 

Re: Abfrageeditor zeigt nicht alles

Beitragvon KlausMz » 26. Apr 2021, 19:06

Hallo,
Über eine Abfrage und der Verknüpfung über die Schlüsselfelder hast Du automatisch alle Werte aus beiden Tabellen zur Anzeige zur Verfügung.
Mit der richtigen Zuordnung.
Und 2 Tabellen mit einer Inner Join Verknüpfung kannst Du garantiert auch editieren.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40099
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Abfrageeditor zeigt nicht alles

Beitragvon ComputerVersteher » 26. Apr 2021, 19:49

Gast hat geschrieben:Da besteht kein Zweifel. Der Beweis ist hier:
Mit

SELECT Nachname, IIf([Geschlecht] Is Not Null, IIf([Geschlecht]='M', "Herr", "Frau"),"") AS Anrede
FROM tblPersonen;
läuft die Abfrage.
Mit Nz() beiß ich mir die Zähne aus, aber immerhin läuft so problemlos die Geschlechtsumwandlung (alles "Herr"außer bei NULL):

SELECT Nachname, IIf(Nz([Geschlecht],"")<>"",IIf("[Geschlecht]='M'","Herr","Frau"),"") AS Anrede
FROM tblPersonen;

Was ist da eigentlich verkehrt?


Verkehrt sind die doppelten Anführungszeichen in der zweiten IIf Bedingung:

Code: Alles auswählen
IIf("[Geschlecht]='M'"


Die Lösung von Klaus hat noch den Vorteil. das Du zusätzliche Geschlechter einfach nur in die Tabelle einfügen musst, statt überall den Code zu ändern!

Gruß CV
"Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."
Benutzeravatar
ComputerVersteher
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 526
Registriert: 23. Jul 2016, 18:17

Re: Abfrageeditor zeigt nicht alles

Beitragvon knobbi38 » 26. Apr 2021, 20:39

Hallo Peter,

für so etwas wird eigentlich eine Lookup-Tabelle verwendet, so wie Klaus das schon vorgeschlagen hat, einfach deshalb, weil man damit auch noch andere Informationen wie Anrede usw. mit hinterlegen kann.

Was du als Problem mit der Lösung ansiehst, ist eigentlich keines. Normalerweise arbeitet man nicht direkt auf den Tabellen oder Abfragen und in Formularen wird so ein Join schlichtweg mit einer Komboxbox umgesetzt; bei einem Report spielt die Editierbarkeit keine Rolle.

Aber mal angenommen, du möchtest aus anderen Gründen bei deiner Werteliste bleiben, dann könnte man bei numerischen Werten das anstatt mit einer IIF Kaskade, dabei bekomme ich immer Assoziationen zu den Wenn-Formelungetümen in Excel, auch mit einer schlichten Choose -Anweisung lösen:
Code: Alles auswählen
SELECT Vorname, Nachname,
  Choose(nz(GeschlechtID),"Herr","Frau") as Anrede
FROM tblPersonen;

Wobei ich jetzt mal die Werte NULL,1,2 für [GeschlechtID] aus der Vorlage von Klaus entnommen habe.

oder alternativ bei einer Werteliste mit Buchstaben:
Code: Alles auswählen
SELECT Vorname, Nachname,
  Switch(
    Geschlecht="w","Frau",
    Geschlecht="m","Herr"
  ) AS Anrede
FROM tblPersonen2;


Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3261
Registriert: 02. Jul 2015, 14:23

Re: Abfrageeditor zeigt nicht alles

Beitragvon Gast » 30. Apr 2021, 13:06

Hallo,
leider komme ich erst jetzt wieder an die DB.
mit Sicherheit kein Verstoß gegen die Normalform

Es gibt in der Tabelle GeschlID, Kürzel, Briefanrede und Anrede.
M.E. ein Verstoß gegen die 2. NF. Nach der soll doch jedes Feld nur vom Schlüssel abhängen (1.NF vorausgesetzt). Hier hängt aber Briefanrede und/oder Anrede vom Kürzel ab. Es ergibt sich eine Redundanz. Es wären also durchaus Eingaben denkbar wie:
Code: Alles auswählen
GeschlID       Kürzel  Anrede   Briefanrede
  0            NULL     NULL       NULL
  1              m      Herr      Sehr geehrte
  2              w      Herr      Sehr geehrte
  3              m      Frau      Sehr geehrter

und natürlich die richtigen. Hier ist das überschaubar, da man sich da auskennt, um Fehler zu erkennen. Aber bei komplexem Sachverhalt?
Wenn man die Fehler bei der Eingabe im Formular vermeiden will, bleibt nur dei Kontrolle durch VBA im Sinne von: Wenn Kürzel = m, dann Anrede = Herr und Briefanrede = Sehr geehrter
Das macht man natürlich nicht, weil man es überschaut.
Aber beim Bsp PLZ/Ort ist es undurchschaubar. Auch ein Verstoß gegen die 2. NF. Durchaus könnte Berlin die PLZ von Köln UND in einem amderen Datensatz die von Pusemuckel haben. Aber auch hier macht man keine Lookup-Tabelle.
Also ich finde den Vorschlag prima und habe angefangen, das umzubauen.
Aber "mit Sicherheit kein Verstoß gegen die Normalform" (2.NF) sehe ich anders. Aber vielleicht lerne ich dazu.
Das Choose probiere ich später.
Gruß Peter
Gast
 

Re: Abfrageeditor zeigt nicht alles

Beitragvon Bitsqueezer » 30. Apr 2021, 14:48

Hallo,

das kommt davon, wenn man den Kopf zu sehr in Normalform-Wolken hat und weniger praxistauglich arbeitet.

Ja, Du hast recht, diese Redundanz wäre denkbar, aber nur, wenn man seine Tabelle nicht ordentlich designt.
Selbstverständlich legt man einen Unique Index auf "Kürzel" und schon hat sich das Problem erledigt.

Im Regelfall wird das bei den meisten Lookup-Tabellen so gemacht, daß das Hauptnachschlagefeld mit einem Unique Index versehen wird. Damit ist das Anlegen von Duplikaten unmöglich, entsprechend kann es auch zu keinen Redundanzfehlern kommen.

Gegen Eingabefehler kann man nur validieren. Aber in dem Fall hier kann man ebenso einen Unique Index auf "Anrede" und einen auf "Briefanrede" setzen, somit kann auch hier nie zweimal das gleiche eingegeben werden - kein Code notwendig, keine Validierung notwendig, keine Redundanz.

Bei PLZ/Ort würde das theoretisch genauso funktionieren, aber "Neustadt" gibt es eben nicht nur mit einer PLZ und hier muß der User selbst aufpassen, das läßt sich weder per Code noch mit Indizes abfangen. Man muß halt immer das Ziel im Auge behalten, und nicht Normalformen bedienen. Das macht man nur im theoretischen Datenbanklernteil, nicht in der Praxis.

Wer eine Adresstabelle bis zum Abwinken normalisiert, erhält eine nicht mehr praxistaugliche Adresstabelle, die kaum noch zu pflegen ist. Es muß immer eine Verhältnismäßigkeit zwischen Aufwand und Nutzen bestehen, dabei hilft die Normalisierung beim Design, aber ist nicht für alle Fälle immer anwendbar, es kommt IMMER auf den Einsatzzweck an.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8276
Registriert: 21. Jun 2007, 12:17

Re: Abfrageeditor zeigt nicht alles

Beitragvon Gast » 01. Mai 2021, 19:23

Hallo,
du beziehst dein Ja auf die denkbare Redundanz. Mir geht es aber darum, ob ich mit meiner Bewertung richtig liege, dass Kürzel, Anrede und Briefanrede in derselben Tabelle aus theoretischer Sicht gegen die 2.NF verstoßen. Sie ist aus praktischer Sicht durchaus sinnvoll, aber ich in meiner "Normalform-Wolke" bin auf die Idee gekommen, die 2.NF zu wahren und das durch eine Abfrage zu regeln.
Hier liegt ja nur eine kleine Tabelle vor. Speicher uninteressant. Aber bei größeren Datenbeständen ein Aufblähen, wenn man z.B. auf die Idee käme, in einem Feld AdresseKomplett die Felder Anrede, Vorname, Nachname, PLZ, Ort, Straße zusammenzuführen. Was ja nun ein Verstoß gegen die 1. und 2. NF wäre. Das macht man eher durch eine Abfrage, wenn überhaupt. Aber "Vorname, Nachname" zusammen wäre schon denkbar - auch in einer Tabelle durch ein berechnetes Feld.
Gehst du da mit oder würdest du das eher durch eine Abfrage regeln? Ich weiß, es kommt auf die Größe der DB an, ob man 100 DS hat oder 10.000 oder mehr. Also ein Jain?
einen Unique Index auf "Anrede" und einen auf "Briefanrede" setzen
Müsste da nicht auch ein Mehwertindex stehen?
kein Code notwendig, keine Validierung notwendig, keine Redundanz.
Würde ich einschränken, denn die Access-Meldung beim Verstoß ist für User total verwirrend und muss durch Code abgefangen werden. Wie am besten habe ich noch nicht parat. Gibt es da was gängiges?
Gruß Peter
Gast
 

Re: Abfrageeditor zeigt nicht alles

Beitragvon Bitsqueezer » 01. Mai 2021, 22:12

Hallo,

ja, ein Mehrfachindex wäre natürlich möglich, aber der bringt hier ja nichts. Wenn Anrede und Briefanrede und Kürzel jeweils eindeutig sind, kann es auch keine Kombination geben, die man dann noch abfangen können müßte.

Ganz ehrlich: Ich befasse mich seit rd. 30 Jahren mit Datenbanken und die Normalformen sind mir so unwichtig, daß ich nicht mal sagen kann, was welche Normalform ist, wenn ich es nicht nachschlage.

Wenn Du mit "Zusammenführen" meinst, alle diese Felder in ein Feld zusammenzubauen, dann würde ich bei einem Datenbankserver auf jeden Fall ein persistentes, berechnetes Feld verwenden, das man dann auch indizieren kann (sofern die Länge gesamt nicht mehr als 8KB ist). Allerdings eine Adresse so zusammenzuziehen, sehe ich eher als unsinnig an, denn wozu sollte man das je brauchen? Für "Nachname, Vorname" - auf jeden Fall auf diese Weise, denn das braucht man durchaus öfter und spart es, das in jeder Abfrage neu zu definieren, ggf. dann auch noch jedesmal anders.
Eine Adresstabelle ist übrigens in der Praxis meistens einfach redundant, lediglich globalere Einheiten wie Länder oder Kontinente würde man noch normalisieren. Alles darunter ändert sich zu schnell und macht maximal für Postunternehmen oder Kartenersteller noch Sinn, nicht jedoch in z.B. einer Kundendatenbank.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8276
Registriert: 21. Jun 2007, 12:17


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste