Announcement

Collapse
No announcement yet.

FireBird - nur 1 SQL Befehl zur Zeit wird ausgeführt ... wieso?

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

  • FireBird - nur 1 SQL Befehl zur Zeit wird ausgeführt ... wieso?

    Hi,
    ich mache gerade die ersten Gehversuche mit Firebird und IB_SQL,IB_Expert PE etc.
    Wenn ich mit ErWin ein Datenmodell per ODBC eine auf FireBird 1.5 aufspielen möchte wird immer nur der erste Befehl ausgeführt, die folgenden schlagen alle fehl.
    Ich hab's mal mit IB_SQL nachgestellt:

    CREATE DOMAIN Counter INTEGER NOT NULL;
    CREATE DOMAIN Reference INTEGER;

    einzeln kann ich die Zeilen im DSQL des IBExpert ablaufen lassen; zusammen bekomme ich aber immer:
    ISC ERROR MESSAGE:
    Dynamic SQL Error
    SQL error code = -104
    Token unknown - line 4, char 1
    CREATE

    Ähhhh??
    ich habe schon mehr als 60min. drüber nachgedacht, aber ich komme nicht drauf. Was übersehe ich hier?

    mfG
    Bernd

  • #2
    Hallo Bernard,

    in IBExpert verwendest Du dafür Skript ausführen (Ctrl + F12).

    Tschau

    Torste

    Comment


    • #3
      Danke für die Antwort.
      Im Script Executive (Ctrl+F12) funktioniert gar kein Befehl.
      ein simples "create domain abc integer;" führt zum "Script executed with errors". Ist da noch ein separates connect oder ähnlich notwendig?
      Im SQL Editor bzw. new sql Editor funktioniert die Zeile jedoch einwandfrei.
      Zwei Zeilen jedoch
      Create domain a integer;
      create domain b integer;
      führt dort zu "unknown token, create".
      Noch eine Idee

      Comment


      • #4
        Bernard,

        du brauchst noch ein paar Zeilen davor. Hier mal ein Abriss aus einem meiner Scripte:
        <PRE>
        SET NAMES ISO8859_1;
        SET SQL DIALECT 3;
        CREATE DATABASE 'D:\Delphi\Projects\Fahrschule\Fahrschule.fdb' PAGE_SIZE 2048
        USER 'Fahrschule' PASSWORD 'fahrschule'
        DEFAULT CHARACTER SET ISO8859_1;
        CREATE DOMAIN TBOOLEAN0 AS Integer DEFAULT 0 CHECK (VALUE IN(0,1)); /*Ja, Nein; Vorgabe 0*/
        CREATE DOMAIN TBOOLEAN1 AS Integer DEFAULT 1 CHECK (VALUE IN(0,1)); /*Ja, Nein; Vorgabe 1*/
        CREATE DOMAIN TIDPK AS INTEGER NOT NULL; /*Primärschlüssel, darf nicht NULL sein*/
        CREATE DOMAIN TIDFK AS INTEGER NOT NULL; /*Foreign Key, darf nicht NULL sein*/
        ...
        </PRE>

        Versuchs mal auf diese Weise.
        <br>
        <br>
        Floria

        Comment


        • #5
          Aaaaah,
          jetzt kommen wir der Sache näher im Script Executive ist ein separter CONNECT erforderlich. Dann funktioniert dort alles.
          Also z.B. connect database 'd:\test1.gdb' user 'sysdba' password 'masterkey';

          im SQL Editor wird der Connect aber abgelehnt
          (Invalid Token, SQL Error -104, Token unknown connect).
          Damit besteht dann wieder das Problem, daß ich nur ein SQL Befehl zu Zeit absetzen kann.
          Eigentlich will ich die Datenbank ja komplett mit ErWin generieren, aber der ODBC Treiber bringt mir die gleiche Fehlermeldung wie der SQL Editor.
          Hmmmmm .... suche weiter nach Tipps :-

          Comment


          • #6
            Hallo Bernard,

            das folgende Script funktioniert bei mir problemlos im "Script Executive".

            <pre><b>
            /************************************************** ****************************/
            /*** Generated by IBExpert 2.5.0.22 15.07.03 11:52:10 ***/
            /************************************************** ****************************/

            SET NAMES ISO8859_1;

            CREATE DATABASE 'F:\FirebirdDB\Word\Worddb.FB'
            USER 'SYSDBA' PASSWORD 'masterkey'
            PAGE_SIZE 4096
            DEFAULT CHARACTER SET ISO8859_1;

            CREATE DOMAIN T_ID AS
            INTEGER
            NOT NULL;

            CREATE DOMAIN T_TEXT30 AS
            VARCHAR(30);

            /************************************************** ****************************/
            /*** Generators ***/
            /************************************************** ****************************/

            CREATE GENERATOR G_DETAIL;
            SET GENERATOR G_DETAIL TO 5;

            CREATE GENERATOR G_MASTER;
            SET GENERATOR G_MASTER TO 3;

            CREATE GENERATOR G_SUBDETAIL;
            SET GENERATOR G_SUBDETAIL TO 5;

            /************************************************** ****************************/
            /*** Tables ***/
            /************************************************** ****************************/

            CREATE TABLE DETAIL (
            ID T_ID NOT NULL,
            MID T_ID NOT NULL,
            ORT T_TEXT30
            );

            CREATE TABLE MASTER (
            ID T_ID NOT NULL,
            NAME T_TEXT30
            );

            CREATE TABLE SUBDETAIL (
            ID T_ID NOT NULL,
            DID T_ID NOT NULL,
            STRASSE T_TEXT30
            );

            /************************************************** ****************************/
            /*** Primary Keys ***/
            /************************************************** ****************************/

            ALTER TABLE DETAIL ADD CONSTRAINT PK_DETAIL PRIMARY KEY (ID);
            ALTER TABLE MASTER ADD CONSTRAINT PK_MASTER PRIMARY KEY (ID);
            ALTER TABLE SUBDETAIL ADD CONSTRAINT PK_SUBDETAIL PRIMARY KEY (ID);

            /************************************************** ****************************/
            /*** Foreign Keys ***/
            /************************************************** ****************************/

            ALTER TABLE DETAIL ADD CONSTRAINT FK_DETAIL FOREIGN KEY (MID) REFERENCES MASTER (ID);
            ALTER TABLE SUBDETAIL ADD CONSTRAINT FK_SUBDETAIL FOREIGN KEY (DID) REFERENCES DETAIL (ID);

            /************************************************** ****************************/
            /*** Triggers ***/
            /************************************************** ****************************/

            SET TERM ^ ;

            /* Trigger: DETAIL_BI0 */
            CREATE TRIGGER DETAIL_BI0 FOR DETAIL
            ACTIVE BEFORE INSERT POSITION 0
            AS
            begin
            if (new.id is null) then new.id = gen_id(g_detail, 1);
            end
            ^

            /* Trigger: MASTER_BI0 */
            CREATE TRIGGER MASTER_BI0 FOR MASTER
            ACTIVE BEFORE INSERT POSITION 0
            AS
            begin
            if (new.id is null) then new.id = gen_id(g_master, 1);
            end
            ^

            /* Trigger: SUBDETAIL_BI0 */
            CREATE TRIGGER SUBDETAIL_BI0 FOR SUBDETAIL
            ACTIVE BEFORE INSERT POSITION 0
            AS
            begin
            if (new.id is null) then new.id = gen_id(g_subdetail,1);
            end
            ^

            SET TERM ; ^
            </pre></b>

            Tschau

            Torste

            Comment


            • #7
              Moment! Das Problem wurde zwar angesprochen, aber nochmals zur Klarheit:

              der SQL-Editor bearbeitet NUR die ERSTE Zeile, obwohl man mehr eingeben kann. Bin da auch schon drauf reingefallen. Wie gesagt, mußt Du für ein größeres script (> 1 Zeile !!!)die "Script Executive" benutzen. Der SQL-Editor ist nur gedacht für so was wie "delete from table" und dazugehörige Kommentare.

              Eine Anregung, das zu ändern, hat Holger Klemmt auch schon. Mindestens die von mir. 8

              Comment


              • #8
                In der Tat, im Script Executive kein Problem.
                Was ist denn aber der Unterschied zum SQL Editor bzw. New SQL Editor (außer das dort der connect schon besteht)?
                Ist das dortige DSQL (??) irgendwie eingeschränkt in Syntax/Befehlssatz

                Comment


                • #9
                  Oooops, da habe ich über Mittag doch ein Refresh verpaßt und somit nicht auf Hans-Jörg Oswald reagiert.
                  Okay, ist also ein "feature" des IB_Expert.
                  Im IB_SQL genau das gleiche Verhalten (ISC ERROR MESSAGE:
                  Dynamic SQL Error
                  SQL error code = -104
                  Token unknown - line 2, char 1
                  create). Also alle Tools, welche die gleiche Delphi (?) Komponente verwenden, knallen hier lang hin.
                  Im Mitec IB_Query/Sql-Editor funktioniert es ausgezeichnet.
                  Okay, hier muß man also bei seinen Tools genau hinschauen.
                  Bleibt jetzt nur noch die Frage: Warum führt der ODBC-Treiber das nicht aus?
                  Ich starte da gleich mal einen neuen Thread

                  Comment


                  • #10
                    Hallo,<br><br>
                    wißt Ihr eigentlich, dass IBExpert eine eigene Newsgroup für Probleme/Fragen hat? Die sind dort sicher besser aufgehoben.<br><br>

                    news://victory.equitania.de/interbase.ibexpert.de german language<br>
                    news://victory.equitania.de/interbase.ibexpert.en english language<br>
                    news://victory.equitania.de/interbase.ibexpert.ru russian language<br>
                    news://victory.equitania.de/interbase.ibexpert.fr french language<br><br>
                    Thomas
                    Thomas Steinmaurer

                    Firebird Foundation Committee Member
                    Upscene Productions - Database Tools for Developers
                    Mein Blog

                    Comment


                    • #11
                      Hallo Bernhard,<br>
                      kann es sein, dass auch deine Syntax falsch ist ?
                      <p>
                      CREATE DOMAIN Counter INTEGER NOT NULL;
                      <p>
                      Dafehlt doch ein AS
                      CREATE DOMAIN Counter AS INTEGER NOT NULL;
                      <p>

                      Heik

                      Comment


                      • #12
                        Heiko,
                        das AS is optional. Die Syntax ist schon richtig.
                        Hier der Ausschnitt aus der Doku (DDG):

                        The syntax for CREATE DOMAIN is:
                        CREATE DOMAIN domain [AS] <datatype>
                        [DEFAULT { literal | NULL | USER}]
                        [NOT NULL] [CHECK ( <dom_search_condition>)]
                        [COLLATE collation];

                        Bin momentan noch in anderen Dingen drin. Mein Problem ErWin und ODBC hoffe ich nächste Woche noch mal angehen zu können. Dann gibt's nen neuen Threa

                        Comment

                        Working...
                        X