AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi FIBPlus, Master/Detail und ForeignKeys
Thema durchsuchen
Ansicht
Themen-Optionen

FIBPlus, Master/Detail und ForeignKeys

Ein Thema von nachti1505 · begonnen am 10. Dez 2013 · letzter Beitrag vom 11. Dez 2013
Antwort Antwort
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#1

FIBPlus, Master/Detail und ForeignKeys

  Alt 10. Dez 2013, 17:06
Datenbank: Firebird • Version: 2.1 • Zugriff über: FIBPlus
Hallo liebe Community,

folgende zwei Tabellen zum Rechnungshandling.

Code:
Rechnung
  id INT64
  datum TIMESTAMP

Rechnungsposition
  id INT64
  rechnung INT64
  bezeichnung VARCHAR(30)
Im DataFormular habe ich nun zwei TpFIBDataset, welche per Master-Detail-Beziehung verbunden sind. Das Anlegen einer Rechnung geschieht nun folgendermaßen:

1. TRechnungDataset.Insert;
( das TDataset ist so konfiguriert, dass bei Ausführen von Insert eine neue ID aus einer Sequence geholt wird und intern schon dem keyfield id zugewiesen wird)
2a. Positionen hinzufügen mit TRechnungPositonDataset.Insert
2b. Durch die MasterDetail-Beziehung wird das Feld rechnung in der Position jetzt mit der ID aus dem Master befüllt
2c. TRechnungPositionDataset.Post
3. TRechnungDataset.Post

Hierbei kann man Schritt (2) beliebig oft wiederholen.

Das ganze funktioniert auch wunderbar - BIS man in der Datenbank eine referentielle Integrität zwischen dem Feld Rechnungsposition.Rechnung und dem Feld Rechnung.Id herstellen möchte. Dann knallt es im Punkt 2c - da die Mastertabelle noch gar nicht gepostet wurde.

Wie würde man den workflow oben designen müssen, um referentielle Integrität nutzen zu können?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: FIBPlus, Master/Detail und ForeignKeys

  Alt 11. Dez 2013, 07:52
Befinden sich die beiden DataSets im selben Transaktionskontext?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: FIBPlus, Master/Detail und ForeignKeys

  Alt 11. Dez 2013, 09:05
Ja. Das ist es ja, was mich wundert. Anscheinend findet die Integritätsprüfung beim Post statt und nicht erst beim Commit.
  Mit Zitat antworten Zitat
jobo

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

AW: FIBPlus, Master/Detail und ForeignKeys

  Alt 11. Dez 2013, 09:13
Das ist eigentlich normal. Anderes Verhalten wird über die Art des Ref.Constraint definiert, hängt von den Möglichkeiten der DB ab.

Du muss eigentlich nur dafür sorgen, dass der Masterrecord auch gepostet wird, bevor der 1. Detaildatensatz angelegt (oder spätestens gepostet) wird.

Das ist sowieso sinnvoll, da bei der Be/Ver-arbeitung der Detaildatensätze u.U. weitere Constraints oder Regeln greifen können, die mit dem Masterrecord in Zusammenhang stehen.
Es wäre ohne weiteres denkbar, dass der aktuelle, nicht gepostete DS einen DB Constraint verletzt. Würde man das System dazu bringen, auf Basis des ungeposteten Satzes einen, mehrere oder viele Detaildatensätze anzulegen, die am Ende beim Commit dann alle hinfällig sind, weil der Masterrecord nicht eingetragen werden kann, wäre das ärgerlich.

Ein Commit macht, kontrolliert, steuert oder prüft gar nichts. Es schreibt die transaktionalen Änderungen einfach nur fest.
Gruß, Jo

Geändert von jobo (11. Dez 2013 um 09:15 Uhr)
  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 13:58 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