AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Generator zurücksetzen aus StoredProcedure
Thema durchsuchen
Ansicht
Themen-Optionen

Generator zurücksetzen aus StoredProcedure

Ein Thema von DirkG · begonnen am 18. Jan 2010 · letzter Beitrag vom 18. Jan 2010
Antwort Antwort
Benutzerbild von DirkG
DirkG

Registriert seit: 29. Sep 2003
Ort: Schwerin
67 Beiträge
 
Delphi 5 Enterprise
 
#1

Generator zurücksetzen aus StoredProcedure

  Alt 18. Jan 2010, 10:19
Datenbank: Interbase • Version: 5 • Zugriff über: intern
Hallo DP'ler.

Wieder mal ein Problem mit Stored Procedure

Ich würde gerne mit einer Procedur alle Datensätze einer Veranstaltung aus der Datenbank löschen, was auch schon läuft. Nun kommt das Problem. Um den Generator für die DS ID nicht unnötig zu erhöhen, wollte ich nach dem Löschen, den Generator auf den nächsten verfügbaren Wert setzen. Leider meckert Interbase rum und meint das er das Kommando nicht kennt. Wie ist der korrekte Syntax?

SQL-Code:
SET TERM ^ ;

/* Stored procedures */
CREATE PROCEDURE RESETRUNS
( EVENTID INTEGER )
AS
 DECLARE VARIABLE NewGen INT;
BEGIN
  DELETE FROM RUNS WHERE (RUN_EVENT =:EVENTID);
  SELECT MAX(RUN_ID)+1 FROM RUNS INTO :NewGen ;
  /* hier kommt der Fehler */
  SET GENERATOR GEN_RUN TO :NewGen;
END
 ^

SET TERM ; ^
Ach ja wenn es weiterhilft, die Fehlermeldung lautet:
SQL-Code:
  Dynamic SQL Error
  SQL error code = -104
  Token unknown - line 10, char 1
  SET ...
Vielen Dank!
Human are Human to make mistakes.
  Mit Zitat antworten Zitat
TBx
(Administrator)

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

Re: Generator zurücksetzen aus StoredProcedure

  Alt 18. Jan 2010, 10:30
mal davon abgesehen, dass ich so eine Generatorveränderung nicht machen würde, lautet die korrekte Syntax in deinem fall:

gen_id (GEN_RUNS, -(gen_id(GEN_RUNS, 0)- :NewGen));
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Benutzerbild von DirkG
DirkG

Registriert seit: 29. Sep 2003
Ort: Schwerin
67 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Generator zurücksetzen aus StoredProcedure

  Alt 18. Jan 2010, 12:40
Hey Danke für die schnelle Antwort.

Ich habe die Procedur nun so geändert. Aber die IB Console meckert immer noch, wenn ich dieses Statement in der IB-Console eingebe:

SQL-Code:
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

/* Stored procedures */
ALTER PROCEDURE RESETRUNS
(
  EVENTID INTEGER
)
AS
 DECLARE VARIABLE NewGen INT;
BEGIN
  DELETE FROM RUNS WHERE (RUN_EVENT =:EVENTID);

  SELECT MAX(RUN_ID)+1 FROM RUNS INTO :NewGen ;
  
  /* SET GENERATOR GEN_RUN TO :NewGen; */
  /* immer noch Fehlermeldung */
  GEN_ID (GEN_RUNS, :NewGen);
  GEN_ID (GEN_RUNS, 0);
  
END
 ^

SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
Fehlermeldung ist
Code:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 10, char 1
[b]gen_id[b]
Lt. F1 soll aber der Syntax bekannt sein, um einen Generator zu setzen. Somit bin ich leider genauso weit wie bisher.

Noch was anderes, warum sollte man den Generator nicht zurücksetzen. Diese Tabelle beinhaltet immer nur die Datensätze für eine Veranstaltung. Ist die Veranstaltung abgeschlossen, werden diese wieder gelöscht. Bei der nächsten Veranstaltung werden sie wieder neu generiert.
Human are Human to make mistakes.
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Generator zurücksetzen aus StoredProcedure

  Alt 18. Jan 2010, 12:43
Hallo,

in der Firebird-Doku 2.0 steht:
Zitat:
Certain constructs, including all DDL (Data Definition Language) statements, are omitted.
Dies gilt also erst recht für das "uralte" Interbase 5, und SET GENERATOR und Varianten gehören eben zu DDL.

Du kannst es also nur manuell erledigen, aber nicht aus einer SP heraus.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von DirkG
DirkG

Registriert seit: 29. Sep 2003
Ort: Schwerin
67 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Generator zurücksetzen aus StoredProcedure

  Alt 18. Jan 2010, 12:53
OK.
Trotzdem ein kleines Aufbäumen; In der Online Hilfe der IB Console zu SQL steht:
Zitat:
Produces a system-generated integer value. Available in SQL, DSQL, and isql.
Ich war bisher davon ausgegangen, isql wird in Stored Procedure verwendet.
Da muss ich mir wohl doch was anderes überlegen...
Human are Human to make mistakes.
  Mit Zitat antworten Zitat
TBx
(Administrator)

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

Re: Generator zurücksetzen aus StoredProcedure

  Alt 18. Jan 2010, 13:11
Sorry, ich hatte vergessen, dass Funktionen auch einer Variablen zugewiesen werden müssen.
So sollte es nun funktionieren:

SQL-Code:
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

/* Stored procedures */
ALTER PROCEDURE RESETRUNS
(
  EVENTID INTEGER
)
AS
 DECLARE VARIABLE NewGen INT;
 DECLARE VARIABLE NEWID INTEGER;
BEGIN
  DELETE FROM RUNS WHERE (RUN_EVENT =:EVENTID);

  SELECT MAX(RUN_ID)+1 FROM RUNS INTO :NewGen ;
  
  /* SET GENERATOR GEN_RUN TO :NewGen; */
  NEWID = GEN_ID (GEN_RUNS, -(GEN_ID (GEN_RUNS, 0) - :NewGen));
  ;
  
END
 ^

SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Benutzerbild von DirkG
DirkG

Registriert seit: 29. Sep 2003
Ort: Schwerin
67 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Generator zurücksetzen aus StoredProcedure

  Alt 18. Jan 2010, 13:29
@TBx

Danke da hätte ich auch selber drauf kommen können! Manchmal ist man so verbohrt in eine Lösung, das man den Wald nicht vor lauter Bäumen sieht.

Noch mal zurück zu deiner Aussage, das du das so nicht machen würdest. Kannst du mir kurz erklären warum?
Human are Human to make mistakes.
  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 02:55 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