AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wert von LastAutoinc kann nicht ausgelesen werden
Thema durchsuchen
Ansicht
Themen-Optionen

Wert von LastAutoinc kann nicht ausgelesen werden

Ein Thema von Sinspin · begonnen am 1. Feb 2011 · letzter Beitrag vom 2. Feb 2011
Antwort Antwort
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
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wert von LastAutoinc kann nicht ausgelesen werden

  Alt 2. Feb 2011, 11:02
SQL-Code:
CREATE PROCEDURE GetLastId
//ALTER PROCEDURE GetLastId
(
  LId Integer OUTPUT
)
BEGIN
  DECLARE LAI Cursor;
  DECLARE LastId integer;

  INSERT INTO mytable (s) 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;
  INSERT INTO __OUTPUT VALUES (LastId); // NULL
  LastId = (SELECT LastAutoInc(Statement) AS Mid FROM system.iota); // NULL
  INSERT INTO __OUTPUT VALUES (LastId); // NULL
  SELECT * FROM mytable WHERE Id = LastAutoInc(Statement); // NULL
  LastId = LastAutoInc(Statement); // NULL
  INSERT INTO __OUTPUT VALUES (LastId); // NULL
  // alles mit Toepfe anstatt system.iota // <-- NULL
  CLOSE LAI;
END;
Meine Tabelle heisst mytable und ich musste den LastId Parameter umbenennen, da es eine Variable mit demselben Namen im Script gibt. Bei mir (ARc 10.10.0.0 mit ADS 10.10.0.0) funktioniert das obige hervorragend!?
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

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

AW: Wert von LastAutoinc kann nicht ausgelesen werden

  Alt 2. Feb 2011, 20:34
Hallo Joachim,

Danke für Deine Antwort. Es ist wie immer, man sollte sich nicht auf das verlassen was man glaubt, sondern auf das was man geprüft hat. Neuer ARC, neuer Server und nocheinmal die gleichen Tests, die wie es so oft ist, auch erst gehen wenn einem der Kollege über die Schulter schaut.

Nunja, also bin ich jetzt real bei 10.10.0.0 angekommen, und schon sind die Probleme erstmal weg und auch der ARC benimmt sich nicht mehr ganz so abartig.

Nochmal Tausend Dank für Dein Mühe.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz