Einzelnen Beitrag anzeigen

Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Firebird Generator/Trigger für Autoinc (Verständnis_Prob

  Alt 18. Feb 2009, 22:35
Hier noch meine angepasste Funktion aus meinem Übungsprojekt. (fehlt noch etwas Sicherheit, aber denke erstmal sicher genug)

Legt für die angegebene Tabelle einer Firebird-Datenbank einen individuellen Generator (Sequenz) an. Wird dann von einer Trigger-Funktion als AutoIncrement für das angegebene Feld verwendet. (Hoffe soweit richtig formuliert)

Das ganze wird nach 'CREATE TABLE...' aufgerufen und nimmt an, das pro Tabelle nur ein Autoincremet-Feld nötig ist.
Delphi-Quellcode:
procedure FireBirdAutoInc(const zConnection: TZConnection; Table, forField : String);
var
  zQuery : TZQuery;
  Column : Integer;
begin
{ TODO :
Prüfen, ob bereits eine Sequenz/Generator mit ensprechendem Namen existiert
Prüfen, ob erfolgreich }


  zQuery := TZQuery.Create(Application);
  try
    with zQuery do
    begin

      // Verbindung festlegen und prüfen
      Connection := zConnection;
      if Assigned(Connection) and Connection.Connected then
      begin

        // Generator erzeugen
        SQL.Text := 'CREATE GENERATOR '+Table+'_AUTOINC;';
        ExecSQL;
        // Generator mit Spalte verbinden
        SQL.Text := 'SET GENERATOR '+Table+'_AUTOINC TO 0';
        ExecSQL;
        // Trigger definieren
        SQL.Clear;
        SQL.Add('CREATE TRIGGER AUTOINC_TRG for '+Table);
        SQL.Add('active before insert position 0';
        SQL.Add('as');
        SQL.Add('begin');
        SQL.Add(' new.'+forField+' = gen_id( '+Table+'_AUTOINC, 1 );');
        SQL.Add('end');
        ExecSQL;

      end; // if Assigned...
    end; // with zQuery do

  finally
    zQuery.Free;
  end;
end;
Etwas unsicher bin ich nur noch, ob "zQuery.Connection.GetColumnNames" auch immer die richtige Reihenfolge der Spalten übergibt. Also ob die ermittelte "Column" sicher ist.
  Mit Zitat antworten Zitat