AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird Quelltext eines Generators lesen
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird Quelltext eines Generators lesen

Ein Thema von Codehunter · begonnen am 8. Sep 2018 · letzter Beitrag vom 9. Sep 2018
Antwort Antwort
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.867 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Firebird Quelltext eines Generators lesen

  Alt 8. Sep 2018, 19:53
Ein Generator ist ein unabhängig von einer Tabelle gespeicherter Wert. Für diesen gibt es keinen Quelltext.
Dieser wird meist durch einen Trigger oder auch im Programm verändert (mit SemaphorenFunktion GEN_ID()).
Der gesuchte Quelltext wird sich u.a. im BI-Trigger der/den entsprechenden Tabelle(n) befinden.
Markus Kinzler
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.552 Beiträge
 
Delphi 7 Professional
 
#2

AW: Firebird Quelltext eines Generators lesen

  Alt 8. Sep 2018, 20:19
Generatoren stehen in RDB$GENERATORS:

select 'create generator '||RDB$GENERATOR_NAME||';as Generator from RDB$GENERATORS;
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.283 Beiträge
 
Delphi 12 Athens
 
#3

AW: Firebird Quelltext eines Generators lesen

  Alt 8. Sep 2018, 21:37
Generatoren stehen in RDB$GENERATORS:

select 'create generator '||RDB$GENERATOR_NAME||';as Generator from RDB$GENERATORS;
Das ist geschummelt Der Grund warum ich frage: Wenn ich mit SQL Manager Lite schaue, sehe ich bei manchen Generatoren folgende DDL:
Code:
CREATE GENERATOR <name>;

SET GENERATOR <name> TO 1000;
Die zweite Zeile ist offensichtlich ein Vorgabewert. Darum habe ich angenommen, es gäbe wie bei Procedures und Triggern eine statische DDL. Anscheinend schummelt der SQL Manager da aber auch. Nur woher kommt der Vorgabewert, in dem Fall die "1000"?
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.867 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Firebird Quelltext eines Generators lesen

  Alt 8. Sep 2018, 21:48
Das wird der aktuelle Wert sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.283 Beiträge
 
Delphi 12 Athens
 
#5

AW: Firebird Quelltext eines Generators lesen

  Alt 8. Sep 2018, 22:07
Das wird der aktuelle Wert sein.
Nur müsste der dann nicht bei allen Generatoren im "DDL" so erscheinen und nicht nur bei manchen?
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
688 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Firebird Quelltext eines Generators lesen

  Alt 9. Sep 2018, 00:27
Generatoren abrufen und Werte auslesen ist ziemlich einfach
Bei einem Trigger musst du für vollständige SQLs diverse Attribute aus RDB$Triggers auswerten, um zu wissen ob das ein before oder after trigger ist, ein database trigger, etc.
Für den Main Body gibt es das jeweilige Source Feld, das reicht aber nicht für die Create Trigger Deklaration, für Alter Trigger aber schon.

Bei Stored procs ist das noch wesentlich komplizierter, weil da der Header aus RDB$PROCEDURES und RDB$PROCEDURE_PARAMETERS kommen und je nach dem wie die deklariert sind, auch noch rdb$fields etc.

Das ist im Gegensatz zu Generatoren nicht mal eben allgemeingültig zu machen, ich weiß wovon ich rede


Für Generatoren aber hier eine kleine Hilfe

Code:
execute block
returns
(create_sql varchar(200),
set_val varchar(200))
as
declare variable gn varchar(31);
declare variable val bigint;
begin
  for select trim(rdb$generators.rdb$generator_name)
      from rdb$generators
      where rdb$generators.rdb$generator_name not containing '$'
      into gn
  do
  begin
    create_sql='create generator '||gn;
    execute statement 'select gen_id('||gn||',0) from rdb$database' into val;
    set_val='set generator '||gn||' to '||val;
    suspend;
  end
end
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung

Geändert von IBExpert ( 9. Sep 2018 um 00:31 Uhr)
  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 22:45 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 by Thomas Breitkreuz