Announcement

Collapse
No announcement yet.

Generator-Problem

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

  • Generator-Problem

    Wenn ich

    select gen_ID(Gen_kundennr,1) from Kunden

    in einer SQL-Anweisung ausführe, sollte doch eigentlich nur die nächste Kundennr zurückkommen.

    Stattdessen enthält die Antwort-Query soviele neue Kundennummern ,sprich Datensätze,
    wie zur Zeit Datensätze in der Tabelle Kunden vorhanden sind.
    Der Generator ist ebenfalls um die Anzahl Datensätze weiter gesetzt.

    Das ist doch nicht richtig , oder ????

    Uwe Schlachter

  • #2
    Doch, alles ok

    Du liest alle Datensätze wie beim
    select kundennummer from kunde

    und in einer Spalte berechnetst Du über den Generator den jeweils nächsten Wert ohne in irgendwo zu speichern. Dies für jeden datensatz der Ausgabe.

    past scho

    Comment


    • #3
      Nein , nicht OK.

      Vielleicht habe ich mich unklar ausgedrückt:

      Ich habe eine Tabelle Kunden mit 10000 Datensätzen.

      Mein Generator steht auf 10000.

      Jetzt führe ich in einer TIBQuery die Anweisung

      Select Gen_ID(Gen_Kundennr,1) from Kunden

      aus.

      Danach enthält die IBQuery 10000 Datensätze mit den Nummern 10001 bis 20000 und der Generator steht auf 20000.

      Meiner Meinung nach sollte doch der Generator auf 10001 stehen und ich nur einen Datensatz mit der Nummer 10001 zurück kriegen, oder ?

      Uwe Schlachte

      Comment


      • #4
        Hi,
        Andreas hat schon recht. Du erhälst jeweils einen neuen Generatorwert für jeden vorhanden Satz in Kunden. Der Zusammenhang fällt vielleicht deutlicher in folgenderder Formulierung auf:
        <pre>
        Select Gen_ID(Gen_Kundennummer,1), Kndnr, Name, Vorname from Kunden
        </pre>

        Damit es so funktioniert wie du es dir wünschst, hilft z.B. folgende Formulierung:

        <pre>
        Select Gen_ID(Gen_Kundennr,1) from RDB$DATABASE
        </pre>

        Gruß
        Gesin

        Comment


        • #5
          Hallo,

          Select Gen_ID(Gen_Kundennr,1) from RDB$DATABASE

          macht was ich will, danke.

          Übrigens, das Beispiel mit dem Tabellennamen habe ich aus Andreas Kosch's Buch Client/Server mit Delphi Seite 474. :-))

          Uwe Schlachte

          Comment


          • #6
            Hallo Gesine,

            danke für die Unterstützung, so wird es deutlicher. Ich helfe mir seit Jahren mit einer Stored Procedure die einen Generatorwert liefert, die ich dan mit Execute oder select aufrufen kann

            Comment


            • #7
              Hallo,

              tja - meine Bücher muss man <b>genau</b> durchlesen, insbesondere den letzten Satz auf der Seite 474 :-

              Comment


              • #8
                Der letzte Satz lautet:

                Da bislang der Generator nur einmal aktiviert wurde, liefert der SELECT-Befehl die neue Zahl 1002 zurück.

                Da steht aber nichts davon : weil in der Tabelle ein Datensatz vorhanden ist ...

                sondern einmal aktiviert ..

                Daraus nehme ich an das bei jebdem aktivieren der Generator 1 hochzählt.
                ODER ? :-))

                Uwe Schlachte

                Comment


                • #9
                  Hallo Uwe,

                  ja, das ist der Sinn eines Generators. Zudem ist die Eindeutigkeit des Wertes auch unter allen möglichen und unmöglichen Situationen garantiert

                  Comment


                  • #10
                    Hallo Uwe,

                    aber wenn doch auf der gleichen Seite die Tabelle über CREATE TABLE erst neu angelegt wurde und nur ein einziger INSERT-Aufruf vorher stattfand, kann in dieser Tabelle zur Zeit auch nur ein einziger Datensatz stehen. Ich werde aber in der nächsten Ausgabe mit einer Info-Zeile auf diesen Punkt extra hinweisen

                    Comment

                    Working...
                    X