AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird : Tabelle erstellen mit AutoInc-Feld
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird : Tabelle erstellen mit AutoInc-Feld

Ein Thema von RWarnecke · begonnen am 24. Mai 2007 · letzter Beitrag vom 30. Mai 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Firebird : Tabelle erstellen mit AutoInc-Feld

  Alt 24. Mai 2007, 15:26
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 ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Firebird : Tabelle erstellen mit AutoInc-Feld

  Alt 24. Mai 2007, 15:30
Hallo,

wozu dient denn die SP? Na, egal, so sollte es gehen:INSERT INTO Produkte(ProductId, Bezeichnung) VALUES('12345','Ein Produkt')
Detlef
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

Re: Firebird : Tabelle erstellen mit AutoInc-Feld

  Alt 24. Mai 2007, 15:42
Danke, wunderbar hat funktioniert.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
24. Mai 2007, 16:52
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Das war ne Datenbank-Frage
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Firebird : Tabelle erstellen mit AutoInc-Feld

  Alt 24. Mai 2007, 19:49
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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Firebird : Tabelle erstellen mit AutoInc-Feld

  Alt 24. Mai 2007, 20:02
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Firebird : Tabelle erstellen mit AutoInc-Feld

  Alt 24. Mai 2007, 20:07
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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Firebird : Tabelle erstellen mit AutoInc-Feld

  Alt 24. Mai 2007, 20:10
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#9

Re: Firebird : Tabelle erstellen mit AutoInc-Feld

  Alt 24. Mai 2007, 20:55
Wie funktioniert denn ein richtiger AutoInc von der SQL-Syntax bei Firebird ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Firebird : Tabelle erstellen mit AutoInc-Feld

  Alt 24. Mai 2007, 21:05
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
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz