![]() |
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:
Mit der BDE TTable lief der Export aus meinen PDox-Tables in die Access-Tabellen ohne jegliche Probleme (und sogar richtig schnell!!)
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.... 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 |
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:
usw. zu ermitteln und bei der Datenübernahme im Programm einfach mitzuzählen welche Nummer als nächste "dran" ist.
Select MAX(Rech-ID) from Rechnung
Select MAX(RechnungssFall-ID) from RechnungsFall 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 19:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz