AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ALTER PROCEDURE mit ZeosLib aus Delphi auslösen
Thema durchsuchen
Ansicht
Themen-Optionen

ALTER PROCEDURE mit ZeosLib aus Delphi auslösen

Ein Thema von Siggi · begonnen am 27. Dez 2015 · letzter Beitrag vom 28. Dez 2015
 
Siggi

Registriert seit: 19. Jun 2004
Ort: Lollar
52 Beiträge
 
Delphi 11 Alexandria
 
#1

ALTER PROCEDURE mit ZeosLib aus Delphi auslösen

  Alt 27. Dez 2015, 20:58
Datenbank: Firebird • Version: 2.5 • Zugriff über: ZEOSLib
Hallo zusammen,

nach stundenlangem erfolglosem Probieren und Googeln frage ich mal hier ob jemand eine Lösung kennt.

Der folgende Code funktioniert mit IBExpert problemlos (Hinweis: die Procedure macht derzeit nichts wirklich sinnvolles, ich möchte aber für meine Applikation zukünftig auch Updates der Datenbank per Script ausliefern können und versuche, diese Möglichkeoit zu implementieren. Die Procedure ist also nur ein Test, nichtsdestotrotz sollte sie funktionieren...):
Code:
SET TERM ^ ;
CREATE OR ALTER PROCEDURE TMP_UPDATE_DB
AS
Declare v_version integer;
BEGIN
  select DATABASE_VERSION from SETTINGS where ID=1 into v_version;

  if (not exists(
      select 1 from RDB$RELATION_FIELDS rf
      where rf.RDB$RELATION_NAME = 'TMP_TEST' and rf.RDB$FIELD_NAME = 'SPALTE5')
      ) then execute statement 'ALTER TABLE TMP_TEST ADD SPALTE5 VARCHAR(200)';

  if (:v_version < 2) then
    execute statement 'ALTER TABLE TMP_TEST ADD SPALTE6 VARCHAR(200)';

  if (:v_version > 3) then
    execute statement 'ALTER TABLE TMP_TEST ADD SPALTE7 VARCHAR(200)';
END ^
SET TERM ; ^
Mit der Komponente TZSQLProzessort der ZEOS-Lib bekomme ich aber die Fehlermeldung
Zitat:
SQL Error: unsuccessful metadata update MODIFY RDB$PROCEDURES failed. Error Code: -607. This operation is not defined for system tables. The SQL: CREATE OR ALTER PROCEDURE TMP_UPDATE_DB
AS
Declare v_version integer;
BEGIN
select DATABASE_VERSION from SETTINGS where ID=1 into v_version;

if (not exists(
select 1 from RDB$RELATION_FIELDS rf
where rf.RDB$RELATION_NAME = 'TMP_TEST' and rf.RDB$FIELD_NAME = 'SPALTE5')
) then execute statement 'ALTER TABLE TMP_TEST ADD SPALTE5 VARCHAR(200)';

if (:v_version < 2) then
execute statement 'ALTER TABLE TMP_TEST ADD SPALTE6 VARCHAR(200)';

if (:v_version > 3) then
execute statement 'ALTER TABLE TMP_TEST ADD SPALTE7 VARCHAR(200)';
END
;
Die SET TERM Zeilen haz TZSQLProcessor ausgeschnitten und nur das eigentliche CREATE OR ALTER PROCEDURE ausgeführt - evtl. ist das die Ursache??

Der Aufruf sieht so aus:
Delphi-Quellcode:
    ZSQLProcessor1.Delimiter:='^';
    ZSQLProcessor1.DelimiterType:= dtSetTerm;
    ZSQLProcessor1.LoadFromFile(ExtractFilePath(ParamStr(0))+'\SQL_UPDATE.sql');
    ZSQLProcessor1.CleanupStatements; // Kommentare entfernen
    ZSQLProcessor1.Parse;
    if(ZSQLProcessor1.StatementCount>0) then
    begin
      ZConnection1.StartTransaction;
      try
        ZSQLProcessor1.Execute;
        ZConnection1.Commit;
      except
        ZConnection1.Rollback;
      end;
    end;
Ich habe bereits andere Delimiter versucht, mit ";" z.B wird das Zusammenbauen der zu übergebenden Scripts gleich beim ersten ; abgebrochen.
Irgendeine Kleinigkeit übersehe ich da und finde es nicht

Hat jemand einen Tipp?
Braucht Ihr weitere Infos?

Danke und Grüße,
Siggi
  Mit Zitat antworten Zitat
 


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 08:36 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-2025 by Thomas Breitkreuz