Hallo allerseits, ich bin ein absoluter Anfänger, also verzeiht mir etwaige Fehler, falls ich etwas falsch ausdrücke oder nicht gleich verstehe.
Ich stehe vor folgendem Problem: Ich möchte in einem Table Daten eintragen, hierfür verwende ich die Insert Into Methode.
INSERT INTO the_table (tag)
VALUES (22);
Sobald ich den Befehl ausführen möchte, kommt folgende Fehlermeldung.
The insert failed because a column definition includes validation constraints.Validation error for column "the_table".COUNTER, value "*** zero ***".
Mein Ziel wäre es, dass ich Daten in den Table einfügen kann und der "COUNTER" automatisch abgerufen und gesetzt wird.
Hier sind (hoffentlich) noch ein paar dienliche Informationen:
Metadata der Spalte vom Table: CREATE TABLE THE_TABLE (
COUNTER Integer NOT NULL, PRIMARY KEY (COUNTER) ) ;
Der Generator der die Zahl des Counters beinhaltet:
CREATE GENERATOR DATABASE_IDENT;
SET GENERATOR DATABASE_IDENT TO 48.
Und der Trigger von der Spalte "COUNTER" (steht unter dem Punkt AutoIncrement):
CREATE TRIGGER TR_GEN_DATA_ID FOR THE_TABLE
ACTIVE
BEFORE INSERT
POSITION 0
AS
BEGIN
IF (NEW.COUNTER IS NULL) THEN
NEW.COUNTER=GEN_ID(GEN_DATA_ID,1);
END.
Nochmals möchte ich mich vorab für Fehler in der Formulierung entschuldigen, ich bin blutiger Anfänger und gerade dabei zu lernen.
Danke im Voraus!
Firebird ID/COUNTER Problem
Moderator: thorben.braun
Wo passiert denn das Einfügen? In einem DB-Tool wie IBExpert oder FlameRobin oder programmatisch?
Die Meldung sieht für mich aus wie die Fehlermeldung, die eine Datenbankzugriffskomponente (in Delphi: FireDAC, UniDAC, etc) ausgibt. Dieser muss man explizit mitteilen, dass ein Trigger die Spalte verwaltet, sonst wird da ein Fehler ausgegeben noch bevor die Komponente den INSERT überhaupt versucht.
Die Meldung sieht für mich aus wie die Fehlermeldung, die eine Datenbankzugriffskomponente (in Delphi: FireDAC, UniDAC, etc) ausgibt. Dieser muss man explizit mitteilen, dass ein Trigger die Spalte verwaltet, sonst wird da ein Fehler ausgegeben noch bevor die Komponente den INSERT überhaupt versucht.
--
Joachim
Joachim
Nur eine als Identity definierte Spalte füllt sich automatisch.
Ansonsten musst du den Generator mit "next value for GeneratorName" auslesen und beim Insert in der Spalte angeben.
https://www.firebirdnews.org/firebird-s ... ns-in-3-0/
Ansonsten musst du den Generator mit "next value for GeneratorName" auslesen und beim Insert in der Spalte angeben.
https://www.firebirdnews.org/firebird-s ... ns-in-3-0/
Zuletzt geändert von bfuerchau am Mo 29. Aug 2022, 09:09, insgesamt 1-mal geändert.
-
- Beiträge: 9
- Registriert: Fr 26. Aug 2022, 13:33
Hallo zusammen,
danke vorab für die Antworten.
Ich gebe den Code in SQL Editor von Firebird SQL Studio ein.
Was ich noch sagen kann, dass es sich um eine Firebird 2.5 Version handelt.
danke vorab für die Antworten.
Ich gebe den Code in SQL Editor von Firebird SQL Studio ein.
Was ich noch sagen kann, dass es sich um eine Firebird 2.5 Version handelt.
-
- Beiträge: 9
- Registriert: Fr 26. Aug 2022, 13:33
Wie genau würde der Code mit Insert Into aussehen? LG und Dankebfuerchau hat geschrieben: ↑Fr 26. Aug 2022, 21:53 Nur eine als Identity definierte Spalte füllt sich automatisch.
Ansonsten musst du den Generator mit "next value from GeneratorName" auslesen und beim Insert in der Spalte angeben.
https://www.firebirdnews.org/firebird-s ... ns-in-3-0/
-
- Beiträge: 9
- Registriert: Fr 26. Aug 2022, 13:33
Ich gebe den Code in SQL Editor von Firebird SQL Studio ein.jhoehne hat geschrieben: ↑Fr 26. Aug 2022, 17:50 Wo passiert denn das Einfügen? In einem DB-Tool wie IBExpert oder FlameRobin oder programmatisch?
Die Meldung sieht für mich aus wie die Fehlermeldung, die eine Datenbankzugriffskomponente (in Delphi: FireDAC, UniDAC, etc) ausgibt. Dieser muss man explizit mitteilen, dass ein Trigger die Spalte verwaltet, sonst wird da ein Fehler ausgegeben noch bevor die Komponente den INSERT überhaupt versucht.
insert into mytable(id, fx, ...)
values(next value for <sequence>, <Inhalt>, ...)
https://firebirdsql.org/refdocs/langref ... uefor.html
values(next value for <sequence>, <Inhalt>, ...)
https://firebirdsql.org/refdocs/langref ... uefor.html
-
- Beiträge: 9
- Registriert: Fr 26. Aug 2022, 13:33
Der Code wird akzeptiert, auch den Counter setzt er um eine Zahl nach oben "CREATE GENERATOR DATABASE_IDENT;bfuerchau hat geschrieben: ↑Mo 29. Aug 2022, 09:08 insert into mytable(id, fx, ...)
values(next value for <sequence>, <Inhalt>, ...)
https://firebirdsql.org/refdocs/langref ... uefor.html
SET GENERATOR DATABASE_IDENT TO 48."
Jedoch fügt er nichts in den Table ein, sprich ich gebe ein :
insert into MY_TABLE (COUNTER, TAG)
values(next value for DATABASE_IDENT, 10);
Dann setzt er die Zahl vom Generator DATABASE_IDENT um einen hoch, aber er fügt nichts in den Table ein.
Need Help
Hallo in die Runde.
Ich arbeite unter Linux und ich kenne 'Firebird SQL Studio' nicht.
Denke, dass da noch ein COMMIT notwendig ist. Eventuell auch eine angestoßene Aktualisierung der Tabelle (Grid).
Möglichkeiten:
:: Nach dem INSERT-Statement "COMMIT;" eingeben und ausführen.
:: Das Programm könnte im SQL-Editor einen Schalter für COMMIT (ROLLBACK) haben.
:: Das Programm könnte in seinen Grundeinstellungen die sinng. Option AUTO-COMMIT anbieten - und sie ist derzeit deaktiviert.
Viele Grüße
Gerd
Ich arbeite unter Linux und ich kenne 'Firebird SQL Studio' nicht.
Denke, dass da noch ein COMMIT notwendig ist. Eventuell auch eine angestoßene Aktualisierung der Tabelle (Grid).
Möglichkeiten:
:: Nach dem INSERT-Statement "COMMIT;" eingeben und ausführen.
:: Das Programm könnte im SQL-Editor einen Schalter für COMMIT (ROLLBACK) haben.
:: Das Programm könnte in seinen Grundeinstellungen die sinng. Option AUTO-COMMIT anbieten - und sie ist derzeit deaktiviert.
Viele Grüße
Gerd
ISQL Version: LI-V5.0.1.1469
Linux Mint 22 Cinnamon 6.2.7
Linux Mint 22 Cinnamon 6.2.7
-
- Beiträge: 9
- Registriert: Fr 26. Aug 2022, 13:33
Gerd hat geschrieben: ↑Mo 29. Aug 2022, 13:26 Hallo in die Runde.
Ich arbeite unter Linux und ich kenne 'Firebird SQL Studio' nicht.
Denke, dass da noch ein COMMIT notwendig ist. Eventuell auch eine angestoßene Aktualisierung der Tabelle (Grid).
Möglichkeiten:
:: Nach dem INSERT-Statement "COMMIT;" eingeben und ausführen.
:: Das Programm könnte im SQL-Editor einen Schalter für COMMIT (ROLLBACK) haben.
:: Das Programm könnte in seinen Grundeinstellungen die sinng. Option AUTO-COMMIT anbieten - und sie ist derzeit deaktiviert.
Viele Grüße
Gerd
Nach vielen Wochen hast du mich gerettet , jetzt funktioniert alles, habe die AUTO-COMMIT Funktion eingeschaltet. Vielen Vielen Dank!
Eine Frage hätte ich noch, wenn ich bei Java einen SQL Befehl eingebe, müsste er dann so aussehen "INSERT INTO COMMIT the_table (........)" ?