Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

PLZ Abfrage geht nicht in Kreuztabelle

Begonnen von accessy, Juni 08, 2016, 20:18:31

⏪ vorheriges - nächstes ⏩

accessy

In einer normalen Abfrage funktioniert das hier gut:
Ich starte die Abfrage, gebe für die Frage z.B. 38 ein und erhalte alle Kunden mit der PLZ 38.
In der Abfrage, unter Kriterien steht
Wie [PLZ Bereich] & "*"

Gebe ich den gleichen Text in der Kreuztabellenabfrage ein, funktioniert es nicht.
Jet-Datenbankmodul erkennt [PLZ-Bereich] nicht als gültigen Feldnamen an....

Was muss ich denn in den Kriterien eingeben, damit beim Öffnen der Kreuztabelle zuerst der PLZ Bereich abgefragt wird, so wie oben in der normalen Abfrage?

Danke, Gruß Achim

MaggieMay

Hallo Achim,

ZitatJet-Datenbankmodul erkennt [PLZ-Bereich] nicht als gültigen Feldnamen an....
Wie [PLZ Bereich] & "*"

einmal mit und einmal ohne Bindestrich - das gibt schon zu denken. ;)

Wenn du dich auf eine einheitliche Schreibweise geeinigt hast, kannst du den Parameter in der Kreuztabellenabfrage als solchen deklarieren, dann sollte das wohl klappen.
Siehe auch Access-FAQ 3.18.
Freundliche Grüße
MaggieMay

accessy

Nein. Der Bindestrich wurde nur hier beim Schreiben versehentlich mit eingegeben.
Die Fehlermeldung bleibt die gleiche.

MaggieMay

Zeige bitte den SQL-Code der Kreuztabellenabfrage.
Freundliche Grüße
MaggieMay

accessy

Dies ist der Code der normalen Abfrage. Hier geht das mit der PLZ Frage.

SELECT [Kunden - sortiert nach Name].ID, [Kunden - sortiert nach Name].Kunde, [Kunden - sortiert nach Name].Adresse, [Kunden - sortiert nach Name].PLZ, Werkzeug_Artikel.Umsatz, [Kunden - sortiert nach Name].Ort, [Kunden - sortiert nach Name].Tel, [Kunden - sortiert nach Name].Fax, [Kunden - sortiert nach Name].Bemerkung, [Kunden - sortiert nach Name].Branche, [Kunden - sortiert nach Name].KNR, [Kunden - sortiert nach Name].Rabatt, [Kunden - sortiert nach Name].Zuletzt_Geaendert, [Kunden - sortiert nach Name].Distanz
FROM [Kunden - sortiert nach Name] INNER JOIN Werkzeug_Artikel ON [Kunden - sortiert nach Name].ID = Werkzeug_Artikel.ID
GROUP BY [Kunden - sortiert nach Name].ID, [Kunden - sortiert nach Name].Kunde, [Kunden - sortiert nach Name].Adresse, [Kunden - sortiert nach Name].PLZ, Werkzeug_Artikel.Umsatz, [Kunden - sortiert nach Name].Ort, [Kunden - sortiert nach Name].Tel, [Kunden - sortiert nach Name].Fax, [Kunden - sortiert nach Name].Bemerkung, [Kunden - sortiert nach Name].Branche, [Kunden - sortiert nach Name].KNR, [Kunden - sortiert nach Name].Rabatt, [Kunden - sortiert nach Name].Zuletzt_Geaendert, [Kunden - sortiert nach Name].Distanz
HAVING ((([Kunden - sortiert nach Name].PLZ) Like [PLZ Bereich] & "*"))
ORDER BY [Kunden - sortiert nach Name].Ort;


Dies ist der Code der Kreuztabellenabfrage. Hier geht das mit der PLZ Frage nicht.

TRANSFORM Sum(Werkzeug_Artikel.Umsatz) AS SummevonUmsatz
SELECT Werkzeug_Artikel.KNR, Kunden.PLZ, Kunden.Ort, Kunden.Kunde
FROM Kunden INNER JOIN Werkzeug_Artikel ON Kunden.KNR = Werkzeug_Artikel.KNR
GROUP BY Werkzeug_Artikel.KNR, Kunden.PLZ, Kunden.Ort, Kunden.Kunde
PIVOT Werkzeug_Artikel.Jahr;

ebs17

Wenn Du den HAVING-Mist entfernst und den Filter in eine WHERE-Klausel einsetzt (wie es sich auch syntaktisch gehört), sollte es klappen.
Mit freundlichem Glück Auf!

Eberhard

accessy

Ich habe leider nichts von dem Verstanden, was du meinst.

Wenn ich aber in den oberen SQL Texte schaue, da wo dieses HAVING steht, frage ich mich, warum das weg soll.... Der Code geht einwandfrei...

ebs17

Zitatgeht einwandfrei...
Einwandfrei wäre korrekte Syntax: Daten auswählen mit dem SELECT-Befehl
Dabei: WHERE filtert VOR dem Gruppieren, HAVING filtert NACH dem Gruppieren.
Die Kreuztabellenabfrage beinhaltet sichtbar auch einen Gruppieren-/Aggregieren-Vorgang.
Also: Man muss nicht jeden Mist übernehmen und für richtig halten, was der Abfrageeditor erzeugt. Die Klammerinflation ist ja sichtbar auch überflüssig.
TRANSFORM
   SUM(W.Umsatz) AS SummevonUmsatz
SELECT
   W.KNR,
   K.PLZ,
   K.Ort,
   K.Kunde
FROM
   Kunden AS K
      INNER JOIN Werkzeug_Artikel AS W
      ON K.KNR = W.KNR
