Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mehrere MasterSources von einer Tabelle?? (https://www.delphipraxis.net/33240-mehrere-mastersources-von-einer-tabelle.html)

buyden 3. Nov 2004 20:04


Mehrere MasterSources von einer Tabelle??
 
Hi,

Ich hab mal wieder ne kleine Datanbankfrage. Folgende Situation:

Ich hab ne MySQL DB mit den ZEOS-Komponenten angebunden. Das Programm soll ne Reparaturdatenbank für PCs werden.

Ich hab also ne Tabelle "Auftrag", in der sämtliche allgemeinen Daten zu einer Reparatur gespeichert werden. Außerdem sollen noch sämtliche Komponenten, die in dem zu einem Auftrag gehörenden PC verbaut sind aufgenommen werden. Also hab ich ne Tabelle "Artikel" in der sämtliche verfügbaren Einzelteile stehen. Diese möchte ich über ne Verbindungstabelle namens "Verbaut" miteinander verbinden.
Ich hab also bei den Haupttabellen jeweils die Verbindungstabelle als MasterSource angegeben und als Masterfield den entsprechenden Fremdschlüssel.

Sollte doch soweit richtig sein oder?? :gruebel:

Jetzt brauche ich aber auch noch eine Tabelle in der ich aufnehme, welche Komponenten für den jeweiligen Auftrag bestellt sind. Ich müsste also die Tabelle "Auftrag" über ne weitere Verbindungstabelle "Bestellt" mit der "Artikel"-Tabelle verbinden, in MasterSource und Masterfield steht ja aber schon die andere Tabelle drin.

Wie geht man denn in so nem Fall vor??? :wiejetzt:

Stevie 4. Nov 2004 08:41

Re: Mehrere MasterSources von einer Tabelle??
 
Zitat:

Zitat von buyden
Hi,

Ich hab mal wieder ne kleine Datanbankfrage. Folgende Situation:

Ich hab ne MySQL DB mit den ZEOS-Komponenten angebunden. Das Programm soll ne Reparaturdatenbank für PCs werden.

Ich hab also ne Tabelle "Auftrag", in der sämtliche allgemeinen Daten zu einer Reparatur gespeichert werden. Außerdem sollen noch sämtliche Komponenten, die in dem zu einem Auftrag gehörenden PC verbaut sind aufgenommen werden. Also hab ich ne Tabelle "Artikel" in der sämtliche verfügbaren Einzelteile stehen. Diese möchte ich über ne Verbindungstabelle namens "Verbaut" miteinander verbinden.
Ich hab also bei den Haupttabellen jeweils die Verbindungstabelle als MasterSource angegeben und als Masterfield den entsprechenden Fremdschlüssel.

Sollte doch soweit richtig sein oder?? :gruebel:

Jetzt brauche ich aber auch noch eine Tabelle in der ich aufnehme, welche Komponenten für den jeweiligen Auftrag bestellt sind. Ich müsste also die Tabelle "Auftrag" über ne weitere Verbindungstabelle "Bestellt" mit der "Artikel"-Tabelle verbinden, in MasterSource und Masterfield steht ja aber schon die andere Tabelle drin.

Wie geht man denn in so nem Fall vor??? :wiejetzt:

Guten Morgen Mr. Anderson, :mrgreen:

ich denke nicht, dass dein Vorgehen richtig ist.
Wenn ich dich richtig verstanden habe, dann möchtest du bei Auswählen eines Auftrages die verbauten und bestellten Artikel aufgelistet sehen.
Das heißt, die Auftragstabelle ist auf jeden Fall Master!
Du kannst in diesem Fall nicht die Verbindungstabelle als Master angeben, sondern musst über die Verbindungstabelle den jeweiligen Artikel auflösen, ungefähr so:
SQL-Code:
SELECT Verbaut.Auftrag_ID, Artikel.* FROM Verbaut, Artikel WHERE Verbaut.Artikel_ID = Artikel.Artikel_ID
Jetzt kannst du bei dieser Datenmenge die Auftrags-Datenmenge als Master (über Auftrag_ID) angeben, so dass alle verbauten Artikel des gewählten Auftrags angezeigt werden. Ebenso musst du mit den bestellten Artikeln vorgehen.

MfG
Stevie

shmia 4. Nov 2004 09:10

Re: Mehrere MasterSources von einer Tabelle??
 
Zwischen den Tabellen Auftrag und Artikel besteht eine N:M Beziehung.
  • Ein Auftrag kann beliebig viele Artikel haben
  • Ein Artikel kann in beliegig vielen Aufträgen benützt werden
Diese Beziehung wird über die Tabelle Verbaut hergestellt.
Die Tabelle enthält beide Primärschlüsselfelder (IdAuftrag & IdArtikel).
Beide Felder zusammen bilden den Primärschlüssel für die Tabelle Verbaut.
Jetzt der Trick: :hi:
Die Tabelle Verbaut enthält zusätzlich noch das Feld ArtikelStatus.
0 = keine Info, 1 = Artikel verbaut, 2 = Bauteil defekt

buyden 5. Nov 2004 05:16

Re: Mehrere MasterSources von einer Tabelle??
 
@stevie
Ich glaub da hatte ich ein grundsetzliches Verständnisproblem. Ich war in der Vorstellung, dass man die Tabellen in etwa so wie bei Access verknüpfen kann. Auf die Idee, das über ne Abfrage zu machen bin ich nicht gekommen :roll:

Eben nur ein Mensch :lol:

Ich werd das mal so versuchen.

buyden 5. Nov 2004 16:21

Re: Mehrere MasterSources von einer Tabelle??
 
Mit dem Anzeigen ist ja mittlerweile klar. Ich stelle das Query in nem DBGrid dar, jetzt wäre es schön, wenn ich in diesem Grid Datensätze hinzufügen könnte, das Query kann doch aber nur lesen.

:?: :?: :?:

buyden 10. Nov 2004 08:49

Re: Mehrere MasterSources von einer Tabelle??
 
Gibt's denn ne Möglichkeit, das ich das Query so gestalte, dass ich sowohl die Verknüpten Felder anzeigen lasse, gleichzeitig aber auch über das DBgrid mit dem es verbunden ist Datensätze einfüge? Ich möchte nicht extra noch ne Eingabemaske dafür erstellen. :stupid:

Jelly 10. Nov 2004 09:23

Re: Mehrere MasterSources von einer Tabelle??
 
Hallo buyden,

also mit Queries kannst du auch Datensaätze einfügen, indem du die Eigenschaft RequestLive mal auf True setzt. Das aber nur am Rande, denn bei deinem SQL Statement ist ein direktes Editieren eher nicht möglich, aber versuchen kannst dus. Scheiterts, dann ist die Komponente TUpdateSQL für dich eine Lösung.

Wie sieht denn dein SQL Befehl aus, welches dir die Daten im DBGrid liefert.

Übrigens noch was. Persönlich vermeide ich immer das Verwenden von Mastersource etc. Bedenke dabei, daß sämtliche Daten erst beim Client gefiltert werden. Bei großen Datenmengen ist dann wohl jedesmal Kaffee kochen angesagt, wenn du die Tabellen öffnest.

Gruß,

Hansa 10. Nov 2004 09:35

Re: Mehrere MasterSources von einer Tabelle??
 
Zitat:

Zitat von Jelly
. Bei großen Datenmengen ist dann wohl jedesmal Kaffee kochen angesagt, wenn du die Tabellen öffnest.

Stimmt nur zum Teil. Je nach Komponente geht das schon gut. Bei FIBplus z.B. kann man ein Zeitintervall einstellen, ab dem die Detaildaten nachgeladen werden. Scrollt man also relativ schnell durch die Daten, so wird NICHTS nachgeladen. Das ganze ist dann dementsprechend schnell. Erst wenn ich zu lange auf dem Datensatz drauf bleibe, passiert was.

Jelly 10. Nov 2004 09:46

Re: Mehrere MasterSources von einer Tabelle??
 
Zitat:

Zitat von Hansa
Bei FIBplus z.B. kann man ein Zeitintervall einstellen, ab dem die Detaildaten nachgeladen werden.

Aber was ändert das an der Problematik, daß trotzdem alle Datensätze bei Öffnen der Tabelle zum Client wandern, und die dort eben zeitversetzt gefiltert werden. Wenn du erst mal eine Datenbank mit 1 Million Aufträgen, 100000 Artikel hast, werden diese gesamten Daten jedesmal zum Client gesendet. Das Verlinken mit Mastersource im im Endeffetk dasselbe wie wenn du manuell in der TQuery komponente einen Filter setzt. Besser ist es, dir gleich nur dir notwendigen Daten vom Server schicken zu lassen, indem du deine SQL Anfrage antsprechend einschränkst.

Gruß

buyden 12. Nov 2004 08:45

Re: Mehrere MasterSources von einer Tabelle??
 
@ Jelly

Ich hab die RequestLive-Eigenschaft auf true gesetzt, ich bekomme aber immer den Fehler, das er nicht mehrere Datenquellen über das Query aktualisieren kann. Ich hab jezt das mit dem Hinzufügen von Datensätzen in die Verbaut-Tabelle über ein weiteres DBgrid, in dem ich die Artikeltabelle darstelle, gelöst. Beim Doppelklick auf einen Datensatz wird dessen Inhalt und die aktuelle Auftragsnummer in die Verbaut-Tabelle übertragen. Trotzdem müsste ich in das Verbaut-dbgrid noch die Seriennummer eintragen können, wobei er mich ja wie gesagt anschreit.
Mit TUpdateSQL hab ich noch nicht gearbeitet. :duck:


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