Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
für diese Aufgabe ist beim InterBase eine <b>GENERATOR</b> zuständig, der über die CREATE GENERATOR-Anweisung erzeugt wird:
<pre>
CREATE GENERATOR Gen_ProNr;
SET GENERATOR Gen_ProNr TO 1000;
</pre>
Der Wert für den neuen Datensatz wird entweder automatisch von einem TRIGGER zugewiesen oder direkt selbst ausgelesen:
<pre>
CREATE TRIGGER Set_ProNr FOR ProMain BEFORE INSERT AS
BEGIN
IF (NEW.ProNr IS NULL) THEN NEW.ProNr = GEN_ID(Gen_ProNr,1);
END
</pre>
Beim direkten Auslesen aus dem eigenen Programm heraus wird sehr häufig eine STORED PROCEDURE eingesetzt:
<pre>
CREATE PROCEDURE GET_PROJNR
RETURNS (ProjNr INTEGER) AS
BEGIN
ProjNr = GEN_ID(Gen_ProNr,1);
END
</pre>
Einzelheiten und ausführlichere Beschreibungen sind in meinem Buch <i>Client/Server-Datenbankentwicklung mit Delphi</i> zu finden
ich bekomme keinen Trigger auf meinem Interbase server 6_0_1 Version 1.0.0.315 installiert:
CREATE TRIGGER Set_ProNr FOR Project BEFORE INSERT AS
BEGIN
IF (NEW.ProNr IS NULL) THEN NEW.ProNr = GEN_ID(Gen_ProNr,1);
END
Dynamic SQL Error
SQL error code = -104
Unexpected end of command
Statement: CREATE TRIGGER Set_ProNr FOR PROJECT BEFORE INSERT AS
BEGIN
IF (NEW.ProNr IS NULL) THEN NEW.ProNr = GEN_ID(Gen_ProNr,1)
Das Semmikolon vor dem end habe ich definitiv eingegeben!
Kannst Du mir helfen?
(in welchen Verlag ist Dein Buch Client-Server Arbeiten mit Datenbanken erschienen)
ich habe die create trigger Anweisung in der IBConsole (Interactive SQL) abgesetzt. Alle anderen SQL-Anweisungen, einschliesslich generieren des generators klappen einwandfrei.
wenn das Fenster <i>Interactive SQL</i> aus der IBConsole heraus aufgerufen wird, kann man dort über <b>Edit | Options</b> den Dialog für die SQL-Optionen aufrufen. Und dort gibt es die Möglichkeit, im Eingabefeld <b>Terminator</b> das vorbelegte Terminatorzeichen <b>;</B> durch einen eigenen Wert zu ersezten. Auf diesem Weg kann man das definieren, was früher über SET TERM erledigt wurde. Da das Semikolon innerhalb des Triggers benötigt wird, muss man auf ein anderes Zeichen (wie zum Beispiel <b>^</b>) ausweichen:
<pre>
CREATE TRIGGER Set_ProNr FOR ProMain BEFORE INSERT AS
BEGIN
IF (NEW.ProNr IS NULL) THEN NEW.ProNr = GEN_ID(Gen_ProNr,1);
END
^
</pre>
P.S: Um eine Stored Procedure direkt in SQL-Form im <b>SQL-Explorer</B> (BDE) anlegen zu können, muss die Konfiguration für den Anweisungsbegrenzer im Dialog <b>Abfrageoptionen</B> geändert werden
ich danke Dir für den Tip mit den Anweisungsbegrenzern. Ist ja auch ganz logisch - auf einmal sogar die Fehlermeldung.
Dennoch hätte ich so ganz allein wohl noch Ewigkeiten gesucht.
Comment