Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi automatisch vom Detail-Datensatz den Masterdatensatz lesen (https://www.delphipraxis.net/15281-automatisch-vom-detail-datensatz-den-masterdatensatz-lesen.html)

Hansa 25. Jan 2004 18:24


automatisch vom Detail-Datensatz den Masterdatensatz lesen
 
Hi,

es geht um folgendes (Beispiel) : ich lese nacheinander mehrere Artikel und will zu dem gerade gelesenen die zugehörige Warengruppe gleich mit lesen. Die Artikel-Table enthält für diesen Zweck einen Foreign-Key auf die Warengruppen.

Ich habe zwei Datasets für beide Tabellen und eine Datasource. Wo und wie muß ich das ganze jetzt verknüpfen ? Ich habe versucht die Datasource der Warengruppe zuzuordnen usw. Wie muß ich das genau machen ?? Welche Felder müssen wo hin und wo muß an den SelectSQL etwas geändert werden ?

Steffen 25. Jan 2004 18:40

Re: automatisch vom Detail-Datensatz den Masterdatensatz les
 
Hallo Hansa!

Du muss zuerst einen Datensatz aus der Artikel-Tabelle lesen, dann hast Du den Foreign-Key um auf die Warengruppe zu referenzieren.
nun machst Du ein Select auf die Warengruppen-Tabelle und suchst anhand des Foreign-Key's die zum Artikel gehörende Warengruppe heraus.

Gruß,
Steffen

Hansa 25. Jan 2004 19:34

Re: automatisch vom Detail-Datensatz den Masterdatensatz les
 
Soweit so gut. Nur will ich das automatisch machen und dieses Verhalten auch notfalls abschalten können. Sobald ein neuer Artikel ausgewählt wurde, will ich den Zugriff auf die Warengruppe haben, da ich deren ID brauche. Wie verbinde ich jetzt die DataSource mit dem (welchem) Dataset und sage dem Programm, wenn sich der Detailsatz (Artikel) ändert, soll es mir anhand des Foreign Keys den zugehörigen Master (Warengruppe) raussuchen ?

Ich muß ja praktisch nur den Foreignkey des Details als Source für den Master verwenden, aber genau da habe ich mich jetzt verrannt. 8) Das ganze funktioniert bei einer m:n Beziehung (Rechnung/Positionen) einwandfrei und hier irgendwie nicht.

Leuselator 25. Jan 2004 22:23

Re: automatisch vom Detail-Datensatz den Masterdatensatz les
 
guckst Du meinen Beitrag: hier.
Gruß

Hansa 26. Jan 2004 10:47

Re: automatisch vom Detail-Datensatz den Masterdatensatz les
 
Mit 2 Grids klappt das schon. Aber es geht mir nicht um irgendeine visuelle Anzeige, sondern darum:

Lese Artikel und alle zugehörigen Stammdaten. Also die Funktionalität wie bei dem Grid (mit Angabe Datasource etc.), aber ohne das Grid. Ich glaube mit einer Stored Procedure könnte das gehen. Dann müßte ich aber alles von Hand zu Fuß machen, je nachdem wieviele Master/Detail Tabellen beteiligt sind. 8) Optimal wäre es, zu sagen : Lese Artikel und alle Stammdaten (Ja oder Nein).

jlanger 26. Jan 2004 11:45

Re: automatisch vom Detail-Datensatz den Masterdatensatz les
 
Zitat:

Zitat von Hansa
Soweit so gut. Nur will ich das automatisch machen und dieses Verhalten auch notfalls abschalten können. Sobald ein neuer Artikel ausgewählt wurde, will ich den Zugriff auf die Warengruppe haben, da ich deren ID brauche. Wie verbinde ich jetzt die DataSource mit dem (welchem) Dataset und sage dem Programm, wenn sich der Detailsatz (Artikel) ändert, soll es mir anhand des Foreign Keys den zugehörigen Master (Warengruppe) raussuchen ?

Du willst den Zugriff auf die Warengruppe haben, weil du deren ID brauchst? Deren ID ist doch im Artikel abgelegt????? Die ID der Warengruppe ist doch als Feld im Artikel abgelegt. Dann hast du diese ja direkt.
Ich verstehe nicht, was du willst.
Jenachdem ist evtl. ein Lookup das richtige, aber bevor ich weiss, was du willst, kann ich es dir nicht sagen.


Zitat:

Zitat von Hansa
Ich muß ja praktisch nur den Foreignkey des Details als Source für den Master verwenden, aber genau da habe ich mich jetzt verrannt. 8) Das ganze funktioniert bei einer m:n Beziehung (Rechnung/Positionen) einwandfrei und hier irgendwie nicht.

