AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Im Trigger abfragen ob Datensatz existiert
Thema durchsuchen
Ansicht
Themen-Optionen

Im Trigger abfragen ob Datensatz existiert

Ein Thema von Walter Landwehr · begonnen am 18. Nov 2022 · letzter Beitrag vom 18. Nov 2022
Antwort Antwort
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
395 Beiträge
 
Delphi 10.4 Sydney
 
#1

Im Trigger abfragen ob Datensatz existiert

  Alt 18. Nov 2022, 14:32
Datenbank: Firebitd • Version: 2.5 • Zugriff über: IBO
Hallo,

gibt es ein Möglichkeit im Trigger abzufragen ob ein Datensatz existiert. Etwa so:
Delphi-Quellcode:
Select count(PATIENTNR) from tbl_patdiagnose PD where PD.suchwort = :New.SUCHWORT and PD.patientnr = :New.PATIENTNR;
 if (Count) = 0 then
 begin
   INSERT INTO TBL_PATDIAGNOSE(
                 PATDIAGNOSENR, PATIENTNR, DATUM, DAUERDIAGNOSE, DIAGNOSE,
                 ANLAGE, ANLAGEBENUTZER, DIAGNOSENR, Suchwort, ReferenzTabelle, ReferenzNr)
          VALUES (
                 Gen_ID(GEN_TBL_PATDIAGNOSE,1), new.PATIENTNR, new.BEHANDLUNGSDATUM, 'N', new.Text,
                 new.Anlage, new.ANLAGEBENUTZER, new.GEBUEHRENNR, new.Suchwort, 'PB', new.PatBlattNr);
 end;
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Im Trigger abfragen ob Datensatz existiert

  Alt 18. Nov 2022, 14:34
Jein, weil ein Trigger ist ja beim INSERT, UPDATE oder DELETE gefeuert und dann musst Du kein neues INSERT zu machen.
Was Du machen kannst ist eine Exception, wenn der DS existiert, also das INSERT nicht zulassen.
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

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

AW: Im Trigger abfragen ob Datensatz existiert

  Alt 18. Nov 2022, 14:54
Und wenn man es nicht über die Exception möchte, schreibt man eine Stored Procedure oder eine Updateable View.
Da beim View das Insert Statement in den Before Insert Trigger kommt, kannst du das genau so machen, wie du es schon beschrieben hast.
Obwohl ich statt einem "Count" "if not exists" bevorzugen würde.

Frank
Frank Reim
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
395 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Im Trigger abfragen ob Datensatz existiert

  Alt 18. Nov 2022, 16:23
Danke für die Infos habe jetzt eine Stored Procedure gebaut.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

AW: Im Trigger abfragen ob Datensatz existiert

  Alt 18. Nov 2022, 18:16
Jupp, "if not exist" kann beim ersten Auffinden/Nichtauffinden abbrechen, während "count" erstmal alle Datensätze durchgehn muß.

Warum sorum und nicht als WHERE?

SQL-Code:
INSERT INTO TBL_PATDIAGNOSE (
   PATDIAGNOSENR, PATIENTNR, DATUM, DAUERDIAGNOSE, DIAGNOSE,
   ANLAGE, ANLAGEBENUTZER, DIAGNOSENR, Suchwort, ReferenzTabelle, ReferenzNr
)
SELECT
   Gen_ID(GEN_TBL_PATDIAGNOSE,1), PATIENTNR, BEHANDLUNGSDATUM, 'N', Text,
   Anlage, ANLAGEBENUTZER, GEBUEHRENNR, Suchwort, 'PB', PatBlattNr
WHERE not exists( -- bei IF exists ohne SubSelect und eventuell noch mit einem LIMIT 1
   SELECT True FROM tbl_patdiagnose
   WHERE suchwort = :SUCHWORT and patientnr = :PATIENTNR
)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz