AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL INSERT mit ID Rückgabe
Thema durchsuchen
Ansicht
Themen-Optionen

SQL INSERT mit ID Rückgabe

Ein Thema von QuickAndDirty · begonnen am 14. Jan 2004 · letzter Beitrag vom 18. Feb 2004
Antwort Antwort
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#1

SQL INSERT mit ID Rückgabe

  Alt 14. Jan 2004, 00:27
Hallo kann mir jemand einen einfachen Weg
nennen wie ich ein Insert absetzen kann
und die ID(autoinc) des neuen Datensatzes erfahre.

Bis her benötige ich dafür:
1.Ein INSERT mit einer ungewöhnlichen seltenen Zahl in einem Feld.
2.Ein SELECT um diese Zahl zu finden (und die id zu ermitteln)
und
3. ein UPDATE um die restlichen Werte Where ID einzufügen.

Leider ist das etwas unsicher und auch sehr improvisert,
wie geht es richtig?
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#2

Re: SQL INSERT mit ID Rückgabe

  Alt 14. Jan 2004, 00:29
Willkommen in der Gemeinde

@Thema: welche Datenbank, welche Tabellen?
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#3

Re: SQL INSERT mit ID Rückgabe

  Alt 14. Jan 2004, 00:33
Hallo,

normalerweise musst du dich gar nicht um die ID kümmern wenn Du einen INSERT durchführen möchtest.
Deine Reihenfolge
insert - select - update
müsste mit einem
insert realisierbar sein

Anders ist es, wenn ein Datensatz bereits existiert, dann
ermittle ID - insert ... where FeldID = ID
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#4

Re: SQL INSERT mit ID Rückgabe

  Alt 14. Jan 2004, 00:48
Also, zu frage welche Datenbank:
Ich muss Code Für oracle,mssql,dbisam,paradox datenbanken schreiben.
Das alles muss auch mit globalen Daten funktionieren.


Zu, id sei nicht notwendig bei einem insert:
Ich Arbeite auf einem selbst gebauten nachfahren von TStringGrid
(Die Sourcen von Delphi datenbank-componenten ändern sich immer
so schnell). Beim daten einlesen wird die Herkunft der Daten
jeder Zelle hinterlegt (Tabelle, idfeld, idwert) so das ich
nicht immer alle Felder Anzeigen muss und leicht einzelne
Datensätze ändern und löschen kann.

Füge ich nun etwas ein dann steht es zwar da und ist gespeichert
nur kann ich es nicht ändern oder löschen weil die ID fehlt.


Weis jemand Rat?
Andreas
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: SQL INSERT mit ID Rückgabe

  Alt 14. Jan 2004, 01:05
in Oracle klappt das:

Delphi-Quellcode:
  Query1.SQL.Text :=
    'BEGIN' + #10 +
    ' INSERT INTO Tabelle' + #10 +
    ' (Field1, Field2, ...)' + #10 +
    ' VALUES' + #10 +
    ' (1, ''Hallo'', ...)' + #10 +
    ' RETURNING ID' + #10 +
    ' INTO :oID;' + #10
    'END;';



"ID" muss als output parameter definiert werden und enthält die neue ID.

edit: unkonzentriert
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#6

Re: SQL INSERT mit ID Rückgabe

  Alt 14. Jan 2004, 01:06
Also im Einzelplatzbetrieb könnte ein Insert mit anschließendem Select:
select max(id) from Tabelle
funktionieren - ist im Mehrplatzbetrieb aber nicht sicher.
Dort könntest Du das nur mit Triggern hinbekommen.
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#7

Re: SQL INSERT mit ID Rückgabe

  Alt 14. Jan 2004, 09:19
@QuickAndDirty
Zitat:
Ich muss Code Für oracle,mssql,dbisam,paradox datenbanken schreiben.
Das alles muss auch mit globalen Daten funktionieren.
also für den professionellen Einsatz.
aber ist das dann nicht
Zitat:
Ich Arbeite auf einem selbst gebauten nachfahren von TStringGrid
quick and dirty

Zitat:
(Die Sourcen von Delphi datenbank-componenten ändern sich immer so schnell).
es gibt so viele Grids von Dritt-Herstellern die sich nicht erlauben können alle 10 Monate die methoden und property zu ändern

Zitat:
Beim daten einlesen wird die Herkunft der Daten
jeder Zelle hinterlegt (Tabelle, idfeld, idwert) so das ich
nicht immer alle Felder Anzeigen muss und leicht einzelne
Datensätze ändern und löschen kann.
OK, dann brauchst Du im DataSet (wenn Du es schon nicht im Grid anzeigen möchtest) Deine ID
da kannst Du dann jederzeit darauf zugreifen ...
RechteMausTaste auf TTable, TADODateSet und dann alle Felder hinzufügen
Zitat:
Füge ich nun etwas ein dann steht es zwar da und ist gespeichert
nur kann ich es nicht ändern oder löschen weil die ID fehlt.
die ID fehlt nicht in der DB, richtig?
sondern nur in Deiner Form, weil das StringGrid diese Info nicht hält
  Mit Zitat antworten Zitat
Wegalt

Registriert seit: 14. Nov 2003
12 Beiträge
 
#8

Re: SQL INSERT mit ID Rückgabe

  Alt 15. Jan 2004, 16:57
Bei Oracle kannst du dir auch erst eine ID holen und diese dann eintragen. Die ID ist wenn du sie dir holst eindeutig!

'Select SEQUENCENAME.NEXTVAL from DUAL' und das Ergebnis dann für in deinem Insert einsetzen

Gruß
Wegalt
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#9

Re: SQL INSERT mit ID Rückgabe

  Alt 18. Feb 2004, 14:13
Hi,
ich habs.
Also das Problem ist für alle Server gelöst:
Mann kann beim Insert die ID mit übergeben.
wenn die schon belegt ist dann gibts ne Exception
und ich incremtiere die ID und versuchs noch einmal.
Damit man nicht ganz unten anfangen muss holt man sich mit
SELECT max(id) FROM bla
einen möglichst hohen Wert und incrementiert ihn zur Wunsch ID.

Da im Netz ein andere Benutzer dazwischen kommen könten und ich
Exception nicht so mag führe ich jetzt so ne Art Journal mit den
Letzen Inserts und IDs für alle Tabellen und User.

Vielen dank für die Tipps

mfg
QuickAndDirty
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#10

Re: SQL INSERT mit ID Rückgabe

  Alt 18. Feb 2004, 14:31
Bei MS-SQL-Server mußt Du vorher:
SET IDENTITY_INSERT [ database. [ owner. ] ] { table } { ON | OFF } setzen - sonst meckert er beim Versuch, einen Wert in eine Identityspalte einzufügen...
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  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 09:55 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