AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi nächste id im datensatz
Thema durchsuchen
Ansicht
Themen-Optionen

nächste id im datensatz

Ein Thema von Snoop007 · begonnen am 27. Aug 2003 · letzter Beitrag vom 16. Sep 2005
Antwort Antwort
Seite 2 von 2     12   
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#11

Re: nächste id im datensatz

  Alt 2. Sep 2003, 23:07
@theomega:
Eine übliche Vorgehensweise bei Interbase ist:
Eine Stored Procedure, die einen neuen Generatorwert zurückgibt, aufrufen, und diesen beim Insert übergeben. Das ist auf jeden Fall viel weniger aufwändig als ein SELECT.
IBX macht so was ähnliches (zumindest in IBDataSet), wenn man die Eigenschaft GeneratorField richtig einstellt.

Grüße
Urs
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#12

Re: nächste id im datensatz

  Alt 3. Sep 2003, 10:53
Könntest du das mal näher Erleutern? Mit dem Generator-Field?
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#13

Re: nächste id im datensatz

  Alt 6. Sep 2003, 09:53
GeneratorField ist eine Eigenschaft von TIBCustomDataSet (IBX), die dazu dient, die Behandlung von AutoIncrement-Feldern zu vereinfachen.
Man setzt im OI den Feldnamen und den Generatornamen (der muss natürlich vorhanden sein) und bestimmt mit der Eigenschaft ApplyEvent, wann der neue Generatorwert geholt wird:
a) gamOnNewRecord
Wenn Du in der Komponente einen neuen Datensatz einfügst (beforeInsert). Der Vorteil davon ist, dass Du während der Bearbeitung des neuen Datensatzes schon weißt, welche ID der neue Datensatz bekommen wird (ist je nachdem für irgendwelche MasterDetail-Beziehungen hilfreich). Der Nachteil ist, dass bei einem Cancel der Generatorwert "verloren geht".
b) gamOnPost
Bevor der Datensatz gepostet wird, wird vom Generator ein neuer Wert abgerufen und in das Feld gesetzt. Vor- und Nachteil wie a) nur umgekehrt.
c) gamOnServer
Teilt der Komponente mit, dass sich der Server (durch Trigger) selbst um die Vergabe des AutoInc-Wertes kümmert. Wenn man die Trigger richtig gesetzt hat und das Programm den neuen ID-Wert nicht vor dem Posten wissen muss, dürfte das die beste Methode sein, da sie nicht die zusätzliche Netzwerkbelastung für das holen des Generatorwerts verursacht.

Grüße
Urs
  Mit Zitat antworten Zitat
Benutzerbild von BrinkschulteManfred
BrinkschulteManfred

Registriert seit: 23. Sep 2003
Ort: Menden
97 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: nächste id im datensatz

  Alt 15. Sep 2005, 10:38
Hallo zusammen,

ich grüble nun schon seit ein paar Tagen an meinem Problem, dass ich an einer Fremd-DB ein paar Einträge an Stammdatentabellen ergänzen möchte. Die Fremdtabelle ist relativ einfach aufgebaut, es gibt dort eine ID und eine Einheitenspalte. Die ID-Spalte scheint eine AutoWert-Spalte zu sein, so dass ich inzwischen da angelangt bin, dass wohl ein IBDataSet mit dem Generatorfield zum Einsatz kommen muss.
Mein Code sieht folgendermaßen aus
Delphi-Quellcode:
procedure TFormEinheiten.Button1Click(Sender: TObject);
begin
  IBDataSetEinheiten.Insert;
  ShowMessage(IntToStr(IBDataSetEinheiten.FieldValues['ID']));
  IBDataSetEinheiten.Post;
  IBTransactionEinheiten.Commit;
  if Not(IBDataSetEinheiten.Active) then IBDataSetEinheiten.Active := True;
end;
Für die Eigenschaft InsertSQL habe ich
  • INSERT INTO EINHEITEN (EINHEIT) VALUES ('DUMMY Einheit')
und für die Eigenschaft Generatorfield habe ich
  • Generator = GEN_EINHEITENID
    Feld = ID
    erhöhen um = 1
    Ereignis anwenden = On Server
eingetragen. Alles funktioniert prächtig, es werden fortlaufend neue IDs vergeben. Leider kann ich aber damit nicht auf die ID zugreifen, die ich noch für anderen Einträge benötige. Stelle ich aber Ereignis anwenden auf On New Record, dann wird zwar bei ShowMessage die nächste ID angezeigt, aber in der Datenbanbk steht die übernächste ID. Im Moment weiß ich nicht, wo der Fehler liegen könnte. Was habe ich vergessen?

Gruß
Manfred

Anmerkung: Wenn Ereignis anwenden auf On Server steht, ist natürlich die ShowMessage-Zeile nicht da!
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#15

Re: nächste id im datensatz

  Alt 15. Sep 2005, 20:19
Hallo,

bin eigentlich gerade nicht so ganz drin im Thema, aber:
könnte es sein, dass in der Datenbank ein Trigger aktiv ist, der beim Posten des Datensatzes nochmal einen Generatorwert abruft?

Gruß
Urs
  Mit Zitat antworten Zitat
Benutzerbild von BrinkschulteManfred
BrinkschulteManfred

Registriert seit: 23. Sep 2003
Ort: Menden
97 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: nächste id im datensatz

  Alt 16. Sep 2005, 07:27
Hallo Urs,

ja, ich habe auch schon darüber nachgedacht, aber da es sich um eine Fremddatenbank handelt, von der ich nur das Passwort weiß um eine Zusatzanwendung zu schreiben, ist mir der genaue Inhalt nicht bekannt. Leider gibt es auch keine Doku dazu, also kann ich nur per Try & Error an die Sache herangehen.
Wenn es denn ein Trigger sein sollte, wie kann ich denn das Problem lösen?

Gruß
Manfred
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:46 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