Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird INTEGER = NotNull (https://www.delphipraxis.net/183653-firebird-integer-%3D-notnull.html)

Hansa 26. Jan 2015 15:13

AW: Firebird INTEGER = NotNull
 
Ich glaube du weisst weder, was ein Trigger ist, noch was eine Datenbank ist. Und "ist vorgegeben" ist lediglich vorgeschoben. 8-)

DeddyH 26. Jan 2015 15:18

AW: Firebird INTEGER = NotNull
 
An administrativen Tools fallen mir spontan IBExpert (Personal) und FlameRobin ein.

strom 26. Jan 2015 15:22

AW: Firebird INTEGER = NotNull
 
Danke DeddyH :lol:

p80286 26. Jan 2015 16:02

AW: Firebird INTEGER = NotNull
 
Zitat:

Zitat von Hansa (Beitrag 1287830)
Ich glaube du weisst weder, was ein Trigger ist, noch was eine Datenbank ist. Und "ist vorgegeben" ist lediglich vorgeschoben. 8-)

Auch wenn hansa nicht sehr freundlich war, recht scheint er zu haben.
Also nochmals zurück auf Los.
Was hast Du wohin willst Du und welche Fragen tauchen dabei auf. Das herumdoktern an Symptomen hilft da nicht wirklich weiter!

Gruß
K-H

Hansa 26. Jan 2015 16:09

AW: Firebird INTEGER = NotNull
 
Stimmt, kommt wirklich nicht so freundlich rüber. Ein Land der Weicheier und Dilletanten nützt allerdings selbst letztgenannten nichts.

strom 26. Jan 2015 16:32

AW: Firebird INTEGER = NotNull
 
Natürlich habe ich keine Ahnung von Datenbanken in Delphi usw.
sonst wäre ich nicht in diesem Forum oder?

Dank "DeddyH" konnte ich mir mal einen Trigger anschauen. (FlameRobin)

Soll dieser Trigger jetzt von Delphi angesteuert werden?
Oder übernehme ich diesen Quelltext?

Code:
SET TERM ^ ;
ALTER TRIGGER EINSAETZE_BI ACTIVE
BEFORE INSERT POSITION 0
AS
    DECLARE iEinsatznummer INTEGER;
    DECLARE iRecordCount INTEGER;
    DECLARE iEinsatznummerStart INTEGER;
    DECLARE iEinsatznummerMax INTEGER;
BEGIN
    iRecordCount = 0;
    iEinsatznummerStart = extract(year from current_date) * 1000000;
    iEinsatznummerMax = 0;

    SELECT COUNT(*), max(EINSATZNUMMER) FROM EINSAETZE WHERE (EINSATZNUMMER >= :iEinsatznummerStart) INTO :iRecordCount, :iEinsatznummerMax;

    IF (iRecordCount >= 1) THEN iEinsatznummer = iEinsatznummerMax; ELSE iEinsatznummer = iEinsatznummerStart;
    iEinsatznummer = iEinsatznummer + 1;

    IF (NEW.EINSATZNUMMER IS NULL) THEN NEW.EINSATZNUMMER = iEinsatznummer;

END^
SET TERM ; ^

DeddyH 26. Jan 2015 16:39

AW: Firebird INTEGER = NotNull
 
Dieser Trigger macht doch schon das, was Du erreichen möchtest, von daher wäre es kontraproduktiv, die Einsatznummer "von außen" zu belegen. Wenn da nun unbedingt eine Eingabe erforderlich ist, kannst Du es ja mal mit NULL bzw. einem Clear-Aufruf versuchen, obwohl ich da auch nicht viel Hoffnung habe.

Hansa 26. Jan 2015 16:41

AW: Firebird INTEGER = NotNull
 
Öffentliche Diskussion beginnen und dann hinter den Kulissen irgendwas machen, was soll das ? Zusammenhang ist dadurch ziemlich durcheinander.

mkinzler 26. Jan 2015 16:56

AW: Firebird INTEGER = NotNull
 
Ja

IBexpert Personal Edition
Database Workbench free Edition
FlameRobin

Aber PK sollte man so nie setzen.

Dejan Vu 26. Jan 2015 18:49

AW: Firebird INTEGER = NotNull
 
Zitat:

Zitat von strom (Beitrag 1287842)
Code:
ALTER TRIGGER EINSAETZE_BI ACTIVE
BEFORE INSERT POSITION 0
...
    IF (NEW.EINSATZNUMMER IS NULL) THEN NEW.EINSATZNUMMER = iEinsatznummer;
...

Deshalb (und weil Du bei Dir die 'Einsatznummer' selber setzt, funktioniert das nicht.

Allerdings sollte der Ersteller des Triggers geteert und gefedert werden. Eine Grundregel der Datenbankprogrammierung lautet: Kodiere niemals(!) das primäre Schlüsselfeld. Niemals! Du kannst eine fortlaufende Nummer vergeben, oder -auch das ist legitim- einen eindeutigen Code, aber ein Primärschlüssel soll nie 'sprechend' sein.

Man kann zusätzlich zum Primärschlüsselfeld noch ein weiteres Feld angeben (mit unique-constraint), das dann mit derartigem Kram gefüllt ist. Aber das ist dann eben irgend eine 'Bezeichnung' des Datensatzes.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 Uhr.
Seite 3 von 4     123 4      

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