AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Kopie eines Wertes von einer sekundärDB in eine andere sekDB
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von m-werk · begonnen am 31. Jul 2002 · letzter Beitrag vom 6. Aug 2002
Antwort Antwort
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#1

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

  Alt 31. Jul 2002, 08:58
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?
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2
  Alt 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;
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#3
  Alt 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?
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4
  Alt 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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#5
  Alt 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!
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#6
  Alt 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 ).
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#7
  Alt 6. Aug 2002, 03:09
Hi, danke, das hat jetzt prima funktioniert. Ich habe den Code in das AfterInsert ereignis eingefügt.
Grüße, m-werk
  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 14:25 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