November 30, 2020, 14:40:27

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Problem mit SQL Update Befehl

Begonnen von Zoffifee, Oktober 19, 2020, 03:10:48

⏪ vorheriges - nächstes ⏩

Zoffifee

Oktober 19, 2020, 03:10:48 Letzte Bearbeitung: Oktober 19, 2020, 05:30:47 von Zoffifee
Hallo Forum,

Ich habe da ein kleines SQL Problem:

Ich habe eine Haupt- und eine Nebentabelle, sowie eine temporäre Tabelle, aus der die Daten stammen.

In der Haupttabelle steht das Schlüsselfeld (Auto-Wert) und das Feld ObjektNR, in der Nebentabelle steht ObjektNR (Auto-Wert) und Objektname.
Die Tabellen sind 1:n verknüpft, also Schlüsselfeld (1) zu ObjektNR (n).

In der temporären Tabelle stehen die Felder Schluesselfeld und ObjektName.

Die Daten von ObjektName konnte ich mit einer Select Anweisung in die Nebentabelle eintragen.

Jetzt muss ich noch mittels UPDATE die entstandenen Zahlwerte (ObjektNR) aus der Nebentabelle in die Haupttabelle schreiben und das bekomme ich nicht hin.

Mein (fehlerhafter) sql-String sieht wie folgt aus:

sSQL = "UPDATE Haupttabelle INNER JOIN Temptabelle ON Haupttabelle.Schluesselfeld = Temptabelle.Schluesselfeld " & _
        " SET Haupttabelle.ObjektNR = Nebentabelle.ObjektNR WHERE Nebentabelle.ObjektName = Temptabelle.ObjektName "
   db.Execute sSQL, dbFailOnError

Hat jemand eine Idee was daran falsch sein könnte?

MzKlMu

Oktober 19, 2020, 06:13:17 #1 Letzte Bearbeitung: Oktober 19, 2020, 07:45:22 von MzKlMu
Hallo,
man kann keine 2 Autowerte in Beziehung setzen.
Das n-Schlüsselfeld muss eine Zahl (Long) sein.

Zeige mal ein Bild des Beziehungsfensters.
Gruß
Klaus

Zoffifee

https://www.bilder-upload.eu/bild-c6dc32-1603090738.png.html

Das Feld "ObjektNR" in der Haupttabelle (n-Seite) ist long integer, kein(!) Autowert.

ebs17

Zitat... SET Haupttabelle.ObjektNR = Nebentabelle.ObjektNR ...
Man kann nicht einfach eine Tabelle verwenden, ohne sie vorher im FROM-Teil der Abfrage(ebene) aufgeführt zu haben.

In der Jet-Aktualisierung wäre der FROM-Teil der UPDATE-Teil.
Mit freundlichem Glück Auf!

Eberhard

Zoffifee

Oktober 19, 2020, 17:29:16 #4 Letzte Bearbeitung: Oktober 19, 2020, 18:04:53 von Zoffifee
Ah so, also noch eine "join" Anweisung?

Ich habe es jetzt mal so versucht:

sSQL = "UPDATE (Haupttabelle INNER JOIN Temptabelle ON Haupttabelle.Schluesselfeld = Temptabelle.Schluesselfeld) " & _
        " INNER JOIN Nebentabelle ON Nebentabelle.ObjektName = Temptabelle.ObjektName" & _
        " SET Haupttabelle.ObjektNR = Nebentabelle.ObjektNR " & _
        " WHERE Nebentabelle.ObjektName = Temptabelle.ObjektName "

Das bewirkt nur leider gar nichts.  :'(

Es gibt keine Fehlermeldung und es werden keine Daten geschrieben.

ebs17

ZitatEs gibt keine Fehlermeldung
Das ist schon erst einmal positiv erstaunlich. Viele JOIN's (Unterabfragen) und Aktualisierungsabfragen unter Jet, das ist ein heikles Thema, weil sich da Jet etwas doof anstellt (auch bei sichtbar korrekter Syntax).
Zitates werden keine Daten geschrieben
Gibt es denn welche nach der vorgenommenen Filterung?

Nebenbei: JOIN und Filterung sind praktisch das Gleiche, da braucht man keine doppelte Maßnahme.
Mit freundlichem Glück Auf!

Eberhard

Zoffifee

Ich habe jetzt die Zeile aus der Haupttabelle rausgelöscht und neu angelegt.

Jetzt funktioniert es, warum auch immer. :-)

Zoffifee

Den Button "Thema gelößt" würde ich gerne drücken, kann ihn aber leider nicht finden.