SQL UPDATE Anweisung, genaue Syntax

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

herhag
**
Beiträge: 27
Registriert: Di, 19.04.2016 19:14
Wohnort: Nbg.
Kontaktdaten:

SQL UPDATE Anweisung, genaue Syntax

Beitrag von herhag »

Hallo in´s Forum,

habe schon wieder mal ´ne Frage.
Wie, genau, lautet die Syntax für folgende UPDATE-Anweisung in Base (LibreOffice)?

Code: Alles auswählen

stSql = "UPDATE ""Person"" SET ""Vorname"" = '$Vorname',""Nachname"" = '$Nachname' ,""GebDat"" = '$GebDat, ""Hausnummer"" = '$Hausnummer, ""strID"" = '$strID', ""plzID"" = '$plzID', ""Telefon"" = '$Telefon', ""Geschlecht"" = '$Geschlecht' WHERE ""ID"" = '$ID'"
REM
oSQL_Anweisung.executeUpdate(stSql)
Obiger Code schmeißt mir die untere Fehlermneldung raus:

Code: Alles auswählen

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten 
Type: com.sun.star.sdbc.SQLException
Message: Wrong data type: java.lang.IllegalArgumentException.
Meine Vermutung, ich verwende für das Datumsfeld (GebDat) ein falsche Anweisung.
Alle anderen Felder sind Textfelder (VARCHAR) außer Primärkey (ID = Integer, Autowert)

Ich habe nur etwas Erfahrung mit ASP.NET (Windows). Da ist die UPDATE-Anweisung komplett anders.
Bei BASE bin ich Novize!! :( :(

Danke für die potentielle Hilfe.

Noch ´ne Frage.
Hat jemand eine gute Literatur-Empfehlung mit anschaulichen Beispielen?
Ja, ich weiß, dass Internet ist voll davon, aber, Euere Empfehlungen wären mir sympathischer. :) :)

Danke.
Herbert
Danke für die Hilfe. :D 8)
==============================
Libre Office 5.1.1.3
PortableVersion
Windows 10
64 Bit
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: SQL UPDATE Anweisung, genaue Syntax

Beitrag von F3K Total »

Hallo Herbert,
versuche mal das Datum im Format 'yyyy-mm-dd' zu übergeben und laß die einfachen Anführungszeichen um die String-Variablen weg.
Gruß R
NTClient
****
Beiträge: 106
Registriert: Di, 19.07.2005 16:09

Re: SQL UPDATE Anweisung, genaue Syntax

Beitrag von NTClient »

Ich würde das Thema Update-Syntax gerne noch mal aufgreifen. Weniger, weil ich eine Antwort zur Frage habe, sondern weil die Überschrift zu meinem Problem passt.

Es gibt zwei Tabellen:

Tabelle "TabA" enthält die Spalten "Vornamen", "Nachnamen" und "Geburtsdatum". Das Geburtsdatum einiger Mitglieder ist falsch.

Die Tabelle "TabB" enthält ebenfalls die die Spalten "Vornamen", "Nachnamen" und "Geburtsdatum". Hier ist das Geburtsdatum richtig.

Es soll nun in TabA das Geburtsdatum geupdatet werden mit dem Geburtsdatum aus TabB und zwar dort, wo in beiden Tabellen Vor- und nachname gleich sind. Meine Idee war, in OpenOffice-Base unter Menüpunkt EXTRAS-SQL folgenden Befehl einzugeben:

update "TabA" set "Geburtsdatum" = "TabB"."Geburtsdatum" where "TabA"."Vorname" = "TabB"."Vorname" and "TabA"."Nachname" = "TabB"."Nachname" in select ("TabA"."Vorname", "TabA"."Nachname", "TabA"."Geburtsdatum","TabB"."Vorname", "TabB"."Nachname", "TabB"."Geburtsdatum" from "TabA", "TabB")

Es kommt die Fehlermeldung: Column not found: TabB.Vorname
Ich habe den Befehl mehrfach umgestellt aber ich find' keine Lösung.

Mein Problem ist, dass ich den Syntax bei einer Join-Verknüpfung nicht verstanden habe.

Weiß das einer?
Gruß Bernd!
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: SQL UPDATE Anweisung, genaue Syntax

Beitrag von RobertG »

Hallo Bernd,

vermutlich so etwas wie der folgende Code:

Code: Alles auswählen

update "TabA" AS "a" set "Geburtsdatum" = (SELECT "Geburtsdatum" FROM "TabB" where "Vorname" = "a"."Vorname" and "Nachname" = "a"."Nachname")
Du suchst das passende Geburtsdatum über eine korrelierende Unterabfrage heraus. Der Tabelle, in die das rein kopiert werden soll, muss dann mit einem Alias versehen sein.

Gruß

Robert
NTClient
****
Beiträge: 106
Registriert: Di, 19.07.2005 16:09

Re: SQL UPDATE Anweisung, genaue Syntax

Beitrag von NTClient »

Danke, Robert!
Der SQL-Befehl funktioniert. Allerdings werden in TabA die Geburtsdaten der Mitglieder, die nicht in TabB vorhanden sind, mit LEER überschrieben (gelöscht). Irgendwie muss ich das JOIN IN (WHERE IN?) da noch einbauen.

Warum ist das mit dem Alias erforderlich?
Gruß Bernd!
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: SQL UPDATE Anweisung, genaue Syntax

Beitrag von RobertG »

Hallo Bernd,

Du kannst Dich bei einem Update oder Insert nur auf eine Tabelle beziehen, in der etwas erledigt wird. Deshalb ist eine Unterabfrage notwendig, die aber nur genau einen Datensatz liefern darf. Der Datensatz muss zu der aktuellen Zeile Deiner Ausgangstabelle TabA passen. Die aktuelle Zeile ist über den Alias erreichbar. Nur der Alias liefert lediglich die aktuellen Werte. TabA.Vorname würde alle Vornamen liefern.
Um die leeren Datumsangaben nicht einzufügen geht vielleicht das Folgende:

Code: Alles auswählen

update "TabA" AS "a" set "Geburtsdatum" = IFNULL((SELECT "Geburtsdatum" FROM "TabB" where "Vorname" = "a"."Vorname" and "Nachname" = "a"."Nachname"),"Geburtsdatum")
Gruß

Robert
Antworten