Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Dan27 am Juni 15, 2014, 11:04:23

Titel: Aktualisierungsabfrage - ein Beispiel
Beitrag von: Dan27 am Juni 15, 2014, 11:04:23
Hallo,

ich sitze schon seit gestern an einem Beispiel, welches ich bisher nicht lösen konnte.

Es geht um eine Aktualisierungsabfrage. Ich schreibe kurz die Angabe, damit man weiß um was es geht sowie meinen bisherigen Lösungsansatz.

Beispiel: Für alle Firmen mit dem Kunden-Code OCEAN bis WOLZA sind die Frachtkosten, sofern sie unter EUR 100,- liegen, um 3% zu senken.

Ich habe nun also in der Entwurfsansicht die Tabelle mit den Kunden-Codes ausgewählt und gleichsam die Tabelle, in welcher sich die Frachtkosten befinden.

Ich wähle nun also die Aktualisierungsabfrage aus.

Als nächstes ziehe ich das Feld Kunden-Code hinunter und tragen im Kriterium "*OCEAN*" UND "*WOLZA*" ein.
Ebenso ziehe ich das Feld der Frachtkosten hinab und trage in der Zeile Aktualisieren [Frachtkosten]/100*97 ein.

Wenn ich nun auf aktualisieren drücke, sagt mir das Programm, dass es 0 Zeilen aktualisieren wird. Dies sollte aber definitiv nicht der Fall sein, da sehr wohl Frachtkosten unter 100,-EUR gelistet sind...

Wo ist(sind) der (die) Fehler?

Vielen Dank.
Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: MzKlMu am Juni 15, 2014, 11:17:45
Hallo,
und wo ist die Bedingung für <100 ?

Die Joker (*) sind überflüssig, Du suchst ja genau.

Zeige bitte den SQL Code der Abfrage.
Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: DF6GL am Juni 15, 2014, 11:18:45
Hallo,

hier:

Als nächstes ziehe ich das Feld Kunden-Code hinunter und tragen im Kriterium "*OCEAN*" UND "*WOLZA*" ein.

richtiger Eintrag:   "OCEAN" ODER  "WOLZA"


bei Frachtkosten kannst Du gleich schreiben:  [Frachtkosten] * 0,97

und im Kriteriumsfeld:   <100
Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: Dan27 am Juni 15, 2014, 11:43:54
Danke für die schnelle Antwort.

Ich hatte <100 als Kriterium bei den Frachtkosten gesetzt, es nur vergessen in die letzte Nachricht zu schreiben.

Hab die Joker nun rausgenommen. Leider funktioniert es immer noch nicht.

UPDATE Kunden INNER JOIN Bestellungen ON Kunden.[Kunden-Code] = Bestellungen.[Kunden-Code] SET Bestellungen.Frachtkosten = [Frachtkosten]*"0,97"
WHERE (((Kunden.[Kunden-Code])="WOLZA" And (Kunden.[Kunden-Code])="OCEAN") AND ((Bestellungen.Frachtkosten)<100));




Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: Dan27 am Juni 15, 2014, 12:16:07
Ganz allgemein sind Beispiele mit mehreren Bedingungen schwierig, wenn man noch nicht den richtigen Zugang gefunden hat, also korrekte Abfrageart, die auszuwählenden Felder usw. 

Bedauerlicherweise sind die Übungsbeispiele im Internet sehr einfach gehalten und helfen mir eigentlich kaum für meine etwas komplexeren Aufgabenstellungen.
Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: ebs17 am Juni 15, 2014, 12:39:11
ZitatGanz allgemein sind Beispiele mit mehreren Bedingungen schwierig

Nun, man sollte auf gesunden Menschenverstand und eine intakte Logik nicht verzichten.
WHERE [Kunden-Code]="WOLZA" And [Kunden-Code]="OCEAN" ...
In jeweils einem Datensatz kann [Kunden-Code] nicht gleichzeitig WOLZA UND OCEAN sein.
Diesen Hinweis hatt Franz bereits gegeben, und den Alternativvorschlag auch.
Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: Dan27 am Juni 15, 2014, 12:56:54
Hoppla. Das hatte ich übersehen. Ja, ich hab jetzt die Tabelle Kunden-Code adaptiert und in die erste Zeile des Kriteriums OCEAN und in die zweite Zeile WOLZA geschrieben.

wieder zeigt er mir an, dass er 0 Zeilen aktualisieren würde. Das kann aber nicht sein. ich würd ja drüber lachen, wenn es nicht so traurig wäre.


Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: Dan27 am Juni 15, 2014, 13:02:40
Allerdings zeigt er mir selbiges auch bei einer Löschabfrage an, welche ich gerade probiert habe, daher muss es wohl ein grundlegendes Problem sein.

Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: ebs17 am Juni 15, 2014, 13:09:34
Zitatund in die erste Zeile ...
... und in welcher Zeile steht das dritte Kriterium?

