Jens Menke: Autowert nach Insert ermitteln

Hi

Folgendes Problem : Ein neuer Datensatz wird in eine DB
eingefügt , ein Feld in der Tabelle ist ein Autowert ,
wird also von der Datenbank vergeben.

Gibts eigentlich ne Möglichkeit den Autowert direkt
beim Insert zurückgeliefert zu bekommen , oder zumindest
ne elegantere Möglichkeit als nach dem Insert via einer neuen SQL Abfrage den Datensatz zu ermitteln der den
höchsten Wert in diesem Feld hat ?
Zumal das ja leicht fehleranfällig ist wenn zwei Leute
mal gleichzeitig nen Datensatz einfügen.

gruss und dank
Jens

  1. Hallo,

    Gibts eigentlich ne Möglichkeit den Autowert direkt
    beim Insert zurückgeliefert zu bekommen , oder zumindest
    ne elegantere Möglichkeit als nach dem Insert via einer neuen SQL Abfrage den Datensatz zu ermitteln der den
    höchsten Wert in diesem Feld hat ?

    in Access nicht.

    Zumal das ja leicht fehleranfällig ist wenn zwei Leute
    mal gleichzeitig nen Datensatz einfügen.

    NBö, wenn Du gleichzeitig einen Lock auf die Applikation machst, nicht.

    <%
    Application.Lock
    ... ' Hier kommen die Schreibzugriffe hin
    ... ' Hier liest Du die ID aus
    Application.Unlock
    %>

    Tschau, Stefan

    1. Hi..
      danke erstmal.. aber hab noch ein paar fragen dazu :

      ne elegantere Möglichkeit als nach dem Insert via einer neuen SQL Abfrage den Datensatz zu ermitteln der den
      höchsten Wert in diesem Feld hat ?

      in Access nicht.

      Ähh.. soll heissen in Access gibts keine andere Möglichkeit
      oder wie ??

      NBö, wenn Du gleichzeitig einen Lock auf die Applikation machst, nicht.

      <%
      Application.Lock
      ... ' Hier kommen die Schreibzugriffe hin
      ... ' Hier liest Du die ID aus
      Application.Unlock
      %>

      Hab mit dem Application Object bisher noch nie was zu tun gehabt.. *g* .. worauf bezieht sich das , auf die
      aktuelle ASP-Seite .. oder muss das irgendwie deklariert
      werden.
      Und geht das nun auch mit Access.. oder doch nicht ??

      gruss
      Jens

      1. Hey

        es gibt eine möglichkeit, aber die ist nicht sehr elegant. du movest nach dem insert an eof und machst dann einen schritt zurück. dann solltest du theortetisch auf dem letzten datensatz stehen.

        und: access lässt nichts anderes zu.

        Gruss
        Tom

        Hi..
        danke erstmal.. aber hab noch ein paar fragen dazu :

        ne elegantere Möglichkeit als nach dem Insert via einer neuen SQL Abfrage den Datensatz zu ermitteln der den
        höchsten Wert in diesem Feld hat ?

        in Access nicht.

        Ähh.. soll heissen in Access gibts keine andere Möglichkeit
        oder wie ??

        NBö, wenn Du gleichzeitig einen Lock auf die Applikation machst, nicht.

        <%
        Application.Lock
        ... ' Hier kommen die Schreibzugriffe hin
        ... ' Hier liest Du die ID aus
        Application.Unlock
        %>

        Hab mit dem Application Object bisher noch nie was zu tun gehabt.. *g* .. worauf bezieht sich das , auf die
        aktuelle ASP-Seite .. oder muss das irgendwie deklariert
        werden.
        Und geht das nun auch mit Access.. oder doch nicht ??

        gruss
        Jens

        1. Du kannst auch in Deinem ASP-Script eine Zufallszahl generieren, die Du in ein zusaetzliches Feld in der DB einfuegst. Nach diesen Wert kann man dann in einer 2. Abfrage suchen und so den AutoWert ermitteln.

          HTH

          Michael Schneider

          1. Du kannst auch in Deinem ASP-Script eine Zufallszahl generieren, die Du in ein zusaetzliches Feld in der DB einfuegst. Nach diesen Wert kann man dann in einer 2. Abfrage suchen und so den AutoWert ermitteln.

            Hm.. da müsste man denn aber schon nen String mit Datum
            und Zeit basteln und da noch die Zufallszahl ranhängen
            um ne halbwegs eindeutige Kennung zu erhalten.
            Naja.. werds wohl erstmal so lassen wie es ist , bis wirklich irgendwann mal Fehler auftauchen .. *g*

            gruss
            Jens

            1. Du kannst auch in Deinem ASP-Script eine Zufallszahl generieren, die Du in ein zusaetzliches Feld in der DB einfuegst. Nach diesen Wert kann man dann in einer 2. Abfrage suchen und so den AutoWert ermitteln.
              Hm.. da müsste man denn aber schon nen String mit Datum
              und Zeit basteln und da noch die Zufallszahl ranhängen
              um ne halbwegs eindeutige Kennung zu erhalten.

              Ich weiß ja nicht, was Eure Datenbank kann, aber in *SQL* gibt es für dieses Problem einen eigenen Objekttyp "sequence".
              Syntaktisch funktioniert der wie eine Tabelle, und jedesmal, wenn jemand seinen Wert ausliest, wird dieser verändert (in welcher Weise, das kann man in der sequence selbst definieren - stellt Euch einfach vor, es würde immer 1 draufaddiert).

              Ganz egal, wie gleichzeitig mehrere Prozesse arbeiten, jeder bekommt pro Zugriff einen eindeutigen Wert von dieser sequence zurück.
              Und damit kann man dann prima eindeutige Schlüssel generieren.

              1. Ich weiß ja nicht, was Eure Datenbank kann, aber in *SQL* gibt es für dieses Problem einen eigenen Objekttyp "sequence".
                Syntaktisch funktioniert der wie eine Tabelle, und jedesmal, wenn jemand seinen Wert ausliest, wird dieser verändert (in welcher Weise, das kann man in der sequence selbst definieren - stellt Euch einfach vor, es würde immer 1 draufaddiert).

                Ganz egal, wie gleichzeitig mehrere Prozesse arbeiten, jeder bekommt pro Zugriff einen eindeutigen Wert von dieser sequence zurück.
                Und damit kann man dann prima eindeutige Schlüssel generieren.

                Hi

                die Datenbanken sind teilweise noch auf Access , manche
                aber schon auf SQL-Server 7 , bin aber SQL-Server mässig
                noch ziemlicher Anfänger :)
                Wenn du dazu vielleicht auch ein Code-Schnipsel hättest
                wie man damit in ASP was machen kann wäre ich dir sehr
                dankbar.

                gruss
                Jens

                1. Ich weiß ja nicht, was Eure Datenbank kann, aber in *SQL* gibt es für dieses Problem einen eigenen Objekttyp "sequence".
                  Syntaktisch funktioniert der wie eine Tabelle, und jedesmal, wenn jemand seinen Wert ausliest, wird dieser verändert (in welcher Weise, das kann man in der sequence selbst definieren - stellt Euch einfach vor, es würde immer 1 draufaddiert).
                  Wenn du dazu vielleicht auch ein Code-Schnipsel hättest
                  wie man damit in ASP was machen kann wäre ich dir sehr
                  dankbar.

                  Es geht nicht um ASP (davon habe ich keine Ahnung), sondern um SQL.
                  Die Anweisung dazu heißt "create sequence" mit geeigneten Parametern, wie die sequence sich verhalten soll. Dazu müßte Deine Datenbank halt wirklich volles SQL unterstützen und nicht nur so tun, als ob ...