Hallo,
willkommen im Club der Pdx-
IB-Umsteller.
Lösung :
Erstelle für jede Tabelle eine Stored Procedure mit folgendem Inhalt
SQL-Code:
CREATE PROCEDURE BILL_COSTCENTER_NEWID
RETURNS (
NEWID INTEGER)
AS
begin
newid=gen_id(Gen_Bill_CostCenter,1);
end
Gen_Bill_CostCenter ist ein Generator.
Diese Stored Procedure ruft du VOR jedem Insert auf.
Der Generator stellt sicher, dass du immer einen neuen Werte bekommst
(quasi AUTOINC in Interbase).
Der Aufruf erfolgt etwa wie folgt (das Bsp geht davon aus, dass alle Generatoren
wie ihre Tabelle selber heissen)
Delphi-Quellcode:
{
Name:
Table_GetNewId__DB
Zweck:
neue Id über stored proc erzeugen
Parameter:
theDataBaseName - database name
theTableName - Tabellenname
Return-Parameter:
theNewId - die neue Id
theErrorStr - Fehlermeldung
Return:
False bei einem Fehler
Hinweis:
}
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;
{$IFDEF DEBUG}
MBDebug(sFormName+'
Table_GetNewId__DB'+#13#10+theTableName+E.
message);
{$ENDIF}
end;
end;
end;
{ Table_GetNewId__DB }
Heiko
PS:
Den Trigger würde ich komplett rauslöschen.