![]() |
Datenbank: Firebird • Zugriff über: IBX 6
ALTER wird im Script für TIBSQL nicht erkannt
Hallo,
ich habe ein merkwürdiges Problem mit TIBSQL. In einer Textdatei befindet sich folgendes Script. (Das Script wird von der IBConsole einwandfrei verarbeitet.)
SQL-Code:
Mit folgendendem Code möchte ich das Script verarbeiten
CREATE TABLE "INPUT_TEST"
( "JAHR" TINT , "VER" TINT , "KATEGORIE" TSTRING30 COLLATE DE_DE, "PARTNER" TSTRING15 COLLATE DE_DE, "EMPF" TSTRING15 COLLATE DE_DE, "PLANWERT" DOUBLE PRECISION, "POSNR" TSTRING30 COLLATE DE_DE, "BWA" TSTRING15 COLLATE DE_DE, "SAISON" TINT ); ALTER TABLE "INPUT_TEST" ADD FOREIGN KEY ("VER") REFERENCES "VERSIONEN" ("ID") ON UPDATE CASCADE ON DELETE CASCADE; SET TERM ^ ; /* Triggers only will work for SQL triggers */ CREATE TRIGGER "TRG_INPUT_TEST _0" FOR "INPUT_TEST" ACTIVE BEFORE INSERT POSITION 0 as begin if (new.ver is null) then SELECT id FROM versionen WHERE aktive=1 INTO new.ver; end ^ SET TERM ;^
Delphi-Quellcode:
Während der Ausführung tritt dann dieser Fehler auf
procedure TFormDatasources.CreateTable(const Tablename: String);
// Über den Pararmeter Tablename soll später der Tabellenname kommen // Hinter SystemDataprovider.DbDataprovider.Command2 verbirgt sich TIBSQL. var aSQL : TStringList; begin aSQL:=TStringList.Create; Try aSQL.LoadFromFile(ApplicationPath+'Datenbank\createtable.txt'); // Just for testing With DM do begin SystemDataprovider.DbDataprovider.Transaction2.StartTransaction; Try SystemDataprovider.DbDataprovider.Command2.SQL:=aSQL; SystemDataprovider.DbDataprovider.Command2.ExecQuery; Finally SystemDataprovider.DbDataprovider.Transaction2.Commit; end; end; Finally aSQL.Free; end; end;
Code:
Hat jemand dafür eine Erklärung das ALTER hier nicht bekannt ist oder evt. sogar eine Lösung?
Dynamic SQL Error
SQL error code = -104' Token unknown - line 1' +'3, char 1' 'ALTER' |
Re: ALTER wird im Script für TIBSQL nicht erkannt
Hallo Jens,
das liegt daran, dass die IBSQL Komponente keine Scripts verarbeiten kann, sondern nur einzelne SQL Anweisungen. Ich habe deshalb Scripts immer in einzelne SQL Statements zerlegt, die ich dann einzeln ausgeführt habe. Ich meine, dass FibPlus ab der Version 6 Scripts direkt ausführen kann. |
Re: ALTER wird im Script für TIBSQL nicht erkannt
Hallo Mr Spock,
mittlerweile habe ich die Scripte entsprechend aufgeteilt. Das Script für die Tabelle sieht jetzt so aus
SQL-Code:
Grundsätzlich funktioniert das auch. Aber wenn mehr als ein User angemeldet sind kommt jetzt dieser Fehler
CREATE TABLE "INPUT_TEST"
( "JAHR" TINT , "VER" TINT , "KATEGORIE" TSTRING30 COLLATE DE_DE, "PARTNER" TSTRING15 COLLATE DE_DE, "EMPF" TSTRING15 COLLATE DE_DE, "PLANWERT" DOUBLE PRECISION, "POSNR" TSTRING30 COLLATE DE_DE, "BWA" TSTRING15 COLLATE DE_DE, "SAISON" TINT, FOREIGN KEY ("VER") REFERENCES "VERSIONEN" ("ID") ON UPDATE CASCADE ON DELETE CASCADE; );
Code:
ISC ERROR CODE:335544351
ISC ERROR MESSAGE: unsuccessful metadata update object VERSIONEN is in use |
Re: ALTER wird im Script für TIBSQL nicht erkannt
Hallo Jens,
ich vermute, dass es damit zusammenhängt, dass du eine Tabelle erstellst mit einem Fremdschlüssel auf die Tabelle Versionen mit cascading update und delete und die Tabelle Versionen zur Zeit in Benutzung ist. Damit wäre es dann nicht möglich, Änderungen in Versionen kaskadierend zu übernehmen. Wie gesagt, das ist nur eine Vermutung aufgrund der Fehlermeldung. |
Re: ALTER wird im Script für TIBSQL nicht erkannt
Zitat:
|
Re: ALTER wird im Script für TIBSQL nicht erkannt
Hallo Jens,
das ist seltsam. Hast du die zugehörige Transaction, mit der die Tabelle erzeugt wird, einmal auf "write und consistency" (Lesen Schreiben Tabellenstabilität) gesetzt? |
Re: ALTER wird im Script für TIBSQL nicht erkannt
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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