Firebird Trigger mit QSqlQuery

Alles rund um die Programmierung mit Qt
Antworten
spatro
Beiträge: 46
Registriert: 18. Juni 2008 10:54

Firebird Trigger mit QSqlQuery

Beitrag 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.
ScyllaIllciz
Beiträge: 200
Registriert: 9. Juli 2010 19:31

Beitrag von ScyllaIllciz »

Und wie ist die Fehlermeldung (QSqlQuery::lastError())? Da wird doch gesagt warum es nicht ging!
spatro
Beiträge: 46
Registriert: 18. Juni 2008 10:54

Beitrag 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
ScyllaIllciz
Beiträge: 200
Registriert: 9. Juli 2010 19:31

Beitrag von ScyllaIllciz »

Ich würde spontan "^" mal weg lassen. Ich kenne mich aber mit Firebird nicht aus!
spatro
Beiträge: 46
Registriert: 18. Juni 2008 10:54

Beitrag 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.
AlexDu
Beiträge: 14
Registriert: 28. Januar 2009 14:08

Beitrag 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
spatro
Beiträge: 46
Registriert: 18. Juni 2008 10:54

Beitrag von spatro »

Danke für den Tipp, aber das es hilft leider auch nichts das ^ zu ersetzen.
Es erscheint die gleiche Fehlermeldung.
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Beitrag 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
Antworten