Hallo,
das Set Term in der ersten Zeile setzt den Terminator vojn ; auf ^
In der vorletzten Zeile wird dann das Scriot abgeschlossen
durch eben diesen Terminator.
Notwendigi ist es, weil das Script aus mehreren Zeilen besteht,
und intern das Semikolon schon als Befehlstrenner benutzt wird.
Über ibexpert kannst du die Trigger übrigens auch ohne das Set Term
erzeugen / bearbeiten.
Noch eine Sache zu prim. key + TTable.
Spätestens wenn du die ID deines neuen Datensatzes sofort nach dem Append
brauchst, hast du ein Problem.
Aus diesem Grund hole ich mir den jeweils neuen prim. key eines Datensatz vor
dem Eintragen selber.
SQL-Code:
CREATE PROCEDURE BILL_COSTCENTER_NEWID
RETURNS (
NEWID INTEGER)
AS
begin
newid=gen_id(Gen_Bill_CostCenter,1);
end
BILL_COSTCENTER_NEWID ist ein Generator (Sequenz)
Die Stored Procedure rufe ich auf und schon habe ich meinen neuen Wert.
SQL-Code:
function Table_GetNewId__DB(const theDataBaseName, theTableName: String;
var theNewId: Longint; var theErrorStr: String): Boolean;
var
SP: TStoredProc;
begin
Result:=
False;
theNewId:= -1;
theErrorStr:= '
';
try
SP:= TStoredProc.
Create(NIL);
try
SP.DataBaseName:= theDataBaseName;
SP.StoredProcName:= UpperCase(theTableName)+'
_NEWID';
SP.ExecProc;
theNewId:= StrToInt(SP.Params[0].AsString);
Result:=
True;
finally
SP.Free;
end;
except
on E:
Exception do
begin
theErrorStr:= E.message;
end;
end;
end; { Table_GetNewId__DB }
Die Methode ght übrigens davon aus, das die Generatoren für die Tabellen immer
im Format
TableName + '_NewId' vorliegen.
Heiko