Hallo supernewb,
ich kenne mich mit SQL aus, aber nicht mit Access. Dein Statement sieht nach Phantasie-Syntax aus und kann darum vermutlich nicht funktionieren.
Die grundlegende UPDATE Syntax ist:
UPDATE tabelle
SET spaltenname=wert, spaltenname=wert, …
WHERE zeilenbedingung
Du kannst da nicht beliebig Schlüsselworte hineinstreuen, du musst Dich an die vorgegebenen Sprach-Regeln halten.
- der Spaltenname kann nicht variabel sein
- der Wert muss als gültiger SQL-Ausdruck aufgebaut sein
- Du kannst nicht Befehlsteile (wie SET spalte=wert) mit einem IF oder CASE in eine Bedingung setzen.
Ich weiß nicht einmal, ob Access SQL einen CASE-Ausdruck im SELECT versteht. MS SQL Server kennt es, in Access-Beispielen taucht es auch auf, aber formal definiert ist es in der MSDN oder docs.microsoft.com nicht. Zumindest nicht da, wo ich zu suchen versucht habe. Die Zeiten, wo die Doku-Autoren von MS etwas geschrieben haben, das mir sinnvoll erschien, sind seit 15 Jahren vorbei.
Ich würde Dir drei UPDATE-Befehle empfehlen:
UPDATE Mitarbeiter SET Beauftragung=? WHERE ID=? AND Beauftragung IS NULL
UPDATE Mitarbeiter SET Beauftragung2=? WHERE ID=? AND Beauftragung2 IS NULL
UPDATE Mitarbeiter SET Beauftragung3=? WHERE ID=? AND Beauftragung3 IS NULL
Man kann das auch in ein UPDATE Statement packen:
UPDATE Mitarbeiter
SET Beauftragung=IIF(Beauftragung is null, ?, Beauftragung),
Beauftragung2=IIF(Beauftragung2 is null, ?, Beauftragung2),
Beauftragung3=IIF(Beauftragung2 is null, ?, Beauftragung3),
WHERE ID=?
Da musst Du dann passend die Werte für die ? übergeben. Ob das komplexe Statement schneller ist als drei einzelne, weiß ich nicht. Musst Du ausprobieren.
Wie Du dem MM_editCmd die Parameter passend beibringst, kann ich Dir nicht sagen. Wie gesagt, ich kene
Rolf
sumpsi - posui - clusi