AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ALTER wird im Script für TIBSQL nicht erkannt
Thema durchsuchen
Ansicht
Themen-Optionen

ALTER wird im Script für TIBSQL nicht erkannt

Ein Thema von Jens Schumann · begonnen am 12. Feb 2006 · letzter Beitrag vom 12. Feb 2006
Antwort Antwort
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#1

ALTER wird im Script für TIBSQL nicht erkannt

  Alt 12. Feb 2006, 10:02
Datenbank: Firebird • Zugriff über: IBX 6
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:
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 ;^
Mit folgendendem Code möchte ich das Script verarbeiten
Delphi-Quellcode:
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;
Während der Ausführung tritt dann dieser Fehler auf
Code:
Dynamic SQL Error
        SQL error code = -104'
        Token unknown - line 1' +'3, char 1'
        'ALTER'
Hat jemand dafür eine Erklärung das ALTER hier nicht bekannt ist oder evt. sogar eine Lösung?
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: ALTER wird im Script für TIBSQL nicht erkannt

  Alt 12. Feb 2006, 10:47
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#3

Re: ALTER wird im Script für TIBSQL nicht erkannt

  Alt 12. Feb 2006, 10:53
Hallo Mr Spock,
mittlerweile habe ich die Scripte entsprechend aufgeteilt.
Das Script für die Tabelle sieht jetzt so aus
SQL-Code:
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;
);
Grundsätzlich funktioniert das auch. Aber wenn mehr als ein User angemeldet sind kommt jetzt dieser Fehler
Code:
ISC ERROR CODE:335544351

ISC ERROR MESSAGE:
unsuccessful metadata update
object VERSIONEN is in use
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

Re: ALTER wird im Script für TIBSQL nicht erkannt

  Alt 12. Feb 2006, 11:07
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#5

Re: ALTER wird im Script für TIBSQL nicht erkannt

  Alt 12. Feb 2006, 11:12
Zitat von MrSpock:
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.
Die Vermutung habe ich auch. Aber ich kann keine Erklärung dafür finden. Wenn jetzt User1 die Tabelle erzeugen möchte und User innerhalb einer Transkation irgendetwas mit der Tabelle versionen macht könnte ich mir das vorstellen. User2 macht aber nichts. Users2 ist nur angemeldet und hat noch keinerlei Aktionen gegen die Datenbank abgesetzt.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#6

Re: ALTER wird im Script für TIBSQL nicht erkannt

  Alt 12. Feb 2006, 11:33
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?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#7

Re: ALTER wird im Script für TIBSQL nicht erkannt

  Alt 12. Feb 2006, 11:39
Zitat von MrSpock:
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?
Habe ich gerade gemacht. Immer noch der geliche Fehler. Es ist auch nur diese eine Transaktion aktive.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz