Announcement

Collapse
No announcement yet.

1 generator für 2 tabellen

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

  • 1 generator für 2 tabellen

    Hallo, ich wüßte gerne, ob es möglich ist einen Generator für mehere Tabellen zu nutzen.
    z.b.
    tabelle 1 datensatz wird hinzugefügt:
    neuer generator wert = 1
    tabelle 1 datensatz wird hinzugefügt:
    neuer generator wert = 2
    tabelle 2 datensatz wird hinzugefügt:
    neuer generator wert = 3
    tabelle 1 datensatz wird hinzugefügt:
    neuer generator wert = 4
    usw

  • #2
    ja, ist es.. du kannst auch einen für alle verwenden oder einen für jede tabelle.. wie es dir beliebt..

    Comment


    • #3
      super, und wie setze ich das um?
      muss ich für beide tabellen jeweils einen Trigger bauen?

      Comment


      • #4
        daran arbeite ich auch gerade..

        prinzipiell müsste man für jede tabelle wahrscheinlich einen trigger einrichten schätze ich, der generator zählt ja einfach nur..

        Comment


        • #5
          Ich bekomme nämlich für tabelle 2 immer
          validation error for column ID, value "*** null ***"
          wobei id eigentlich generiert werden sollte.
          bei tabelle 1 geht es ohne probleme.

          Comment


          • #6
            wie hast du es denn umgesetzt?

            ich bekomme die trigger bei mir einfach nicht zum laufen.. ich mach meine queries über anysql aber direkt über isql funktioniert auch nix..

            Code:
            /** TRY TO IMPLEMENT AN AUTO_INCREMENT FUNCTION **/
            CREATE SEQUENCE idcounter;
            
            CREATE TRIGGER AUTO_TAB_COUNT for TABELLE
            active before insert position 0
            as
            begin
                 if(new.tabid is null) then
                 begin
                      new.tabid = gen_id( idcounter, 1 );
                      end
            end

            unter http://www.firebirdsql.org/pdfmanual...eneratoren.pdf ist ein tutorial zu generatoren und triggern.. ab wie gesagt, die beispiele funktionieren bei mir nicht so wie sie sollten..
            Zuletzt editiert von bootsn; 11.09.2008, 10:27.

            Comment


            • #7
              Code:
              CREATE GENERATOR id_gen;
              CREATE TRIGGER Id_t1 FOR table1 ACTIVE BEFORE INSERT POSITION 0 AS
              BEGIN
              IF ((NEW.ID IS NULL) OR (NEW.ID = 0)) THEN NEW.ID = GEN_ID(id_gen, 1);
              END
              Code:
              CREATE GENERATOR id_gen; //um sicherzugehen, dass er existiert
              CREATE TRIGGER Id_t2 FOR table2 ACTIVE BEFORE INSERT POSITION 0 AS
              BEGIN
              IF ((NEW.ID IS NULL) OR (NEW.ID = 0)) THEN NEW.ID = GEN_ID(id_gen, 1);
              END
              ja das manual habe ich auch durchgelesen, da steht aber nicht drinne, wie man 1 generator für 2 tabellen benutz.
              jeweils ein generator funktioniert bei mir auch, nur einer für 2 tabellen geht nicht, so wie ich es habe

              es müsste ja nen befehl geben um einen trigger einer tabelle zuzuweisen ohne sie neu zu erstellen

              Comment


              • #8
                hmm, seltsam.. ich hab mal deinen code auf meine tabelle angepasst.. und das funktioniert auch nicht..

                mir fehlt auch grad die logik..

                Code:
                CREATE TRIGGER Id_t1 FOR tabelle ACTIVE BEFORE INSERT POSITION 0 AS
                BEGIN
                IF ((NEW.tabID IS NULL) OR (NEW.tabID = 0)) THEN NEW.tabID = GEN_ID(idcounter, 1);
                END
                
                
                [ODBC Firebird Driver][Firebird]Dynamic SQL Error
                SQL error code = -104
                Unexpected end of command - line 3, column 81

                Comment


                • #9
                  poste mal bitte deinen string da liegt bestimmt der fehler

                  du musst bedenken, dass ; in dem Sql trigger als ; im code verstanden werden
                  und dass nach jeder sqlzeile ein ; angehängt wird

                  Comment


                  • #10
                    hmm, das verstehe ich jetzt nicht ganz..

                    welchen string meinst du? ich habe die sql-anfragen direkt per sql-editor (AnySQL Maestro) über ODBC an Firebird gesendet..

                    €dit: achso, jetzt hab ich es begriffen.. meinst du man sollte das alles direkt in einer zeile an die datenbank senden?

                    Code:
                    CREATE TRIGGER AUTO_TAB_COUNT for TABELLE active before insert position 0 as begin if(new.tabid is null) then begin new.tabid = gen_id( idcounter, 1 ) end end;
                    ergibt:
                    Code:
                    [ODBC Firebird Driver][Firebird]Dynamic SQL Error
                    SQL error code = -104
                    Token unknown - line 1, column 152
                    end
                    die fehler-ausgaben sind mehr als fragwürdig..
                    Zuletzt editiert von bootsn; 11.09.2008, 11:21.

                    Comment


                    • #11
                      bei eingabe in den editor von

                      Code:
                      CREATE TRIGGER Id_t1 FOR tabelle ACTIVE BEFORE INSERT POSITION 0 AS
                      BEGIN
                      IF ((NEW.tabID IS NULL) OR (NEW.tabID = 0)) THEN NEW.tabID = GEN_ID(idcounter, 1);
                      END
                      hast du da einen fehler, weil er es als ende vom commando interpretiert!

                      Comment


                      • #12
                        ok, hab ich begriffen.. allerdings geht es ohne genausowenig..

                        Code:
                        CREATE TRIGGER Id_t1 FOR tabelle
                        ACTIVE BEFORE INSERT POSITION 0 
                        AS
                        BEGIN 
                         IF ((NEW.tabID IS NULL) OR (NEW.tabID = 0)) THEN NEW.tabID = GEN_ID(idcounter, 1) 
                        END
                        führt wie im letzten beispiel zu:

                        Code:
                        [ODBC Firebird Driver][Firebird]Dynamic SQL Error
                        SQL error code = -104
                        Token unknown - line 4, column 1
                        END
                        man muss dem ja irgendwie klarmachen, dass dort das ende ist..

                        Comment


                        • #13
                          ohne Trigger müßte das bei FB wie bei IB gehen
                          [HIGHLIGHT="SQL"]
                          INSERT INTO Tabelle (Tabid)
                          VALUES (GEN_ID (Generatorname, 1))
                          [/HIGHLIGHT]

                          Comment


                          • #14
                            Zu der Geschichte mit dem Semikolon, solltet ihr euch mal
                            mit den Anweisungen auseinanderstzen.

                            Code:
                            SET TERM ^;
                            ...
                            SET TERM ;^
                            oder einfach IBExpert verwenden.

                            alex

                            Comment


                            • #15
                              Originally posted by ebis View Post
                              ohne Trigger müßte das bei FB wie bei IB gehen
                              [HIGHLIGHT="SQL"]
                              INSERT INTO Tabelle (Tabid)
                              VALUES (GEN_ID (Generatorname, 1))
                              [/HIGHLIGHT]
                              das funktioniert auch mit update, aber das soll ja automatisch passieren ohne das man es explizit angeben muss..

                              Comment

                              Working...
                              X