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
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 (http://www.donkarl.com/faq/FAQ3Tabfragen.htm#3.18).
Nein. Der Bindestrich wurde nur hier beim Schreiben versehentlich mit eingegeben.
Die Fehlermeldung bleibt die gleiche.
Zeige bitte den SQL-Code der Kreuztabellenabfrage.
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;
Wenn Du den HAVING-Mist entfernst und den Filter in eine WHERE-Klausel einsetzt (wie es sich auch syntaktisch gehört), sollte es klappen.
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...
Zitatgeht einwandfrei...
Einwandfrei wäre korrekte Syntax: Daten auswählen mit dem SELECT-Befehl (http://www.sql-und-xml.de/sql-tutorial/select-grundbegriff-zur-auswahl-von-daten.html)
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
;
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.
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....
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
;
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.....
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!)?
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.
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.....
ZitatEs gibt Foren zum Beispiel Thema VBA und EXCEL......
dann kannst Du ja dort Deinen Unverstand erweitern.....
Hallo Achim,
Was quakst du denn rum, du hast doch einen fertigen Lösungsansatz
bekommen.
Hier wird Hilfe zur Selbsthilfe angeboten.
Deine Programmierkenntnisse werden auch nicht hinterfragt, hier wird
dir (kostenlos) beigebracht wie man's macht/machen könnte.
Ausserdem wird nur danach gefragt was du gemacht hast, um darauf
eine Hilfe aufzubauen.
Und wenn du es (die Lösung finden) eigentlich gar nicht selber machen
willst, musst du dir jemanden suchen, den du dafür wahrscheinlich bezahlen musst.
gruss ekkehard
Hallo Accessy,
Zitat von: Accessy am Juni 12, 2016, 12:11:40Es gibt Foren [...] und es funktioniert, ohne dass der Anwender versteht, warum es jetzt geht.....
was mögen das wohl für Foren sein? Wenn du Fertiglösungen ohne Selbstbeteiligung suchst, ist ein Forum eher die falsche Adresse. Schließlich wollen wir hier in erster Linie Hilfe zur Selbsthilfe leisten. Wenn es anders wäre und wir unsere "Klientel" bewusst dumm halten wollten, müssten wir konsequenterweise Geld dafür nehmen - was sonst könnte der Grund dafür sein?!