AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Automatisch zugeteilte Id ermitteln.
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Automatisch zugeteilte Id ermitteln.

Ein Thema von Bladefire · begonnen am 12. Jul 2014 · letzter Beitrag vom 14. Jul 2014
Antwort Antwort
Bladefire

Registriert seit: 30. Jun 2014
67 Beiträge
 
#1

SQL Automatisch zugeteilte Id ermitteln.

  Alt 12. Jul 2014, 14:32
Datenbank: MySQL • Version: 5 • Zugriff über: k. A.
Hallo,

Ich möchte ein Programm machen das etwas in eine SQL Datenbank schreibt. Der Datensatz bekommt automatisch von der Datenbank eine id zugeteilt. Nun möchte ich diese Id meinen Programm irgendwie mitteilen.

Jedoch weiß ich nicht wie ich das machen soll.

- ich kann nicht einfach den letzten eingetragenen Datensatz auslesen, da es möglich ist, dass ein anderes Programm etwas in der Zwischenzeit in die Datenbank - Tabelle Schreibt.

Wie soll / kann ich dies realisieren?

Lg Simon
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: SQL Automatisch zugeteilte Id ermitteln.

  Alt 12. Jul 2014, 14:51
Die meisten Datenbanken haben dafür eine Funktion wie LAST_INSERT_ID oder ähnliches.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: SQL Automatisch zugeteilte Id ermitteln.

  Alt 12. Jul 2014, 17:21
@Bladefire:

Gleich nach dem Posten bzw. Insert ist der bearbeitete bzw. gerade eingefügte Record der aktuelle Datensatz. Da kannst du doch einfach abfragen, welcher Wert in deinem Id-Feld steht:

AktuelleId := MyDataset.FieldByName('IdFeld').asInteger; Zur Anzeige in der Statusbar mache ich das in den meisten DB-Anwendungen sogar grundsätzlich, und zwar mittels des Ereignisses AfterScroll. Dort wird dann die Id ausgelesen und ein Ereignis generiert, das meien Statusbar aktualisiert.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.470 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: SQL Automatisch zugeteilte Id ermitteln.

  Alt 12. Jul 2014, 19:45
@Bladefire:

Gleich nach dem Posten bzw. Insert ist der bearbeitete bzw. gerade eingefügte Record der aktuelle Datensatz. Da kannst du doch einfach abfragen, welcher Wert in deinem Id-Feld steht:

AktuelleId := MyDataset.FieldByName('IdFeld').asInteger;
Funktioniert das inzwischen zuverlaessig? Ich erinnere mich, dass ich daran mal verzweifelt bin - das muss irgendwann in den 90ern gewesen sein - und schliesslich eine Tabelle mit IDs eingefuehrt habe, mit einem Datensatz pro Tabelle, in dem die jeweils naechste zu benutzende ID stand. Diesen Record habe ich dann gelockt, ausgelesen, die ID erhoeht und gespeichert. Das funktionierte dann wenigstens. AutoInc Felder funktionierten spaeter dann fuer Access- und MSSQL mal, wenn man Cursor auf clUseServer gesetzt hat. Aber ich habe immernoch im Hinterkopf, dass sie nicht sicher sind. Mein letztes groesseres Datenbank-Projekt ist allerdings schon wieder ein paar Jahre her.
Thomas Mueller
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: SQL Automatisch zugeteilte Id ermitteln.

  Alt 13. Jul 2014, 01:38
Das funktioniert 100 % zuverlässig, zumindest meiner Erfahrung nach, ich kenne das gar nicht anders, und zwar bei allen DBMS, die ich jemals in Verwendung hatte, als da wären:
Firebird, MsSQL, MySQL, ProstGreSQL, MsAccess. Wäre dem nicht so, wären DBMS nicht wirklich einsatzfähig. Ob DBMS vor 20 Jahren unzuverlässig waren, kann ich nicht beurteilen, hatte damals noch nichts damit am Hut. Und wenn du's nicht glaubst, probier's doch einfach mal aus, wirst schon sehen (sollte man sowieso immer machen, wenn man Ratschläge aus Foren erhält).
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: SQL Automatisch zugeteilte Id ermitteln.

  Alt 13. Jul 2014, 08:01
Ob das so funktioniert, hängt nicht vom RDBMS ab, sondern vom Provider (Zeus, ADO, dbExpress, DAC) und da gab es -zumindest bei ADO- früher wirklich Probleme bzw. hat das nicht funktioniert. Früher. Jetzt ist das alles kein Problem mehr. Man muss nur sicherstellen, das der Provider erkennt, das es sich um ein AutoInc-Feld handelt bzw. das persistente Feld entsprechend deklarieren. Firebird z.B. kennt keinen AutoInc-Datentypen. Da erstellt man einen Generator und stellt im Provider das Feld entsprechend ein.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: SQL Automatisch zugeteilte Id ermitteln.

  Alt 13. Jul 2014, 12:57
Mit all den von dir genannten DB-Komponenten funktioniert genau das: Wenn ich einen neuen Datensatz in eine Datensatz-Menge einfüge, bleibt dieser Datensatz der aktuelle, solange ich keinen anderen Datensatz einfüge oder anwähle. Das hat nichts mit Auto-Inc-Feldern zu tun. Im Übrigen gibt es Zeus nicht, das heißt Zeos.
  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 04:19 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