AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Verwenden von Triggern für Firebird 2.5 DB
Thema durchsuchen
Ansicht
Themen-Optionen

Verwenden von Triggern für Firebird 2.5 DB

Offene Frage von "hoika"
Ein Thema von Frankdarwin · begonnen am 13. Apr 2011 · letzter Beitrag vom 15. Apr 2011
 
ThomasBab

Registriert seit: 7. Mai 2007
Ort: Hallenberg
57 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Verwenden von Triggern für Firebird 2.5 DB

  Alt 13. Apr 2011, 14:40
Hallo!

Bin zwar kein Spezialist, aber vielleicht kann ich ein wenig Licht ins Dunkle bringen:

Hier ein praktisches Beispiel (Auszugsweise):

Die Tabelle:
Code:
CREATE GENERATOR ID;

CREATE TABLE IPCAM (
    ID       BIGINT NOT NULL,
    IDCAM    BIGINT NOT NULL,
    ANGELEGT DATUMUHRZEIT DEFAULT current_timestamp /* DATUMUHRZEIT = TIMESTAMP */ NOT NULL /* DATUMUHRZEIT = TIMESTAMP */,
    BILD     BLOB SUB_TYPE 0 SEGMENT SIZE 16384
);

/******************************************************************************/
/*                                Primary Keys                               */
/******************************************************************************/

ALTER TABLE IPCAM ADD CONSTRAINT PK_IPCAM PRIMARY KEY (ID);


/******************************************************************************/
/*                                Foreign Keys                               */
/******************************************************************************/

ALTER TABLE IPCAM ADD CONSTRAINT FK_IPCAM_1 FOREIGN KEY (IDCAM) REFERENCES CAMTYP (ID);


/******************************************************************************/
/*                                  Indices                                  */
/******************************************************************************/

CREATE INDEX IPCAM_IDX1 ON IPCAM (ANGELEGT);


/******************************************************************************/
/*                                  Triggers                                 */
/******************************************************************************/


SET TERM ^ ;



/******************************************************************************/
/*                            Triggers for tables                            */
/******************************************************************************/



/* Trigger: IPCAM_BIU0 */
CREATE OR ALTER TRIGGER IPCAM_BIU0 FOR IPCAM
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
begin
    if (new.id is null) then
    new.id = gen_id(id, 1);
    if (new.angelegt is null) then
    new.angelegt = current_timestamp;
end
^


SET TERM ; ^
Hier der Generator:

Code:
CREATE SEQUENCE ID;
ALTER SEQUENCE ID RESTART WITH 619995;


Nun der Codeauszug, um Daten einzutragen bzw. ein Update auszuführen:

Delphi-Quellcode:
procedure Tccamera.Speichercamtyp;
var
  Sql: string;
begin
  try
    if CamTypName = 'then
    begin
      ShowMessage('Kein Kameratyp angegeben!');
      exit;
    end;
    if CamTypID <= 0 then
    begin
      sql := 'insert into ' + Ftabtyp + ' (camname,adresse) values(:camname,:adresse);';
      dm.tTypen.StartTransaction;
      dm.qTypen.SQL.Text := sql;
      dm.qTypen.Params.ByNameAsString['camname'] := UTF8Decode(CamTypName);
      dm.qTypen.Params.ByNameAsString['adresse'] := UTF8Decode(CamTypAdresse);
    end
    else
    begin
      sql := 'update ' + Ftabtyp +
        ' set camname=:camname, adresse=:adresse where id=:id;';
      dm.tTypen.StartTransaction;
      dm.qTypen.SQL.Text := sql;
      dm.qTypen.Params.ByNameAsString['camname'] := UTF8Decode(CamTypName);
      dm.qTypen.Params.ByNameAsString['adresse'] := UTF8Decode(CamTypAdresse);
      dm.qTypen.Params.ByNameAsInt64['id'] := CamTypID;
    end;
    dm.qTypen.Execute;
    dm.tTypen.Commit;
  except
    on E: Exception do
    begin
      dm.tTypen.RollBack;
      ShowMessage(E.Message);
    end;
  end;
end;
Thomas

Geändert von ThomasBab (13. Apr 2011 um 14:54 Uhr) Grund: Tabellendefinition war unvollständig
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz