Einzelnen Beitrag anzeigen

jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#60

AW: ID nicht gefunden nach last_insert_rowid()

  Alt 16. Mai 2017, 17:08
.. verstehe ich nicht, denn ich bin immer davon ausgegangen, dass die Funktion mit der jeweiligen Tabelle korespondiert. Ist wohl doch nicht so und was bewirkt die Funktion denn dann ohne Beachtung der Tabelle im Programm? Entschuldigt bitte meine naive Frage, doch ich bin da noch nicht dahinter gestiegen. Es ist doch eine einige Tabelle und kein multiuser-Programm, in das von verschiedenen Usern Eingaben vorgenommen werden - sehe ich da was völlig falsch?
Wenn das Prog. gewünscht wird, stelle ich es ein.
Mach doch mal einen kleinen Versuch und setze folgendes Statement ab, am besten in einem Tool in dem man mehrere Sätze als Ergebnis erhält:
[code]Select 1 from KONTAKTE;[code]

Aber überleg vor dem Drücken auf "Feuer" mal, was Du für ein Ergebnis erwartest.
Last_insert_rowid() verhält sich (hoffentlich) genauso wie die "1".
Last_insert_rowid() ist scheinbar eine Funktion ohne Abhängigkeiten. In den Klammern wo gewöhnlich Parameter einer Funktion stehen steht nichts. Vergleichbar mit einer Funktion date() oder so, sie liefert die Zeit, ohne irgendwelche Abhängigkeiten.
[am Rande: Wenn Du Dir die Doku (mal wirklich) anschaust, wirst Du feststellen, dass es doch einen Parameter für die Funktion gibt, "D" für Database. Braucht hier für das Verständnis nicht zu interessieren]

Also:
Ob "Select 1 from <meineTabelle>" oder
"Select Last_Insert_RowID() from <meinTabelle>"
Das Result ist nichts anderes als das an jeden Datensatz einmal der Rückgabewert 1 oder eben die letzte RowID geklebt wird.
Wenn Du Tabellen mit Tausenden Datensätzen hast, ist leicht vorstellbar, dass es ziemliche Ressourcenverschwendung ist, für eine Zahl tausende Datensätze "abzuarbeiten".
In der Realität ist es vielleicht nicht ganz so schlimm, weil von dem mglw. riesigen Ergbnis meist nur der erste Datensatz verwendet wird.

Im Umkehrschluss reicht also das einmalige Abfragen der letzten ROWID, wie es schon mehrfach beschrieben wurde, indem entweder gar kein ..from meinetabelle.. verwendet wird oder wenn doch- für DB Express- dann bitte eine mit nur einem Datensatz.

Ich vermute ich könnte noch viel schreiben, probier es einfach, schau dir die Ergebnisse an. Das sagt mehr als tausend Worte.

Die letzte RowID wird nur in einer Instanz verwaltet und gilt für alle Tabellen in der "Datenbank" (sprich sqlite datei) "gleichzeitig". Denn es kann immer nur eine geben! Jenachem in welcher Tabelle zuletzt ein Datensatz eingefügt wurde, findest Du dessen RowID bei der Abfrage von Last_insert_rowid.
Gruß, Jo
  Mit Zitat antworten Zitat