Hierzu kann ich dir mehr sagen, wenn du mir den oberen Teil erklärt hast.

Jürgen

Leuselator 26. Jan 2004 12:03

Re: automatisch vom Detail-Datensatz den Masterdatensatz les
 
Dann schau Dir alternativ mal JOIN's an:
z.B.:
SQL-Code:
         SELECT A.idArtikel
              , A.ArtikelName
              , B.Preis
              , C.MengeAufLager
           FROM Artikel A
LEFT OUTER JOIN Preise B
             ON B.idArtikel = A.idArtikel
LEFT OUTER JOIN Bestand C
             ON C.idArtikel = A.idArtikel

Hansa 26. Jan 2004 12:06

Re: automatisch vom Detail-Datensatz den Masterdatensatz les
 
Ich habe ein Grid mit Artikeln. Ordne ich dem eine Datasource "Warengruppe" zu, so kann ich diese in einem zweiten Grid anzeigen. Hat diese noch eine Warenhauptgruppe kann ich diese in einem dritten Grid anzeigen usw. usw. Im Prinzip kann ich also von Sub-Sub...Sub-Detail bis zum Master alles ansprechen. Nur brauche ich keine 10 Grids, sondern die IDs der entsprechenden Datensätze. Also Artikel lesen und eventuell alles was da dran hängt. Wenn ich den Artikel aber so lese :
SQL-Code:
SELECT * FROM ARTIKEL
#

was nützt mich das in diesem Zusammenhang ?? Das Grid macht das irgendwie intern mit der Datasource. Ich brauche so was, aber ohne Grid.

Leuselator 26. Jan 2004 12:12

Re: automatisch vom Detail-Datensatz den Masterdatensatz les
 
:warn: Sohn, Du sollst leeeesen! :-)

Wenn Du in obigem Beispiel die ID-Felder von Preis und Bestand mitselektierst,
kannst Du mit einer Abfrage:
Delphi-Quellcode:
if not DataSource.FieldByName('idPreis').IsNull then begin
  //Fülle die Preisfelder...
end;
arbeiten
Gruß

jlanger 26. Jan 2004 12:31

Re: automatisch vom Detail-Datensatz den Masterdatensatz les
 
Zitat:

Zitat von Hansa
Ich habe ein Grid mit Artikeln. Ordne ich dem eine Datasource "Warengruppe" zu, so kann ich diese in einem zweiten Grid anzeigen. Hat diese noch eine Warenhauptgruppe kann ich diese in einem dritten Grid anzeigen usw. usw. Im Prinzip kann ich also von Sub-Sub...Sub-Detail bis zum Master alles ansprechen. Nur brauche ich keine 10 Grids, sondern die IDs der entsprechenden Datensätze. Also Artikel lesen und eventuell alles was da dran hängt. Wenn ich den Artikel aber so lese :
SQL-Code:
SELECT * FROM ARTIKEL
#

was nützt mich das in diesem Zusammenhang ?? Das Grid macht das irgendwie intern mit der Datasource. Ich brauche so was, aber ohne Grid.

:warn: Ich weiss schon, warum ich ich eben gesagt habe, du sollst mal erklären was du willst! :warn:

Ich analysiere einmal, was du schreibst:
...Ich habe ein Grid mit Artikeln...
Du hast also ein DBGrid, dem du eine DataSource zugeordnet hast, die auf ein DataSet mit Artikeln zeigt.
...Ordne ich dem eine Datasource "Warengruppe" zu, so kann ich diese in einem zweiten Grid anzeigen...
Wenn du diesem Grid (so hast dus geschrieben) eine DataSource Warengruppe zuordnest, kannst due diese in einem zweiten Grid anzeigen. Ich würde sagen, die wird dann von dem 1.Grid angezeigt. Oder meinstest du, wenn du der Datasource eine Datasource Warengruppe zuordnest? Dann musst du die Abfrage der Query ja auch entsprechend gestalten, bzw. bei Verwendung von TTable's o.ä. die MasterSource etc. der 1.Table (Artikel) entsprechend setzen. D.h. du hast in der Artikeltabelle z.b. ein Feld "Warengruppe" in dem die ID der Warengruppe steht (oder wie machst du es sonst?).

Meine Frage oben war also absolut berechtigt. "du willst die Warengruppe haben, weil du deren ID brauchst." Hm, ich denke mal, du hast deren ID in der Artikeltabelle und willst die anderen Datenfelder der Warengruppe haben. Ist es so?

Genau deshalb habe ich gefragt, was du eigentlich willst!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 Uhr.
Seite 1 von 2  1 2      

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