Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Kopie eines Wertes von einer sekundärDB in eine andere sekDB (https://www.delphipraxis.net/496-kopie-eines-wertes-von-einer-sekundaerdb-eine-andere-sekdb.html)

m-werk 31. Jul 2002 08:58


Kopie eines Wertes von einer sekundärDB in eine andere sekDB
 
Hi Leute,

Ich hab da mal ne Frage:
Ich habe eine Access Datenbank. In dieser Datenbank habe ich einige UnterDatenbänke erstellt wie z.B. Kundendaten, Kinder, usw.

Nun habe ich in den Kundendaten ein Feld namens 'Zuname'
In den Kinder-DB habe ich auch ein Feld namens 'Zuname'

Im Programm, habe ich ein Hauptformular, welches auf die Kundendaten zugreift
Im Unterformular 'Kinder' habe ich dann ein DBGrid, welches auf die Kinder Zugreift.

Kann mann das so irgendwie verbinden, dass wenn ich im Hauptformular eines Kunden den Zunamen eingetragen habe, dass dann automatisch eine Kopie des Namens im DBGrid vom Kinderformular drinn steht?

Wenn ja, wie kann ich das bitte realisieren?

MrSpock 31. Jul 2002 10:47

Hallo m-werk,

das was du als Unterdatenbanken bezeichnset sind wahrscheinlich Tabellen. Die Sammlung von Tabellen (und anderen Objekten wie Abfragen, Ansichten, etc.) ist dann die Datenbank.

Du solltest eine Master / Detail - Verbindung zwischen der Kunden (Master) und der Kinder (Detail) Tabelle herstellen. Wenn du einen neuen Kunden einträgst, macht es ja noch keinen Sinn, den Nachnamen in die Kindertabelle zu übernehmen, weil ja noch kein Kind hinzugefügt wurde. Aber du kannst beim BeforePost Ereignis der Kinder Tabelle eine Zeile einfügen:

Code:
Kinder.FieldByName('Zuname').Value := Kunde.FieldByName('Zuname').AsString;

m-werk 2. Aug 2002 09:11

Hi, ich habe das jetzt mit dem BeforePost probiert, aber es funktioniert nicht.

Wenn ich den Code eingebe, dann kann ich nach jedem Schritt die Formel aussuchen.
z.B. ich gebe jetzt ein: ADOSKinder.Field..... Nach dem Field kommt dann in Delphi eine Liste, wo ich einige Fild... Formeln auswählen kann unter anderem auch FieldByName. Wenn ich dann weitergehe auf ADOSHaupt.Field... dann steht in der Liste kein FieldByName.

Wenn ich bei ADOSHaupt.FieldByName... trotzdem eingebe, kommt zwar keine Fehlermeldung, aber es funktioniert auch nicht.

Was ist da los?
Warum kann ich bei den Kindern FildByName auswählen aber nicht bei ADOSHaupt?

MrSpock 2. Aug 2002 09:23

Hallo m-werk,

das kann daran liegen, dass ADOSHaupt auf der rechten Seite einer Zuweisung verwendet wird. Delphi überprüft dann, welche Eigenschaften eines Objektes den korrekten Typ haben. Bei der Zuweisung in deinem Code wird ein Datentyp wie String erwarten, wenn du jetzt ADOSHaupt.Field... eingibst, stellt Delphi fest, dass FieldByName ein TField Objekt zurückgibt, was ja nicht zuweisungskompatibel ist und bietet es deshalb nicht an. Wenn du es aber komplett eingibst und beim Compilieren kein Fehler auftritt ist die Anweisung sytaktisch korrekt.

Wichtig ist, dass du den Code natürlich in die BeforePost von der Kindertabelle schreibst. Überprüfe bitte mal, ob du das gemacht hast.

m-werk 2. Aug 2002 09:29

Hi, ja, das hab ich so gemacht. Es wird aber dabei der Nachname nicht übernommen.

Code:
procedure TDM.ADOSKinderBeforePost(DataSet: TDataSet);
begin
   ADOSKinder.FieldByName('Nachname').Value := ADOSHaupt.FieldByName('Nachname').AsString;
end;
So sieht mein code aus!

MrSpock 2. Aug 2002 13:19

Hallo m-werk,

der Code ist so in Ordnung. Bei dieser Implementierung wird der Nachname erst übernommen, wenn du ein neues Kind in der Kindertabelle einträgst und versuchst es über Post (z.B. über den Navigator) zu speichern. Vorher sieht man nichts. Möchtest du aber z.B. dass sofort mein Einfügen eines neues satzes der Nachname erscheint, schreibst du denselben Code anstatt in die BeforePost in die AfterInsert Methode.

Weiter habe ich vorausgestzt, dass du die Tabellen als Master / Slave miteiander verknüpft hast, damit sichergestellt ist, dass Master (Hauptabelle) auch auf die richtigen Eltern zeigt (sonst versucht du noch die Kinder dem Nachbarn unterzuschieben :lol: ).

m-werk 6. Aug 2002 03:09

Hi, danke, das hat jetzt prima funktioniert. Ich habe den Code in das AfterInsert ereignis eingefügt.


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