Einzelnen Beitrag anzeigen

Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: StartDate,EndDate, Überlappung verhindern

  Alt 11. Okt 2007, 11:28
Hallo Heiko,

ich habe doch noch was vergessen. IB6 kennt ja ach noch kein CASE - Construct!

Wenn es auch in IB6 funktionieren muss, könnte der Trigger so aussehen:

SQL-Code:
CREATE TRIGGER BUCHUNG_BIU0 FOR BUCHUNG
ACTIVE BEFORE INSERT POSITION 1
as
declare variable range_exists char(1);
begin
  /*
    Datumsbereich prüfen bei Insert
  */

  range_exists = 'F';
  select 'Tfrom rdb$database where
             exists(select * from buchung where
                   (new.startdate between startdate and enddate) or
                   (new.enddate between startdate and enddate))
             into :range_exists;
  if (:range_exists = 'T') then
    exception e_invaliddaterange 'Überlappender Datumsbereich';
end
Man kann hier auch ein Select count(*) nehmen, da ja eigentlich höchstens ein Datensatz mit der Bedingung existieren kann und damit der Geschwindigkeitsvorteil von exists wegfällt.

Und wie gesagt, der gleichen Trigger noch mal für BEFORE UPDATE.

Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat