Autowert nach Insert ermitteln
Jens Menke
- asp.net
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
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
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
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
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
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
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.
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
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 ...