AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird Embedded + AUTOINC
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird Embedded + AUTOINC

Ein Thema von himitsu · begonnen am 17. Jan 2015 · letzter Beitrag vom 10. Okt 2015
Antwort Antwort
Seite 6 von 6   « Erste     456   
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#51

AW: Firebird Embedded + AUTOINC

  Alt 10. Okt 2015, 12:28
Aber wenn in der DB doch ein Trigger definiert ist und der auch mit IBExpert zuschlägt, wieso soll es dann nötig sein für FireDAC noch irgendwas einstellen zu müsssen ? Au mann, immer alles ausführlich schreiben, obwohl eigentlich einleuchtend. In IBExpert schlägt also der Trigger zu. Ist ja auch klar, weil der in der Datenbank angelegt wurde. Angeblich ist das im Delphi-Programm aber nicht so (zumindest von mir auch nicht nachvollziehbar). Wenn dem aber doch so ist (ich glaubs nicht), dann bestünde theoretisch die Möglichkeit, dass FireDAC den Trigger auf Inactive setzt, was ich auch nicht glaube aber theoretisch ginge das. Und das wäre dann die einzige Möglichkeit, diesen Effekt zu erzeugen. Der Trigger schlägt immer zu ! Ohne wenn und aber. Und der gepostete Trigger sieht richtig aus und soll unter IBExpert auch funktionieren !
Gruß
Hansa
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#52

AW: Firebird Embedded + AUTOINC

  Alt 10. Okt 2015, 12:45
In IBExpert schlägt also der Trigger zu. Ist ja auch klar, weil der in der Datenbank angelegt wurde. Angeblich ist das im Delphi-Programm aber nicht so (zumindest von mir auch nicht nachvollziehbar).
Steht doch klar und deutlich im Trigger:

as
begin
if (new.counter is null) then
new.counter = gen_id(gencounter,1);
end
Der setzt genau dann und nur dann den Wert, wenn das Feld null ist.
Es hängt also davon ab, was Firedac als Standard für ein nicht belegtes integer-Feld übergibt.
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#53

AW: Firebird Embedded + AUTOINC

  Alt 10. Okt 2015, 18:05
Dies würde bedeuten, wenn man folgendes macht :
   FDTable1COUNTER.AutoGenerateValue := arAutoInc; dann wird automatisch die NULL überschrieben ? Mit was denn ? Woher soll denn FireDAC wissen auf welchem Wert die ID einer einzelnen Tabelle steht ? Ich hantiere hier z.B. gerade mit ca. 50 Tabelllen, die sich die ID aus einem einzigen Generator holen. Wozu also arAutoInc; setzen ? @TBx : erklär mir das mal und auch, wie man so (intern in FireDAC) die richtige ID finden soll.
Gruß
Hansa
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#54

AW: Firebird Embedded + AUTOINC

  Alt 10. Okt 2015, 19:09
Dies würde bedeuten, ..
dann wird automatisch die NULL überschrieben ? Mit was denn ?
Der Trigger ist so geschrieben, dass er nur selbst einen Wert vergibt, wenn das Feld noch NULL ist. Das ist eine Möglichkeit, Trigger zu schreiben, nicht unüblich.
Woher Wert kommt, ist dem Trigger egal. Alles was Werte schreiben kann, kann genutzt werden das Feld zu beschreiben und damit den Triggerwert zu vermeiden.
Wenn man den Trigger verwendet, benötigt man kein anderes Verfahren.
Wenn man ein anderes oder verschiedene Verfahren verwendet, selbst SQL console, stellt der Trigger einen eindeutigen Wert sicher.
"Wie man die richtige ID findet?" Damit meinst Du den ID Wert, der gesetzt wurde?
Das geht auch unter Firebird glaube ich mit Returning Clause, die liefert nach dem Insert den Wert (oder auch andere zurück). Das muss natürlich vom Provider unterstützt werden. Weiß ich bei Firedac nicht.
Gruß, Jo
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#55

AW: Firebird Embedded + AUTOINC

  Alt 10. Okt 2015, 21:00
Der Trigger ist so geschrieben, dass er nur selbst einen Wert vergibt, wenn das Feld noch NULL ist. Das ist eine Möglichkeit, Trigger zu schreiben, nicht unüblich.
Ach so geht das ? Hier wird aber jetzt gesagt, dass in IBExpert der Trigger zuschlägt wie üblich und in Delphi/FireDAC eben nicht. Wie soll das gehen ? Dazu bräuchte ich eine Erklärung. Das kann doch alles nicht sein. Der Trigger ist gnadenlos und schlägt anhand der Bedingungen zu. Man kann also nur den Wert eines Feldes auf nicht NULL (dadurch halt den Trigger aushebeln bei entsprechender Abfrage auf NULL ) setzen oder den Trigger deaktivieren.
Gruß
Hansa
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#56

AW: Firebird Embedded + AUTOINC

  Alt 10. Okt 2015, 21:16
Zitat:
Hier wird aber jetzt gesagt, dass in IBExpert der Trigger zuschlägt wie üblich und in Delphi/FireDAC eben nicht. Wie soll das gehen ?
Weiß ich auch nicht. Wo wird das gesagt?
Ein Trigger ist ein Trigger. Man könnte ihn disablen. Hast Du ja auch schon erwähnt. Aber dann gehört man geteert usw.
Vielleicht ein Missverständnis? Er schlägt nicht zu, weil er brav mit fertigen Daten gefüttert wird?
Gruß, Jo
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#57

AW: Firebird Embedded + AUTOINC

  Alt 10. Okt 2015, 21:24
Thread wird langsam auch zu lange.

in #52 steht das :

Danke
Nur wenn ich das in der Datenbank mit IBExpert mache,
geht das, mit Firedac nicht. OK mal sehen.

Before is Active


as
begin
if (new.counter is null) then
new.counter = gen_id(gencounter,1);
end
Tja, und jetzt ?
Gruß
Hansa
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#58

AW: Firebird Embedded + AUTOINC

  Alt 10. Okt 2015, 22:07
Thread wird langsam auch zu lange.
in #52 steht das
Tja, und jetzt ?
Also das steht in #47, aber die Formulierung ist etwas schwammig: Dann geht "das"
Einen weiter #48 steht, dass es doch geht (was auch immer).
Ich kann zu Firedac nichts sagen, nie benutzt. Aber offenbar kann man auch damit die Werte setzen.
Der Trigger geht sicherlich und greift, wenn man es mit Firedac nicht hinbekommt.
Gruß, Jo
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#59

AW: Firebird Embedded + AUTOINC

  Alt 10. Okt 2015, 22:32
Dies würde bedeuten, wenn man folgendes macht :
   FDTable1COUNTER.AutoGenerateValue := arAutoInc; dann wird automatisch die NULL überschrieben ?
Nein, umgekehrt.
Im Normalfall überträgt Firedac einen Wert. Das arAutoInc teilt FireDac mit, daß der Wert automatisch gesetzt werden soll und deswegen NULL zu übertragen ist (wodurch der Trigger dann auch greift).

Damit dürften dann alle Klarheiten endgültig beseitigt sein.
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 6   « Erste     456   


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 11:24 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