WHERE
   K.PLZ LIKE [PLZ Bereich] & "*"
GROUP BY
   W.KNR,
   K.PLZ,
   K.Ort,
   K.Kunde
PIVOT
   W.Jahr
;
Mit freundlichem Glück Auf!

Eberhard

MaggieMay

#8
Sorry, aber ich sehe keinen Unterschied zwischen dem in #7 (ebs17) und #4.2 (Accessy) geposteten SQL-Code .
Und in keinem der Beispiele spielen Parameter eine Rolle...

Daher meine Frage an Accessy:
Welcher Zusammenhang besteht zwischen den von dir in #4 gezeigten SQL-Codes?

Ansonsten beachte bitte auch meinen Hinweis in #1 auf die möglicherweise erforderliche Parameter-Deklaration.
Freundliche Grüße
MaggieMay

accessy

Es gibt keinen Zusammenhang in den beiden Codes.
Der erste ist eine ganz normale Abfrage, die nach Eingabe der PLZ (z.B. 12) einfach nur alle Kunden anzeigt, die als PLZ mit 12 beginnen. Mehr nicht.

Der andere Code ist eine Kreuztabelle mit den Umsätzen aller Jahre.
Da aber in dieser Kreuztabelle immer alle Kunden gelistet werden, dachte ich mir diese Abfrage zu nehmen und einfach im Feld Kriterien die Bedingung der PLZ einzubauen....

ebs17

ZitatSorry, aber ich sehe keinen Unterschied zwischen dem in #7 (ebs17) und #4.2 (Accessy) geposteten SQL-Code .
Und in keinem der Beispiele spielen Parameter eine Rolle...
Das Sehen könnte sich ändern, wenn Du die Anweisung noch einmal anschaust. Es gibt eine WHERE-Klausel mit einem enthaltenen Parameter.
Selbstverständlich kann man den Parameter explizit definieren und damit typensicher machen:
PARAMETERS
   [PLZ Bereich] TEXT
;
TRANSFORM
   SUM(W.Umsatz) AS SummevonUmsatz
SELECT
   W.KNR,
   K.PLZ,
   K.Ort,
   K.Kunde
FROM
   Kunden AS K
      INNER JOIN Werkzeug_Artikel AS W
      ON K.KNR = W.KNR
WHERE
   K.PLZ LIKE [PLZ Bereich] & "*"
GROUP BY
   W.KNR,
   K.PLZ,
   K.Ort,
   K.Kunde
PIVOT
   W.Jahr
;
Mit freundlichem Glück Auf!

Eberhard

accessy

Vielleicht mal zum Verständnis.
Ich habe keine Ahnung von SQL und will es auch nicht mehr lernen. Da habe ich gar keine Zeit für.
Meine kleine DB hat ein paar Formulare und Abfragen drin, die man gerade so fehlerfrei laufen.
Allein die Kreuztabelle hinzubekommen, war ein gigantisches Drama für mich.
Diese PLZ Abfrage in der Kreuztabelle wäre halt eine kleine Hilfe die große Datenmenge ein wenig einzugrenzen, mehr nicht.....

Ich dachte halt, da ist lediglich ein Syntaxfehler drin, was diese Fehlermeldung betraf....
Funktioniert halt nicht......macht nichts.....

MaggieMay

#12
Hallo,
Zitat von: Accessy am Juni 11, 2016, 10:41:01
Funktioniert halt nicht......macht nichts.....

Sorry, aber eine derartige Reaktion finde ich einfach nur ärgerlich, nachdem sich verschiedene Leute ernsthaft bemüht haben, dir zu helfen.

Wenn du allerdings nicht auf unsere Fragen eingehst - was erwartest du dann? Sich selbst erfüllende Wunder?!

Frage:
Zitat von: MaggieMay am Juni 08, 2016, 22:24:43
Zeige bitte den SQL-Code der Kreuztabellenabfrage.

Antwort:
Zitat von: Accessy am Juni 08, 2016, 23:22:08
Dies ist der Code der normalen Abfrage. Hier geht das mit der PLZ Frage.
ZitatDies ist der Code der Kreuztabellenabfrage. Hier geht das mit der PLZ Frage nicht.
In der von dir gezeigten Kreuztabellenabfrage befindet sich kein Parameter - wie bereits festgestellt.
Zumindest nicht für unsere Augen sichtbar.

Also erkläre bitte die Zusammenhänge so wie sie tatsächlich gegeben sind.

PS:
Hast du überhaupt den Versuch gemacht, meinen Tipp mit der Parameter-Deklaration in der Kreuzteabellen-Abfrage umzusetzen?
Wenn ja, wie sah dieser aus (-> SQL-Code!)?

Freundliche Grüße
MaggieMay

ebs17

ZitatIch habe keine Ahnung von SQL und will es auch nicht mehr lernen.
Das eigene Selbstverständnis zu kennen ist auch wesentlich. Vielleicht ist es besser, Rosen zu züchten statt sich mit Datenbanken zu beschäftigen.
Mit freundlichem Glück Auf!

Eberhard

accessy

Ich habe nicht gewusst, dass man in diesem Forum nur dann sinnvoll in Erscheinung treten darf, wenn man zuvor erst einmal einige Semester SQL studiert hat.

Es gibt Foren zum Beispiel Thema VBA und EXCEL, da bekommt man Antworten von Mitgliedern, die NICHT die Programmierfähigkeit hinterfragen, sondern einfach nur schreiben, was man ändern muss. Dann korrigiert das derjenige und es funktioniert, ohne dass der Anwender versteht, warum es jetzt geht.....