Einzelnen Beitrag anzeigen

Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
681 Beiträge
 
Delphi 10.3 Rio
 
#1

Wert von LastAutoinc kann nicht ausgelesen werden

  Alt 1. Feb 2011, 22:20
Datenbank: ADS • Version: 10.1 • Zugriff über: SQL
Hallo,

ich stehe malwieder vor einem kleinen Rätsel.
Fügt man in eine Tabelle via INSERT INTO einen neuen Datensatz ein bekommt man ja leider von dem Aufruf nicht mitgeteilt wie der Wert des Autoinc Feldes in der Tabelle lautet. Ich kann also nach dem einfügen den Datensatz nicht anfassen und ihn bearbeiten.
Um doch an die Id (AutoInc) des Datensatzes zu kommen gibt es theoretisch die Scalare Funktion "LastAutoinc" die man direkt nach dem Insert aufruft und die Id geliefert bekommt.
Theoretisch deshalb, weil ich bisher keine Möglichkeit gefunden habe den Wert in eine Variable zu bekommen mit der ich dann munter weiter arbeiten kann.

Was funktioniert:
Im ARC in einem Query Editor (SQL Utility) :
SELECT LastAutoInc(Statement) FROM system.iota Schön dabei ist, das man als Tabelle angeben kann welche man auch immer lustig ist, man bekommt immer den zuletzt geänderten AutoInc Wert geliefert.
Als Result sieht man unten die Tabelle mit dem Wert. Aber dann ist es leider auch schon vorbei mit Schön.

Will ich den Wert nun in einem Script verwenden oder gleich damit einen Datensatz ansaugen mag mich ADS nicht mehr. (und ich es sachte auch nicht mehr)
Varianten die ich in einer Stored Procedure schon durchprobiert habe, immer mit dem Ergebnis das NULL geliefert wird:
(Falls ich hier eine Variante vergessen haben sollte, liegt das daran dass ich mehrmals meinen Rechner aus dem Fenster geschmissen habe und dann immer alles neu schreiben musste)
SQL-Code:
CREATE PROCEDURE GetLastId
//ALTER PROCEDURE GetLastId
(
  LastId Integer OUTPUT
)
BEGIN
  DECLARE LAI Cursor;
  DECLARE LastId integer;

  INSERT INTO Toepfe (TopfType) VALUES ('Large');

  OPEN LAI AS SELECT LastAutoinc(Statement) AS LId FROM system.iota;
  FETCH LAI;
  INSERT INTO __OUTPUT VALUES (LAI.LId); // NULL
  LastId = LAI.LId; NULL
  LastId = (SELECT LastAutoinc(Statement) AS Mid FROM system.iota); // NULL
  LastId = LastAutoinc(Statement); // NULL
  // alles mit Toepfe anstatt system.iota // <-- NULL

  CLOSE LAI;
END;
Egal wie oft ich das Spielchen Spiele, ausführen im Query Editor geht. SP ausführen oder Einzelschritt Durchlauf geht nicht (liefert NULL).

Ich denke mal das ich auf genau die eine, richtige Variante, nicht gekommen bin und hoffe daher mal das sich jemand findet der mir meine Nase darauf drückt.

Vielen Dank im Vorraus.

€: - Nachtrag -
Dies funktioniert und liefert mir den eingefügten Datensatz.
SELECT * FROM Toepfe WHERE Id = LastAutoinc(Statement); Es bleibt aber weiterhin die Frage bestehen warum es nicht möglich ist den Wert von LastAutoinc in eine Integer Variable zu schreiben um damit weiter arbeiten zu können.
€2: CODE durch CODE=SQL Tags ersetzt und was gelernt.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.

Geändert von Sinspin ( 2. Feb 2011 um 13:59 Uhr)
  Mit Zitat antworten Zitat