Aktualisierungsabfrage mit untersch. Bedingungen

Hallo,

ich habe folgendes Problem: ich habe eine ACCESS Datenbank, in der ich (aus bestimmten Gründen) zehn Tabellen mit denselben Variablen (Feldern) habe. Ich möchte gern eine Aktualisierungsabfrage schreiben, die in ca. 30 Variablen (Feldern), die in jeder Tabelle gleich sind, den Wert Null setzt, falls die jeweilige Variable (das jeweilige Feld) leer ist. Mein Problem ist, dass ich gern nur eine Abfrage mit SQL schreiben möchte (oder wenigstens nur eine Abfrage pro Tabelle).

Allerdings kann ich in einer Aktualisierungsabfrage nicht unterschiedliche Bedingungen für unterschiedliche Felder angeben, sondern nur eine Bedingung unter der alle Felder aktualisiert werden.
Ich wollte es gern auf diese Art machen (ein Beispiel für 2 der zehn Tabellen):
UPDATE Amt1, Amt10 SET Amt1.resfinan = 0 WHERE (((Amt1.resfinan) Is Null)), Amt10.resfinan = 0 WHERE (((Amt10.resfinan) Is Null));

Diese Lösung ergibt aber leider einen Syntaxfehler. Wie würde die korrekte Schreibweise bzw. ein Lösungsweg aussehen?

Vielen Dank für eure Hilfe,
Lars

Hallo,

UPDATE Amt1, Amt10 SET Amt1.resfinan = 0 WHERE
(((Amt1.resfinan) Is Null)), Amt10.resfinan = 0 WHERE
(((Amt10.resfinan) Is Null));

Diese Lösung ergibt aber leider einen Syntaxfehler.

logisch 2x WHERE geht nicht!

Wie würde die korrekte Schreibweise bzw. ein Lösungsweg aussehen?

verwende IIF (WENN)

UPDATE Amt1, Amt10
SET Amt1.resfinan = IIF(Amt1.resfinan = NULL;0;Amt1.resfinan),

Grüße aus Rostock
Wolfgang
(Netwolf)

Hallo,

ich habe folgendes Problem: ich habe eine ACCESS Datenbank, in
der ich (aus bestimmten Gründen) zehn Tabellen mit denselben
Variablen (Feldern) habe.

diese „bestimmten Gründe“ hätte ich gern mal gewußt…

Ich möchte gern eine
Aktualisierungsabfrage schreiben, die in ca. 30 Variablen
(Feldern), die in jeder Tabelle gleich sind, den Wert Null
setzt, falls die jeweilige Variable (das jeweilige Feld) leer
ist. Mein Problem ist, dass ich gern nur eine Abfrage mit SQL
schreiben möchte (oder wenigstens nur eine Abfrage pro
Tabelle).

EINE Abfrage ist nicht möglich, Du wirst wohl 10 Aktualisierungsabfragen brauchen.

Allerdings kann ich in einer Aktualisierungsabfrage nicht
unterschiedliche Bedingungen für unterschiedliche Felder
angeben, sondern nur eine Bedingung unter der alle Felder
aktualisiert werden.

naja, mal sehen… :wink:

Ich wollte es gern auf diese Art machen (ein Beispiel für 2
der zehn Tabellen):
UPDATE Amt1, Amt10 SET Amt1.resfinan = 0 WHERE
(((Amt1.resfinan) Is Null)), Amt10.resfinan = 0 WHERE
(((Amt10.resfinan) Is Null));

Diese Lösung ergibt aber leider einen Syntaxfehler. Wie würde
die korrekte Schreibweise bzw. ein Lösungsweg aussehen?

Das ist keine Lösung, weil grundsätzlich falsch/nicht möglich…

Mögliche Lösung (pro Tabelle):

UPDATE tblTabelle1 set Amt1 = IIF(Amt1 is null,0,Amt1),
Amt2 = IIF(Amt2 is null,0,Amt2),
Amt3 = IIF(Amt3 is null,0,Amt3),
.
.
Amt10 = IIF(Amt10 is null,0,Amt10)

Grundsätzlich kracht es aber im Gebälk infolge Nicht-Normalisierung der Tabellen.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

die Felder müssen natürlich „resfinan“ & Co heißen, nicht „Amt1“ etc…

dafür die Tabellen „Amt1“, „Amt2“ etc. :wink:)

Besten Dank, so hat es funktioniert, auch wenn es nun 10 Abfragen sind. Weshalb die Datenbank so strukturiert ist? Nun ja, ich habe sie so übernommen und ein umbasteln wäre zu aufwändig.