![]() |
Datenbank: Firebird • Version: 2,5 • Zugriff über: IBDAC
SQL Statement CREATE or ALTER PROCEDURE Fehler
Hallo,
habe folgendes SQL Statement in einer Datei:
Code:
Diese Datei lade ich und führe sie aus:
CREATE OR ALTER procedure GET_VNR (
INJAHR integer, INART char(1)) returns ( SVNUMMER varchar(5)) as declare variable AKTJAHR integer; declare variable AKTWOCHE integer; declare variable NR integer; declare variable VNUMMER integer; begin /* Procedure Text */ VNUMMER = 0; select JAHR from AKTUELL where VORGANG = :INART into :AKTJAHR; /* aktuelles Jahr */ if (INJAHR = AKTJAHR) then VNUMMER = iif(INART = 'A', gen_id(VNR_A, 1), gen_id(VNR_V, 1)); else /* neues Jahr */ if (INJAHR > AKTJAHR) /* Jahreswechsel */ then begin if (INART = 'A') then execute statement 'alter sequence vnr_a restart with 0'; else /* art = 'V' */ execute statement 'alter sequence vnr_v restart with 0'; update AKTUELL set JAHR = :INJAHR where VORGANG = :INART; VNUMMER = iif(INART = 'A', gen_id(VNR_A, 1), gen_id(VNR_V, 1)); end else begin /* altes Jahr -> wird ohne Generatoren gelöst */ select max(VORGANGSNUMMER) from VORGANGKOPF VK where VK.VORGANGSART = :INART and cast(Substr(Woche, 4, 5) as integer) = :injahr into :NR; VNUMMER = NR + 1; end SVNUMMER = cast(VNUMMER as varchar(5)); while (char_length(SVNUMMER) < 5) do SVNUMMER = '0' || SVNUMMER; suspend; end;
Delphi-Quellcode:
Dabei erhalte ich den Fehler:
...IBSQLDD.SQL.LoadFromFile(fname);
ShowMessage(IBSQLDD.SQL.Text); IBSQLDD.Transaction.StartTransaction; IBSQLDD.ExecQuery;... Zitat:
Hat jemand eine Idee? |
AW: SQL Statement CREATE or ALTER PROCEDURE Fehler
Sicher, dass :AKTJAHR von IBSQLDD als Variable und nicht als Parameter verwendet wird?
|
AW: SQL Statement CREATE or ALTER PROCEDURE Fehler
Denke mal da fehlt das
SET TERM ^ ; am Anfang und entsprechend SET TERM ; ^ am Ende |
AW: SQL Statement CREATE or ALTER PROCEDURE Fehler
lass mal die umlaute und sonderzeichen in den kommentaren weg
(metadaten sind Unicode, ggf kannst du die dann mit passender connection auch ausführen, weglassen ist aber einfacher) |
AW: SQL Statement CREATE or ALTER PROCEDURE Fehler
Glaube auch, dass das SET TERM da falsch ist. Ich schreibe allerdings aus anderem Grund. Du wirst doch hoffentlich nicht Generatoren / Sequences für Datenhaltung missbrauchen ? :shock: Da wimmelt es ja nur so mit gen_id, alter sequence etc. Durch solche Aktionen wird ja das ganze Firebird - Transaktions - Management aus den Angeln gehoben. Wozu das ?
|
AW: SQL Statement CREATE or ALTER PROCEDURE Fehler
Es spricht nichts dagegen, Werte in Generatoren zu speichern. Mit dem Transaktionsmanagement hat das nichts zu tun; die Generatoren sind zwar davon unabhängig aber wenn man das berücksichtigt ist es ok.
Ich speichere z.B. eine Versionsnummer sowohl in der Datenbank (Generator) als auch im Programm. Beim Programmstart wird geprüft, ob die Versionsnummer des Programmes größer ist und dann gegebenenfalls die Datenbank angepasst. |
AW: SQL Statement CREATE or ALTER PROCEDURE Fehler
Zitat:
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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