Seite 1 von 1

Firebird Trigger mit QSqlQuery

Verfasst: 7. Oktober 2010 10:01
von spatro
Hallo,
ich habe folgendes Problem. In meinem Programm wird eine Firebird Datenbank verwendet, auf die mit Hilfe des Ibase Plugins zugegriffen wird. Das funktioniert auch wunderbar.
Problematisch wird es bei Updates, wenn die DB Struktur angepasst werden muss. Dazu verwende ich QSqlQuery und kann damit z.B. neu Tabellen anlegen oder löschen.
Beim Versuch einen neuen Datenbanktrigger anzulegen, der mir einen Index in einer Tabelle erzeugt bin ich bis jetzt gescheitert. Übergebe ich den SQL Code mit einem anderen Programm (FlameRobin) funktioniert er. Mit QSqlQuery leider nicht.

SET TERM ^ ;
CREATE TRIGGER CREATE_USERSETTINGS_ID FOR USERSETTINGS ACTIVE
BEFORE INSERT POSITION 0
AS BEGIN NEW.id = GEN_ID(USERSETTINGSID, 1); END^
SET TERM ; ^

Ich bin mir im Klaren, dass das eigentlich keine Qt Frage ist, aber ich gehe davon aus, dass es nichts mit dem SQL Code zu tun hat, weil der ja mit anderen Programmen funktioniert. Ich würde gern wissen, ob es prinzipiell nicht möglich ist den Code mit Qt auszuführen, oder ob es da evtl. eine Möglichkeit gibt.

Vielen Dank schon mal.

Verfasst: 7. Oktober 2010 10:16
von ScyllaIllciz
Und wie ist die Fehlermeldung (QSqlQuery::lastError())? Da wird doch gesagt warum es nicht ging!

Verfasst: 7. Oktober 2010 10:55
von spatro
Sorry, hab ich vergessen zu schreiben.
Er beschwert sich über das SET TERM:

Dynamic SQL Error - SQL error code = -104 - Token unknown - line 1, column 5 - TERM Could not prepare statement

Verfasst: 7. Oktober 2010 11:11
von ScyllaIllciz
Ich würde spontan "^" mal weg lassen. Ich kenne mich aber mit Firebird nicht aus!

Verfasst: 7. Oktober 2010 11:27
von spatro
Das nützt leider nichts, denn das ist ein Bestandteil der Anweisung.
Ich habe schon ziemlich viel mit dem SQL Code rumgespielt und verschiedene Änderungen versucht. Hat alles nichts gebracht.

Verfasst: 7. Oktober 2010 15:33
von AlexDu
Hallo,

falls es an dem "^"-Zeichen liegt, kannst Du IMHO auch andere Zeichen verwenden. Es muß nur ein Zeichen sein, welches in der SQL-Anweisung nicht vorkommt, da dieses Zeichen vorübergehend als Terminator dient (statt dem ";").

HTH, Alex

Verfasst: 8. Oktober 2010 08:19
von spatro
Danke für den Tipp, aber das es hilft leider auch nichts das ^ zu ersetzen.
Es erscheint die gleiche Fehlermeldung.

Verfasst: 8. Oktober 2010 09:18
von DBGTMaster
Befehl schon auf der firebird command line getestet?
Falls es dort funktioniert, logging der datenbank aufdrehen, um zu sehen, welcher befehl tatsächlich bei der db ankommt, eventuell irgendwelche zeichenkodierungsprobleme..

Lg