BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[Gelöst] Firebird, SQL direkt, Daten anfügen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
malt14
Beiträge: 119
Registriert: Fr 7. Nov 2014, 06:21

[Gelöst] Firebird, SQL direkt, Daten anfügen

Beitrag von malt14 » Sa 18. Mär 2023, 17:49

Guten Tag,

in einer Tabelle will ich mit SQL direkt vorhandene Datensätze auswählen und als neue anfügen, wobei einzelne Felder der neuen Datensätze geändert werden sollen.

Code: Alles auswählen

INSERT INTO "Time" ("ID", "Day", "days", "hours", "end", "timestamp", "lastChanged", "bText", "dezimal4", "statusID", "minutes")
SELECT "ID", 
       CASE "Day"
            WHEN '2022-05-02 13:05:00' THEN '2023-05-11 10:20:00'
            WHEN '2022-05-02 18:02:00' THEN '2023-05-11 13:10:00'
            WHEN '2022-05-10 10:10:00' THEN '2023-05-14 13:35:00'
            WHEN '2022-05-10 11:09:00' THEN '2023-05-14 16:20:00'
            ELSE "Day"
       END AS "Day", "days", "hours", "end", "timestamp", "lastChanged", "bText", "dezimal4", "statusID", "minutes"

     
FROM "Time"
WHERE "Day" IN ('2022-05-02 13:05:00', '2022-05-02 18:02:00', '2022-05-10 10:10:00', '2022-05-10 11:09:00')
Es folgt diese Fehlermeldung:

Code: Alles auswählen

1: firebird_sdbc error:
*violation of PRIMARY or UNIQUE KEY constraint "INTEG_25" on table "Time"
*Problematic key value is ("ID" = 552)
caused by
[Wiederholung der SQL Anweisung]
Welcher SQL Code führt zur Ausführung?

Grüße
Malt

Version: 7.5.1.2 (X86_64) / LibreOffice Community
Build ID: fcbaee479e84c6cd81291587d2ee68cba099e129
CPU threads: 6; OS: Windows 10.0 Build 22621; UI render: Skia/Raster; VCL: win
Locale: de-DE (de_DE); UI: de-DE
Calc: CL threaded
Zuletzt geändert von malt14 am Fr 24. Mär 2023, 16:52, insgesamt 1-mal geändert.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Firebird, SQL direkt, Daten anfügen

Beitrag von RobertG » Sa 18. Mär 2023, 20:18

Hallo Malt,

nach der Meldung ist doch lediglich bei ID = 552 ein doppelter Wert. Was Du da erreichen willst ist mir allerdings unklar. Du arbeitest in der Tabelle "Time" und willst in diese Tabelle Datensätze von sich selbst (eben "Time") einfügen. Da werden dann doch lauter Primärschlüssel verdoppelt.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

malt14
Beiträge: 119
Registriert: Fr 7. Nov 2014, 06:21

Re: Firebird, SQL direkt, Daten anfügen

Beitrag von malt14 » Di 21. Mär 2023, 17:56

Hallo Robert,

die Tabelle "Time" enthält viele Datensätze, bei denen sich meist nur "Day" ändert. Mir scheint es einfacher, diese dann per SQL anzufügen, als jeden einzelnen neu einzugeben.

"INSERT INTO" funktioniert bei Firebird wegen dem Problem mit dem Auto-Wert des Primärschlüssels nicht?

Wenn ich in einem Formular die Datensätze nach "Day" filtere, kann ich diese dann markieren und anfügen. Allerdings ist das umständlicher als per SQL direkt.

Kann man die SQL direkt Anweisung so erweitern, dass die hinzuzufügenden Datensätze mit der höchsten bereits vergebenen ID +1 beginnen, und die ID sich für jeden weiteren Datensatz um 1 erhöht?



Grüße
Malt

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Firebird, SQL direkt, Daten anfügen

Beitrag von RobertG » Di 21. Mär 2023, 19:06

Hallo Malt,

wenn Du bei dem Primärschlüssel ein Autowert-Feld hast, dann musst Du

Code: Alles auswählen

…
SELECT NULL, 
       CASE "Day" …
setzen. Dann bleibt das Feld für den Primärschlüssel leer und wird durch den Autowert neu geschrieben.

ohne Autowert hilft nur nach zu schauen, wie hoch der bisherige Wert für "ID" ist. Dann steht da eben, wenn die aktuell höchste ID 12345 ist,

Code: Alles auswählen

…
SELECT "ID" + 12345, 
       CASE "Day" …
Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

malt14
Beiträge: 119
Registriert: Fr 7. Nov 2014, 06:21

Re: Firebird, SQL direkt, Daten anfügen

Beitrag von malt14 » Mi 22. Mär 2023, 17:32

Hallo Robert,

Dank für Deine Hilfe.

"ID" ist ein Primärschlüssel mit Autowert-Feld in einer Firebird LO Datenbank.
Ich habe es mit

Code: Alles auswählen

INSERT INTO "Time" ("ID", "Day", "days", "hours", "end", "timestamp", "lastChanged", "bText", "dezimal4", "statusID", "minutes")
SELECT NULL, 
       CASE "Day"
...
Meldung:
1: firebird_sdbc error:
*validation error for column "Time"."ID", value "*** null ***"
caused by
[Wiederholung der SQL Anweisung]


und

Code: Alles auswählen

INSERT INTO "Time" ("ID", "Day", "days", "hours", "end", "timestamp", "lastChanged", "bText", "dezimal4", "statusID", "minutes")
SELECT "ID",
SELECT NULL, 
       CASE "Day"
Meldung:
1: firebird_sdbc error:
*Dynamic SQL Error
*SQL error code = -104
*Token unknown - line 3, column 1
*SELECT
caused by
'isc_dsql_prepare'

versucht.

Code: Alles auswählen

INSERT INTO "Time" ("ID", "Day", "days", "hours", "end", "timestamp", "lastChanged", "bText", "dezimal4", "statusID", "minutes")
SELECT "ID" + X 
       CASE "Day"
...
funktioniert, wobei X der bisherige Höchstwert von "ID" ist.

Grüße
Malt

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Firebird, SQL direkt, Daten anfügen

Beitrag von RobertG » Do 23. Mär 2023, 07:52

Hallo Malt,

wenn es mit NULL für das Feld "ID" nicht funktioniert hat, dann lass doch einfach in Deiner Liste die Spalte "ID" ganz raus:

Code: Alles auswählen

INSERT INTO "Time" ("Day", "days", "hours", "end", "timestamp", "lastChanged", "bText", "dezimal4", "statusID", "minutes")
SELECT  
       CASE "Day"
...
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

malt14
Beiträge: 119
Registriert: Fr 7. Nov 2014, 06:21

Re: [Gelöst] Firebird, SQL direkt, Daten anfügen

Beitrag von malt14 » Fr 24. Mär 2023, 16:54

Hallo Robert,

Code: Alles auswählen

INSERT INTO "Time" ("Day", "days", "hours", "end", "timestamp", "lastChanged", "bText", "dezimal4", "statusID", "minutes")
SELECT  
       CASE "Day"
       ...
funktioniert.

Nochmals Dank! Vereinfacht die Benutzung dieser Tabelle für mich sehr.

Grüße
Malt

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten