Firebird-Prozeduren über TSQLScript erzeugen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
GNR82
Beiträge: 6
Registriert: Fr 10. Sep 2010, 12:24

Firebird-Prozeduren über TSQLScript erzeugen

Beitrag von GNR82 »

Hallo Forum,

wieder einmal habe ich einen Fehler den ich bis jetzt nicht lösen konnte und wende mich deswegen an Euch.

Über IB-Expert kann ich folgendes SQL-Statement ohne Probleme ausführen, über das TSQLScript bekomme ich eine Fehlermeldung.

Code: Alles auswählen

SET TERM ^ ;
 
ALTER TRIGGER FLATS_LOG
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 999
AS
declare variable alogid integer;
declare variable aDATA_ID integer;
declare variable aTYP integer;
begin
 
aDATA_ID = -2;
aTYP = -2;
 
    IF (inserting) then
        begin
        aDATA_ID = new.id;
        aTYP = 0;
        end
    else IF (updating) then
        begin
        aDATA_ID = new.id;
        aTYP = 1;
        end
    else IF (deleting) then
        begin
        aDATA_ID = old.id;
        aTYP = 2;
        end
 
SELECT ologid FROM insert_into_log(:aDATA_ID,:aTYP,'FLATS',-1) INTO alogid;
 
    IF (inserting) then
        begin
        execute procedure insert_into_log_fields(alogid, 'city_part_id', new.city_part_id, NULL);
        end
    else IF (updating) then
        begin
        execute procedure insert_into_log_fields(alogid, 'city_part_id', new.city_part_id, old.city_part_id);
        end
    else IF (deleting) then
        begin
        execute procedure insert_into_log_fields(alogid, 'city_part_id', NULL, old.city_part_id);
        end
 
end
^
 
SET TERM ; ^
Fehlermeldung:
PrepareStatement :
-Dynamic SQL Error
-SQL error code = -804
-Data type unknown

Ich konnte den Fehler soweit einschränken, dass es an dem Select-Statement liegt. Ohne das Select-Statement wird das Statement ordentlich ausgeführt. Ich habe auch schon versucht das Ergebnis zu explizit in eine Integer-Wert zu wandeln:

Code: Alles auswählen

SELECT cast(ologid AS integer) FROM insert_into_log(:aDATA_ID,:aTYP,'FLATS',-1) INTO alogid;
Leider funktioniert auch das nicht.

Vielen Dank im Vorraus!

PS: Das selbe Problem habe ich auch bei erstellen von Funktionen, Prozedure und Views.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Firebird-Prozeduren über TSQLScript erzeugen

Beitrag von mse »

Hast du mal mit tibconnection.executedirect() probiert? TSQLScript versteht möglicherweise "set term" nicht. MSEgui tmsesqlscript hat die property "term" für diesen Zweck, vielleicht gibt es in Lazarus ebenfalls eine entsprechende Eigenschaft?

Martin

GNR82
Beiträge: 6
Registriert: Fr 10. Sep 2010, 12:24

Re: Firebird-Prozeduren über TSQLScript erzeugen

Beitrag von GNR82 »

TSQLScript versteht "SET TERM" schon. Das Problem liegt wirklich "nur" bei dem Select-Statement. Ohne das Select Statement wird das Script ja ordentlich ausgeführt.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Firebird-Prozeduren über TSQLScript erzeugen

Beitrag von mse »

GNR82 hat geschrieben:TSQLScript versteht "SET TERM" schon. Das Problem liegt wirklich "nur" bei dem Select-Statement. Ohne das Select Statement wird das Script ja ordentlich ausgeführt.
Aha. Und du bist überzeugt davon, dass TSQLScript nicht das "select"-statement anstatt des "alter trigger"-statements ausführt?

GNR82
Beiträge: 6
Registriert: Fr 10. Sep 2010, 12:24

Re: Firebird-Prozeduren über TSQLScript erzeugen

Beitrag von GNR82 »

Ah, jetzt verstehe ich auf was du hinaus willst. Ich werde es testen, danke für die Info!

GNR82
Beiträge: 6
Registriert: Fr 10. Sep 2010, 12:24

Re: Firebird-Prozeduren über TSQLScript erzeugen

Beitrag von GNR82 »

:D Vielen Dank! Es hat über "ExecuteDirect"funktioniert! Manchmal liegt die Anwort so nah ... :)

Clemens

Antworten