AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Clientdaten und Generator
Thema durchsuchen
Ansicht
Themen-Optionen

Clientdaten und Generator

Ein Thema von Quake · begonnen am 26. Apr 2004 · letzter Beitrag vom 27. Apr 2004
 
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Clientdaten und Generator

  Alt 26. Apr 2004, 15:50
Hallo Quake,
meine Tabellen haben grundsätzlich alle eine Spalte mit dem Namen ID.
Dies ist immer die erste Spalte und gleichzeitig der Primary Key.
Den Wert für die Spalte ID hole ich mir über einen Generator.
Den Werte hole ich aber erst vom Generator ab, wenn ich des Insert abgesetzt habe.
Dafür verwende ich immer einen Trigger.
Hiermal ein Beispiel für Interbase:
Code:
/* Domain definitions */
CREATE DOMAIN "TINT" AS INTEGER;
CREATE DOMAIN "TSTRING30" AS VARCHAR(30) CHARACTER SET ISO8859_1 COLLATE DE_DE;

/* Table: KONSOTREE, Owner: SYSDBA */

CREATE TABLE "KONSOTREE"
(
  "ID"  INTEGER NOT NULL,
  "PARENTID"  INTEGER NOT NULL,
  "ENTITY"  VARCHAR(15) CHARACTER SET ISO8859_1 COLLATE DE_DE,
  "NODETEXT"  "TSTRING30" COLLATE DE_DE,
  "KIND"  "TINT",
 PRIMARY KEY ("ID")
);
SET TERM ^ ;

CREATE GENERATOR gen_konsotree ^

/* Triggers only will work for SQL triggers */

CREATE TRIGGER "TRG_KONSOTREE_0" FOR "KONSOTREE"
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then new.id=gen_id(gen_konsotree,1);
end
 ^

CREATE TRIGGER "TRG_KONSOTREE_1" FOR "KONSOTREE"
ACTIVE AFTER DELETE POSITION 0
as
begin
  DELETE FROM konsotree WHERE konsotree.parentid=OLD.ID;
end
 ^

COMMIT WORK ^
SET TERM ;^
Der Trigger "TRG_KONSOTREE_0" feuert, bevor der Datensatz eingefügt wird. Interessant ist hier folgende Zeile
Code:
if (new.id is null) then new.id=gen_id(gen_konsotree,1);
Nur wenn die ID nicht mit gegeben wurde, wird der Inhalt für die ID aus dem Generator mit
Code:
gen_id(gen_konsotree,1)
geholt.

Wenn ich den ID Wert benötige, bevor ich den Datensatz hinzufüge hole ich mir den nächsten Generatorwert über eine Storedprocedure:
Code:
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

/* Stored procedures */

CREATE PROCEDURE "GET_KONSOTREE"
RETURNS
(
  "NEWID" INTEGER
)
AS
BEGIN EXIT; END ^


ALTER PROCEDURE "GET_KONSOTREE"
RETURNS
(
  "NEWID" INTEGER
)
AS
BEGIN
  NewID = GEN_ID(GEN_KONSOTREE,1);
END
 ^

SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
Fazit: Als Lösung schlage ich Dir die Verwendung von Triggern vor.

Folgendes Buch kann ich schwer empfehlen:InterBase-Datenbankentwicklung mit Delphi
I come from outer space to save the human race
  Mit Zitat antworten Zitat
 


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 11:43 Uhr.
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-2025 by Thomas Breitkreuz