Autor Beitrag
cartridge
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 209

Win XP
D4 Prof,D6 Prof
BeitragVerfasst: So 03.12.06 21:13 
Hallo Leute!

Und schon wieder eine Exception:
Wenn ich eine Unterabfrage für eine UPDATE- Anweisung anwende, erhalte ich die Meldung/ Exception:
"Operation benötigt eine aktualisierbare Abfrage".
ausblenden SQL-Anweisung
1:
UPDATE Auftraege SET AktFahrer = (SELECT Fahrer FROM FahrzFahrer WHERE Kennzeichen = KFZ)					

Dieses Phenomen habe ich bei einfachen Anweisungen nicht.
Was will mir Access damit sagen? Oder: Wie mache ich es richtig? Welche Kompo muss ich verwenden oder wie muss ich sie konfigurieren? Ich habe übrigens bereits mit AdoQuery, Connection und AdoCommand gearbeitet, aber alles mit dem selben Ergebnis.
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 03.12.06 21:36 
hallo cartridge,

was willst du eigentlich mit dem "update" machen? alle datensätze für alle datensätze den fahrer setzen, welcher bei 'ner bestimmten konstallation irgend 'n werd geliefert wird? kann ich mir kaum vorstellen... aber was solls. in dieser situation baust dir den updatestring am besten selbst zusammen. dann weisst auch, was du änderst und kannt das kommando im debugger prüfen.
cartridge Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 209

Win XP
D4 Prof,D6 Prof
BeitragVerfasst: Di 05.12.06 09:40 
Ich will in der Tat alle Datensätze ändern, weil ich das Feld neu hinzugefügt habe. Ich habe dazu eine neue DB eingeführt, die die Fahrzeuge und Fahrer verwaltet ("FahrzFahrer"). Nun will ich die Referenz in der DB "Auftraege" in das Feld "ID" aus dieser neuen DB setzen. Dazu will ich den Primärschlüssel FFID der neuen DB in das Feld eintragen, indem ich es in einer Unterabfrage ermittele.Die Unterabfrage heißt dementsprechend:
ausblenden SQL-Anweisung
1:
(SELECT FFID FROM FahrzFahrer) WHERE FahrzFahrer.Kennzeichen = Auftraege.Kennzeichen					


Der Manipulationsanteil ist:
ausblenden SQL-Anweisung
1:
UPDATE Auftraege SET AktFahrer =					

Allein betrachtet ist dieser Anteil ja auch in Ordnung.

Ich weiß allerdings gar nicht, ob Access überhaupt Unterabfragen in Manipulationen zulässt. Das wäre aber wahnsinnig wichtig für mich zu wissen, da ich sonst auf ein anderes System umsteigen müsste.

Die gesamte SQL- Anweisung soll jedenfalls so aussehen:
ausblenden SQL-Anweisung
1:
UPDATE Auftraege SET AktFahrer = (SELECT FFID FROM FahrzFahrer) WHERE FahrzFahrer.Kennzeichen = Auftraege.Kennzeichen					


HILFEEEEEEEEEEEEEEEEEEEEEE!!! ;-)
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 05.12.06 22:22 
@cartridge: sorry, aber was soll denn da der SQL befehl eigentlich machen? ich persönlich hab da keine ahnung... denk, SQL wird's da nicht besser ergehen...

ansonsten kann ich nur auf meinen vorherigen post verweisen... bitte strukturiere dein problem etwas sorgfältiger...
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 05.12.06 22:32 
Grenzgaenger: Das Problem ist klar umgrenzt, und SQL ist eine Sprache, kann insofern nicht nichts verstehen. Der SQL-Server kann das auch verstehen, zumindest fast. Imo sind die Klammen falsch plaziert.

ausblenden SQL-Anweisung
1:
UPDATE Tabelle Set Feld = (select EinAnderesFeld From AndereTabelle Where AndereTabelle.Irgendwas = Tabelle.Irgendwas)					

müsste funktionieren.
Welchen Server verwendest Du? MySQL, MSSQL?

Bei MSSQL kann man es auch so lösen:
ausblenden SQL-Anweisung
1:
2:
3:
4:
UPDATE Tabelle 
   SET Feld = EinAnderesFEld
  FROM AndereTabelle
  WHERE AndereTabelle.Irgendwas = Tabelle.Irgendwas


Ich habe beide Varianten mit MSSQL getestet, sie funktionieren.

_________________
Na denn, dann. Bis dann, denn.
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 05.12.06 23:03 
@alzaimar: tja, die anweisung ist schon synktaktisch korrekt... daher auch meine frage... und deine antwort bestätigt es mir...

user profile iconalzaimar hat folgendes geschrieben:
Imo sind die Klammen falsch plaziert.


dass nicht nur ich derjenige bin, der nicht weiss was wirklich getan werden soll ;-)

ausblenden SQL-Anweisung
1:
2:
UPDATE Auftraege SET AktFahrer = (SELECT FFID FROM FahrzFahrer)              WHERE FahrzFahrer.Kennzeichen = Auftraege.Kennzeichen
                                  ----- wert für zuweisung selektiern ---    ---- abfrage welche datensätze zu ändern sind ----


denn die allgemeine syntax für das update statement lautet ja ...

ausblenden SQL-Anweisung
1:
update tabelle set feld = xxx where ....					


nix für ungut, und noch 'n schönen abend.
cartridge Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 209

Win XP
D4 Prof,D6 Prof
BeitragVerfasst: Mi 06.12.06 11:06 
Leider arbeite ich eben nicht mit dem SQL- Server, sondern mit Access. Ich habe die Beispiele von Euch jettzt mal durchgespielt. Mittlerweile bin ich mir sicher, dass Access eine Unterabfrage in einer DML Anweisung nicht zulässt. Egal, was ich mache, entweder ich bekomme eine Meldung, dass die Syntax falsch ist, bzw. dass ein Operator fehlt (wenn ich nicht mit Unterabfrage arbeite, wie Alzaimer schrieb), oder dass eine aktualisierbare Abfrage nötig ist, wenn ich mit Unterabfrage arbeite, egal, wi ich dort die Klammern setze.

Vielleicht hat ja jmd schon mal mit Access und SQL gearbeitet und kennt dieses Problem und kann mir definitiv sagen, ob es geht oder nicht.

Gruß, Ingo