Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi cachedupdates und Master/Detail (https://www.delphipraxis.net/72226-cachedupdates-und-master-detail.html)

fredborscht 27. Jun 2006 12:16

Datenbank: Oracle • Version: 10.1.0.2.0 • Zugriff über: DirectOracleAccess (Allround Automations) 4.0.7.1 (für D5)

cachedupdates und Master/Detail
 
Hallo,

Ich versuche, eine Anwendung für eine Oracle Datenbank zu schreiben,
die Datensätze in mehreren Tabellen einfügen,ändern oder löschen soll.
Zum Zugriff aud die DB benutze ich die DOAD Komponenten von allroundautomations.
Dies sind die Tabellen (in Delphi jeweils ein Toracledataset):
artikel: Master
bemerkung: Detail (1:1)
logistik: Detail (1:n)
rohstoffe: Detail (1:n)
Die Daten des Artikels sowie der Bemerkung werden im oberen Teil der Form
in verschiedenen dbedits angezeigt, die Logistikdaten bzw. Rohstoffdaten
darunter in zwei dbgrids.
wenn der Anwender den "Speichern"-Button betätigt (ToracleNavigator, ist über die Eigenschaft Datasource mit dem Artikel-dataset verknüpft),
sollen alle Änderungen in die Datenbank geschrieben werden.
Dabei soll vorher geprüft werden, ob alle Daten korrekt eingegeben wurden.
Ist dies nicht der Fall(werden z.B. fehlerhafte Daten in einem Logistikdatensatz festgestellt),
so soll die Transaktion komplett (für alle Datensätze) abgebrochen werden.
Der Anwender soll jedoch nicht die Möglichkeit haben, mehrere Artikel(Masterdatensätze) nacheinander einzufügen oder zu ändern,
ohne jeden einzelnen vorher gespeichert zu haben.
Hier also meine Fragen :
- Muß ich die Eigenschaft cachedupdates für dieses Verhalten auf true setzen und wenn ja, für welche Datasets(nur die Details?... alle?)
- Habe in verschiedenen posts in den Googlegroups für Delphi gelesen, daß cachedupdates und Master/Detail Beziehungen nicht wirklich
funktionieren...Kann das jemand bestätigen und wenn ja, trifft dies auch auf mein Szenario zu?

Vielen Dank schonmal im Voraus

alzaimar 28. Jun 2006 07:29

Re: cachedupdates und Master/Detail
 
Ich kenne deine Komponenten nicht, aber ich habe mir angewöhnt, die Updates per Hand zu erledigen. Anstatt zu hoffen, das die Post-Methoden das schon irgendwie hinkriegen, schreibe ich mir ein SQL-Skript, das die nötigen Änderungen durchführt. Das geht auch am schnellsten.

Ich verwende MSSQL und da sieht das ungefähr so aus:
SQL-Code:
Declare @MasterID int
--
-- Diese Zeile wird für jeden einzufügenden Master-Record erzeugt
--
Insert Into Master (MasterValue) Values ('New Master');
select @MasterID = @@IDENTITY -- Neuer AutoInc-Wert vom Master
--
-- Für jeden einzufügenden Detail-Record das hier
--
Insert Into Detail (MasterID, DetailValue) Values (@MasterId, 'My detail')
Insert Into Detail (MasterID, DetailValue) Values (@MasterId, 'Another detail')
Das ist das Skript für einen neuen Master/Detail-Datensatz. Ich schicke das als Transaktion zum Server und kann mir sicher sein, das es optimal schnell ausgeführt wird.

Ein ähnliches Skript habe ich für Updates etc.
Das hilft Dir bestimmt nicht weiter, aber vielleicht ist das ein Denkanstoß.

fredborscht 30. Jun 2006 09:03

Re: cachedupdates und Master/Detail
 
Vielen Dank für Deine Antwort, alzaimar...

Hatte ja irgendwie gehofft, daß ich die Sache mit den Standardmethoden auf die Reihe kriege...
aber nach einigem weiteren Suchen und Rumprobieren scheint es mir aber langsam wirklich
die bessere Lösung zu sein, das alles von Hand zu erledigen...

Danke nochmal und schönes Wochenende
Fred


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:33 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