Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Generatoren auf tabellenwert setzen (https://www.delphipraxis.net/200173-generatoren-auf-tabellenwert-setzen.html)

Walter Landwehr 26. Mär 2019 13:58

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBO

Generatoren auf tabellenwert setzen
 
Hallo, gibt es eine Möglichkeit alle Generatoren auf den Tabellenwert zu setzen. Hat jemand einen Lösungsvorschlag?

mkinzler 26. Mär 2019 14:04

AW: Generatoren auf tabellenwert setzen
 
Was meinst Du mit Tabellenwert?

Uwe Raabe 26. Mär 2019 14:16

AW: Generatoren auf tabellenwert setzen
 
So etwas wie DBCC CHECKIDENT <table> RESEED beim SQL Server?

jobo 26. Mär 2019 14:18

AW: Generatoren auf tabellenwert setzen
 
vielleicht:
SET GENERATOR generator-name TO <new-value>

Uwe Raabe 26. Mär 2019 14:20

AW: Generatoren auf tabellenwert setzen
 
oder
Code:
ALTER SEQUENCE <SequenceName> RESTART WITH <NewValue>;

Delphi.Narium 26. Mär 2019 14:33

AW: Generatoren auf tabellenwert setzen
 
Für jede zu "verarbeitende" Tabelle / jeden Generator in einem Script eine Zeile dieser Art einbauen:

SQL-Code:
select 'SET GENERATOR GEN_Generatorname TO '||Max(Generatorspalte) + 1||'; commit;' as SQL from tabelle;


Das Ergebnis nehmen und ausführen.

Das kann man sicherlich auch in eine Prozedur packen und die dort erstellten SQLs dann per EXECUTE STATEMENT ausführen.

Sowas in der (ungetesteten) Art:
SQL-Code:
CREATE PROCEDURE PR_Generator_Update AS
declare v_SQL VarChar(4000);
begin
  select 'SET GENERATOR GEN_Generatorname_1 TO '||Max(Generatorspalte) + 1 from tabelle_1 into :v_SQL;
  EXECUTE STATEMENT v_SQL;
  select 'SET GENERATOR GEN_Generatorname_2 TO '||Max(Generatorspalte) + 1 from tabelle_2 into :v_SQL;  
  EXECUTE STATEMENT v_SQL;
  ...
  commit;
end^
Aufrufen könnte man das dann mit

SQL-Code:
exceute procedure PR_Generator_Update;


Man muss dann halt die Prozedure pflegen und neue Tabellen hinzufügen bzw. alte entfernen.

Walter Landwehr 26. Mär 2019 14:42

AW: Generatoren auf tabellenwert setzen
 
Danke für die schnellen antworten. Sorry der Tabellenwert ist die Generator ID.

hoika 26. Mär 2019 15:11

AW: Generatoren auf tabellenwert setzen
 
Hallo,
Zitat:

Hallo, gibt es eine Möglichkeit alle Generatoren auf den Tabellenwert zu setzen. Hat jemand einen Lösungsvorschlag?
Ich habe es nicht verstanden.
Was konkret willst du machen.
Bitte mal ein kurzes Beispiel.

Neumann 26. Mär 2019 16:28

AW: Generatoren auf tabellenwert setzen
 
Meine man kann den Generator nicht mit select from .. auf einen Wert setzen. Hat zumindest bei mir nicht funktioniert, vielleicht habe ich aber auch was falsch gemacht. Auch 'Set generator gen_xy to :p wollte er nicht machen.

Im Programm kann man aber folgendes machen:

Delphi-Quellcode:
  ibcsql.sql.add('set generator gen_xy to '+inttostr(neuwert);
  ibcsql.execute;
In der Art könnte man das auch als STP machen, lohnt den Aufwand aber nicht unbedingt. Es geht natürlich nur jeder Generator einzelnd, wüsste jetzt nicht wie man das anders lösen könnte.

Blup 27. Mär 2019 09:29

AW: Generatoren auf tabellenwert setzen
 
Zitat:

Zitat von Neumann (Beitrag 1428801)
Meine man kann den Generator nicht mit select from .. auf einen Wert setzen.

Kann man schon, z.B. auf den Wert der aktuell größten ID einer Tabelle:
Code:
select gen_id(g_xyz, (select max(id) from t_xyz) - gen_id(g_xyz, 0)) from rdb$database;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 Uhr.
Seite 1 von 2  1 2      

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