Ich halte es regelmäßig für einfacher, statt im grafischen Abfrageeditor Zeilen- und Spoaltenakrobatik zu betreiben, in der SQL-Ansicht mit der echten SQL-Anweisung zu arbeiten. Hier kann man auch besser überflüssige Klammern entfernen, die verbliebenen zählen und logisch richtig setzen.

Ach ja: Wenn man eine Thematik und deren Lösung noch nicht richtig  verstanden hat, ist es nicht unbedingt zielführend, die Aufgabe gleich mal live zu "adaptieren", es sei denn, man ist selbstverwirrungsresistent.
Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: DF6GL am Juni 15, 2014, 13:09:37
Hallo,

warum die Verjoinung mit Kunden?

Kopier den folgenden SQL-String im Abfrageentwurf in die SQL-Ansicht und führe ihn aus:

ZitatUPDATE Bestellungen SET Frachtkosten = Frachtkosten * 0.97
WHERE ([Kunden-Code]="WOLZA" Or [Kunden-Code]="OCEAN" ) AND Frachtkosten <100
Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: Dan27 am Juni 15, 2014, 13:26:54
UPDATE Kunden INNER JOIN Bestellungen ON Kunden.[Kunden-Code] = Bestellungen.[Kunden-Code] SET Bestellungen.Frachtkosten = Frachtkosten*0.97
WHERE (((Bestellungen.Frachtkosten)<100) AND ((Kunden.[Kunden-Code])="WOLZA" Or (Kunden.[Kunden-Code])="OCEAN"));


Mit ist aufgefallen, dass die Tabelle Bestellungen gar keine Datensätze "Kunden-Code" enthält. Dies würde auch erklären, warum er nichts aktualisieren konnte.
Habe daher die Tabelle Kunde zur Abfrage hinzugefügt und mich bei Kunden-Code auf jene Tabelle bezogen und siehe da... es geht noch immer nicht.
Erneut die Nachricht, dass nichts aktualisiert werden konnte.

In solchen Momenten fällt mir wieder ein, warum ich Sport und nicht Informatik studiere. Leider quälen sie uns dennoch mit den Grundlagen von Access.
Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: Dan27 am Juni 15, 2014, 13:28:11
Zitat von: DF6GL am Juni 15, 2014, 13:09:37

warum die Verjoinung mit Kunden?

Zitat

weil scheinbar nur diese Tabelle den gewünschten Kunden-Code enthält...
Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: Dan27 am Juni 15, 2014, 13:45:10
Bitte fragt mich nicht, was ich nun anders gemacht habe, aber plötzlich hat es funktioniert:

UPDATE Kunden INNER JOIN Bestellungen ON Kunden.[Kunden-Code] = Bestellungen.[Kunden-Code] SET Bestellungen.Frachtkosten = Frachtkosten*0.97
WHERE (((Kunden.[Kunden-Code])="WOLZA" Or (Kunden.[Kunden-Code])="OCEAN") AND ((Bestellungen.[Frachtkosten])<100));

Danke für die Hilfe. Habe allerdings noch 2 weitere Beispiele wo ich grad hänge =)
Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: DF6GL am Juni 15, 2014, 14:16:54
Hallo,



ZitatON Kunden.[Kunden-Code] = Bestellungen.[Kunden-Code]

bedeutet im funktionierenden Fall, dass sowohl in "Kunden" als auch in "Bestellungen" das Feld "Kunden-Code"  vorhanden sein MUSS.

insofern trifft dies:
Zitatscheinbar nur diese Tabelle den gewünschten Kunden-Code enthält
nicht zu...

Nachdem aber aus Tabelle "Kunden" gar keine weiteren Daten(Felder) gebraucht werden, kann die Verjoinung auch entfallen...


ZitatBitte fragt mich nicht, was ich nun anders gemacht habe

brauchen wir auch nicht, ich sag es Dir:

die Where-Condition ist richtig (logisch und syntaktisch) zusammengesetzt.
Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: Dan27 am Juni 15, 2014, 14:31:52
meinst du damit, dass die Kunden-Code-Daten einfach verknüpft wurden und die Tabelle Bestellungen einfach die Daten "Kunden-Code" aus der Tabelle "Kunden" (aufgrund der untereinander bestehenden Beziehung) herauslesen konnte?

Dann hätte es aber vorher ja eigentlich auch schon funktionieren müssen.

Titel: Re: Aktualisierungsabfrage - ein Beispiel
Beitrag von: Dan27 am Juni 15, 2014, 14:34:39
Gelöst =)