Announcement

Collapse
No announcement yet.

Foreign Keys zur Laufzeit zuweisen: "Object is in use"

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Foreign Keys zur Laufzeit zuweisen: "Object is in use"

    Hallo,

    mit Foreign Keys habe ich wohl kein Glück :-(

    Diesmal versuche ich, eine FB-Datenbank zur Laufzeit zu erzeugen. Zuerst hatte ich dabei das Problem, nicht innerhalb einer Transaktion eine Tabelle erstellen und mit Daten füllen zu können ("Table does not exist"). Schwamm drüber, muss ich eben mehrere TA machen.

    Aber jetzt schaffe ich es noch nicht einmal, der jungfräulichen Datenbank bzw. ihren Tabellen Foreign Keys zuzuweisen.

    Ich arbeite mit den Zeos Komponenten und schicke die Befehle mit einem TZScript zum Server (in diesem Fall FB Embedded). Das klappt ansonsten auch gut, aber diesmal steigt er beim COMMIT aus.

    Die Fehlermeldung lautet: <B>Unsuccessful metadata update object [Tabellenname] is in use. Error code -607. this operation is not defined for system tables.</B>

    Ich bin der einzige User. Unmittelbar vor der Zuweisung connecte ich erst zur DB. Die Zuweisung des Foreign Keys ist der erste und einzige Befehl, der zum Server geht. Wenn ich denselben Befehl mit Copy&Paste in ein SQL-Tool eingebe, klappt es.

    Weiß jemand weiter?

    Viele Grüße,

    Stefan Balzter

  • #2
    Stefan,<br>
    "einziger User" reicht beim Erzeugen von Indizes und Constraints nicht aus!<br>
    Es darf auch KEIN Server-interner Zugriff auf die Tabelle erfolgen, d.h. wenn Du auf einer Tabelle ein Insert oder Update / Delete (oder was auch immer machst), ist die Tabelle im Zugriff und Du kannst KEINEN ForeignKey anlegen, solange Du nicht die Verbindung trennst und neu aufbaust.<p>
    Generell solltest Du in Deinen Statements auch immer klar zwischen DDL und DML trennen und diese NICHT vermischen!<p>
    Du schreibst, es ist Dein einziger Befehl - anscheinend scheint aber ZEOS die vorherige Verbindung nicht gekappt zu haben. Probier das mal aus (indem Du den FB-Server herunter- und hochfährst).<br>
    Ist das Problem immer noch vorhanden, scheint sich Zeos wohl ein paar Daten vorab zu laden (sicher, dass es nicht in Deinem Source-Code passiert?)<p>
    Gruss<br>
    Lu

    Comment


    • #3
      Hier ist mein Code. Sorry, die Komponente heißt gar nicht ZScript, sondern ZSQLProcessor.

      <PRE>
      // ... vorher: DB erstellen und Tabellen rein ...
      ZConn.Disconnect;
      Warte(1); // 1 sec Pause
      ZConn.Connect;
      ZSQLProcessor.Script.LoadFromFile('skript.sql');
      ZSQLProcessor.Execute;
      // ... nachher: DB mit Daten bevölkern ...
      </PRE>

      Ich habe auch versucht, das Ganze mit ZConn.StartTransaction / ZConn.Commit einzuzäunen, was zur Folge hat, dass der Fehler erst beim COMMIT auftritt und nicht beim EXECUTE

      Comment


      • #4
        Außerdem möchte ich noch hinzufügen, dass ich das Ganze mittlerweile auch mit dem "großen" Firebird-Server ausprobiert habe und daher ausschließen kann, dass es eine Macke des Embedded Server ist.

        Viele Grüße,

        Stefan Balzte

        Comment


        • #5
          Hallo,

          scheint so, als sei das Ganze eher ein Problem der Zeos Komponenten als von Firebird. Im dortigen Forum berichtet man über ähnliche Probleme. Damit gehört die Sache wohl nicht mehr wirklich in dieses Forum.

          Viele Grüße,

          Stefa

          Comment


          • #6
            Stefan,<p>
            das hatte ich befürchtet!<br>
            Wenn Du grosse/viele Projekte mit FB hast, lege ich dir hiermit nochmals IBObjects an Herz!<p>
            Luc...<br>
            ... der gerade vom neuen Layout erschlagen wird ;-

            Comment


            • #7
              Oder FIBPlus

              Bern

              Comment


              • #8
                IBObjects kenne ich und sind eine gute Sache (auch wenn man eine Weile braucht um reinzukommen), aber ich muss meine Anwendung für mehrere DBMS anpassen, nicht nur für FB, und da kenne ich bisher nur Zeos. Alternativvorschläge sind willkommen :-)

                Stefa

                Comment

                Working...
                X