AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi 'Merken' des Primary Key nach Posten

'Merken' des Primary Key nach Posten

Ein Thema von sancho1980 · begonnen am 8. Feb 2006 · letzter Beitrag vom 9. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2   
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#1

'Merken' des Primary Key nach Posten

  Alt 8. Feb 2006, 23:01
Datenbank: Interbase • Version: 6.5 • Zugriff über: Interbase Xpress
Hallo
könnt ihr mir helfen:
angenommen ich habe eine tibdataset - komponente und füge einen datensatz über post() ein. dieses tibdataset hat ein generatorField für die id, also den primärschlüssel. das problem ist folgendes: wie komm ich nach erfolgreichem post() an den primärschlüssel, denn ich brauche ihn gleich im anschluss als fremdschlüssel in einer anderen tabelle. ich kann den datensatz leider nicht suchen, da die datensätze in der tabelle NUR über den primärschlüssel identifizierbar sind
wisst ihr da rat??
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: 'Merken' des Primary Key nach Posten

  Alt 8. Feb 2006, 23:03
Hallo sancho1980,

stehst du nach dem Post nicht auf dem Datensatz, der gerade eingefügt wurde?

Verwunderte Grüsse
Thorsten
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#3

Re: 'Merken' des Primary Key nach Posten

  Alt 8. Feb 2006, 23:23
sollte man meinen und das dachte ich auch aber wenn ich nach dem post den id als fremdschlüssel verwende, fügt der nicht-existente id's als fremdschlüssel ein, also scheinbar klappt das nicht so ganz
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#4

Re: 'Merken' des Primary Key nach Posten

  Alt 8. Feb 2006, 23:31
ich zeig dir mal was ich meine, die dateien sind im anhang:
hier soll eine paradox-tabelle in eine andere datenbank umgewandelt werden
die struktur und so is alles noch nicht so ausgereift, also nicht wundern
die paradox-tabell heißt demodeen und die interbase datenbank heißt dictionary
wenn du in dem programm auf 'convert' klickst, beginnt die umwandlung
die ursprüngliche datenbank besteht nur aus einer tabelle aber meine interbase-datenbank soll da eben jetz so extra tabellen für deskriptoren und synonyme haben und diese per fremdschlüssel referenzieren, eigentlich relativ selbsterklärend, denk ich
ich hab von dem ganzen noch nicht so viel ahnung, deswegen gebt mal bitte bescheid wenn ich irgendwo groben unfug gemacht hab
Angehängte Dateien
Dateityp: rar ordner_850.rar (654,6 KB, 6x aufgerufen)
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#5

Re: 'Merken' des Primary Key nach Posten

  Alt 9. Feb 2006, 06:58
Willkommen in der DP

Eine Möglichkeit wäre, die ID selbst zu erzeugen und dann mit zu posten.
MyID := MyDB.Gen_ID('MyGenerator', 1); Oder das Feld einfach auslesen
MyID := MyDSet.FieldValues['MYIDFIELD']; da, wie schon oben erwähnt der DS-Cursor auf den eben eingefügten DS steht...
Gruß, Jan
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: 'Merken' des Primary Key nach Posten

  Alt 9. Feb 2006, 08:08
Hallo.

Leider befindet sich der vom RDBMS vergebene Schlüssel nach einem Insert nicht im record buffer des Programms. Deshalb hat sich eine andere Vorgehensweise durchgesetzt. Der Generator ist ja schon da:

CREATE GENERATOR "GEN_TBL"; Man definiert einen before insert trigger für die Tabelle:

SQL-Code:
CREATE TRIGGER "TBL_BI0" FOR "TBL"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.id = 0) THEN
    NEW.id = GEN_ID(GEN_TBL, 1);
END
Auf diese Weise wird immer ein konsistenter primary key sicher gestellt. In der Anwendung besorgt man sich dann den nächsten Generator-Wert:

SELECT GEN_ID(GEN_TBL, 1) FROM RDB$DATABASE Den verwendet man dann auch für die foreign keys. Wenn man transaktionsgeschützt arbeitet, dann kann man sich den Schlüssel auch direkt nach der Verwendung besorgen:

SELECT GEN_ID(GEN_TBL, 0) FROM RDB$DATABASE Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider
Online

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: 'Merken' des Primary Key nach Posten

  Alt 9. Feb 2006, 08:20
Hi,

also erst mal zum Generator.
Die Prüfung sollte auf null erfolgen, damit man auch mal per Hand eine ID vergeben kann.
Beispiel:
SQL-Code:
CREATE TRIGGER ADRESSE_BI FOR ADRESSE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
 IF (NEW.ID IS NULL) THEN
   NEW.ID = GEN_ID(GEN_ADRESSE_ID,1);
END
Da die Vergabe im Trigger auf dem Server passiert, merkt der Client auch erst mal nichts davon.
Die Komponentenetwickler sind alle dazu übergegengen, dem User eine Möglichkeit zu schaffen, die ID selbst zu erzeugen und damit auch nach dem Post zur Verfügung zu haben.
Dafür gibt es in TIBDataSet das Property GeneratorField.
Hier müsste ich nach meinem Beispiel nur 'GEN_ADRESSE_ID' eintragen, und schon sind wir die Probleme los.

Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#8

Re: 'Merken' des Primary Key nach Posten

  Alt 9. Feb 2006, 08:22
Zitat:
SQL-Code:
CREATE TRIGGER "TBL_BI0" FOR "TBL"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.id IS NULL) THEN
    NEW.id = GEN_ID(GEN_TBL, 1);
END
Wäre besser.

Edit: Zu langsam
Gruß, Jan
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#9

Re: 'Merken' des Primary Key nach Posten

  Alt 9. Feb 2006, 08:59
Hallo
na das nenn ich mal ein belebtes forum
tatsächlich hab ich sogar in ibexpress für meine tabelle einen generator erzeugt gehabt
wobei mir schleierhaft ist, warum ich diesen generator trotzdem noch in der eigenschaft generatorfield meines tibdatasets mitangeben muss! ich denk meine delphi-anwendung hat damit ni zu tun
hmmm, aber die andere frage ist, dieses auslesen des generators, wie geht das in delphi
nehm ich da wieder eine tibdataset-komponente und füge das von euch angegebene sql-statement ein? wenn ja, wie mach ich dann weiter..felder lese ich aus, indem ich die einzelnen tabellenfelder im feld-editor persistent mache und dann ist der zugriff ganz einfach, aber geht das auch mit generatoren??
gruß und danke
martin
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#10

Re: 'Merken' des Primary Key nach Posten

  Alt 9. Feb 2006, 09:06
hups, dumme frage
wusste nicht, dass man den generator_id auch einfach im feld-editor hinzufügen kann
einfach ignorieren
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:50 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