Delphi-PRAXiS

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

merlin17 14. Jun 2004 22:33


ADO und Master/Detail/Detail
 
hallo,

ich habe vor vielen Jahren (1996) ein kleines Programm auf BDE-Basis Geschrieben. Läuft heute noch bei einigen ohne Probleme.
Nun gibt es scheinbar mit der BDE und dem MSACCESS-Treiber bei einem Kunden ein paar Probleme mit MDAC 2.8 (Version lt. dem Kunden, ich habe hier nur 2.7a??).
Ich wollte nun eine kleine Exportroutine dahin gehend ändern, dass ich die drei TTable-Objekte gegen drei TADOTable-Objekte ersetze (mit gemeinsamer Connection). Soweit alles kein Problem. Nur:

Ich habe drei Tabellen
Rechnung
RechnungsFall
RechnungsPosition

in der Access-Datenbank (von einem anderen Verfahren (scheinbar vb <g>).
Wie bekomme ich bei drei Tabellen die Master-Detail-Detail-Geschichte hin.
d.h. ich füge einen Rechnungssatz ein (ID: 1) und dann will ich die Fälle in die 2. Tabelle einfügen und bei RE_ID soll automatisch die 1 übernommen werden. Und Entsprechend bei der Positionstabelle eine RFall_ID von der 2. Tab).
Ich habe (mein erster Kontakt ADO btw) schon die Feinheiten CursorLocation und CursorTyp entdeckt und die Rechungs-ID wird jetzt korrekt übernommen (ohne reLoad der Tabelle) aber die Relation von Fall mit Position klappt dann nicht mehr.....

Code:
While-Not-Schleife Rechnung
Rechnung.Insert
    While Not-Schleife Fälle
       Insert von Datensätzen in Fälle mit ID_RE
       While Not Schleife Positonen
         Insert von DS Positionen mit Übernahme der ID_Fälle
   ...next....
Mit der BDE TTable lief der Export aus meinen PDox-Tables in die Access-Tabellen ohne jegliche Probleme (und sogar richtig schnell!!)

Wie sieht hier eine Lösung bei den drei Tabellen und den Einstellungen der TADOTable oder TADODataset aus?!?! Ist doch sicherlich möglich, oder? Ich will mich nicht allzu tief mit ADO auseinander setzen (ich arbeite primär mit Oracle und Interbase und früher mal mit der BDE).


Danke für jeden Tip


:-) thomas

nieurig 15. Jun 2004 07:21

Re: ADO und Master/Detail/Detail
 
Guten Morgen Thomas,
ich denke Dein Problem hat eigentlich nichts mit ADO zu tun. Es hängt mehr mit den AutoIncrement Werten in der Datenbank zusammen, bzw. damit, dass dieser Autowert gleichzeitig Primärschlüssel der Detailtabellen ist.

Wenn der Wert im Auto-Feld immer um 1 erhöht wird, könnte (zumindest im Single-User Betrieb :wink: ) die Ermittlung der jeweils neuen ID aus der Datenbank entfallen.

Dann würde es reichen, die bisher höchsten Nummern via

SQL-Code:
Select MAX(Rech-ID) from Rechnung
Select MAX(RechnungssFall-ID) from RechnungsFall
usw. zu ermitteln und bei der Datenübernahme im Programm einfach mitzuzählen welche Nummer als nächste "dran" ist.

Schöne Grüße
Niels


P.S. Du hast geschrieben, Dir gelingt es die neue ID via CursorLocation und CursorTyp herauszufinden. Würde mich interessieren wie !


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