Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird : Tabelle erstellen mit AutoInc-Feld (https://www.delphipraxis.net/92697-firebird-tabelle-erstellen-mit-autoinc-feld.html)

RWarnecke 24. Mai 2007 16:26


Firebird : Tabelle erstellen mit AutoInc-Feld
 
Hallo zusammen,

ich erstelle mit folgenden Script eine Tabelle :

SQL-Code:
CREATE TABLE PRODUKTE (
    ID INTEGER NOT NULL,
    PRODUCTID VARCHAR(100) NOT NULL,
    BEZEICHNUNG VARCHAR(255) NOT NULL);
CREATE GENERATOR GEN_PRODUKTE_ID;
SET TERM ^ ;

create trigger produkte_bi for produkte
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_produkte_id,1);
end
^

SET TERM ; ^

SET TERM ^ ;

create procedure sp_gen_produkte_id
returns (id integer)
as
begin
  id = gen_id(gen_produkte_id, 1);
  suspend;
end
^

SET TERM ; ^
So wie muss ich jetzt den Insert-Befehl schreiben, damit das Feld ID mit dem AutoIncrementwert gefüllt wird ?

DeddyH 24. Mai 2007 16:30

Re: Firebird : Tabelle erstellen mit AutoInc-Feld
 
Hallo,

wozu dient denn die SP? Na, egal, so sollte es gehen:
SQL-Code:
INSERT INTO Produkte(ProductId, Bezeichnung) VALUES('12345','Ein Produkt')

RWarnecke 24. Mai 2007 16:42

Re: Firebird : Tabelle erstellen mit AutoInc-Feld
 
Danke, wunderbar hat funktioniert.

DP-Maintenance 24. Mai 2007 17:52

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Das war ne Datenbank-Frage

Elvis 24. Mai 2007 20:49

Re: Firebird : Tabelle erstellen mit AutoInc-Feld
 
Du solltest im Trigger bedingungslos die ID aus dem Generator eintragen.
Warum?
Es könnte sonst es zu Schlüsselverletzungen führen:
Der Generator steht bei 3, aber User trägt selbst 3 ein.
Beim nächsten Insert ohne dass der User eine Id angibt würde der Generator um eins erhöht und versucht eine weitere 3 einzufügen -> Kabumm

Wie kriegst du die Id nach einem Insert?
Bei einem Insert führst du das hier mit Query.Open aus (nicht ExecSql!):
SQL-Code:
INSERT INTO Produkte
  (ProductID
  ,Bezeichnung)
VALUES
  (:ProductID
  ,:Bezeichnung)
RETURNING Id
In der "Ergebnismenge" findest du die neue ID in der ersten Spalte.

DeddyH 24. Mai 2007 21:02

Re: Firebird : Tabelle erstellen mit AutoInc-Feld
 
Das Dumme ist, dass ich diesen Trigger auch schon in einer Doku gesehen habe (ob das jetzt auf firebirdsql.org oder ibphoenix.com oder sonstwo war, weiß ich leider nicht mehr). Ich stimme Dir zu, wenn schon "Auto_inc", dann richtig.

Elvis 24. Mai 2007 21:07

Re: Firebird : Tabelle erstellen mit AutoInc-Feld
 
Zitat:

Zitat von DeddyH
Das Dumme ist, dass ich diesen Trigger auch schon in einer Doku gesehen habe

Vor Firebird 2.0 war kein konsistentes Handling von generator-basierten Pks möglich.
Erst die neue Returning-Clause erlaubt es.

Zitat:

Ich stimme Dir zu, wenn schon "Auto_inc", dann richtig.
Schreibe bitte nicht auto_inc. Das erinnert mich an andere DBMS, die sowas haben, aber keine Sequences/Generatoren: Praktisch Access für den Server. :kotz:

DeddyH 24. Mai 2007 21:10

Re: Firebird : Tabelle erstellen mit AutoInc-Feld
 
Naja, zum Einen hatte ich diesen Begriff mit Absicht in Anführungszeichen gesetzt und zum Anderen bezog ich mich dabei auf den Titel dieses Threads :) .
Schönen Abend noch

RWarnecke 24. Mai 2007 21:55

Re: Firebird : Tabelle erstellen mit AutoInc-Feld
 
Wie funktioniert denn ein richtiger AutoInc von der SQL-Syntax bei Firebird ?

mkinzler 24. Mai 2007 22:05

Re: Firebird : Tabelle erstellen mit AutoInc-Feld
 
Zitat:

Wie funktioniert denn ein richtiger AutoInc von der SQL-Syntax bei Firebird ?
Er meinte nur das das Generator/Sequenz-Konzept flexibler ist als autoinc von MySQL, Access und Konsorten


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz