Einzelnen Beitrag anzeigen

hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Umstellung Paradox -> interbase. SNR handhabung

  Alt 22. Aug 2006, 16:33
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.
Heiko
  Mit Zitat antworten Zitat