Autor |
Beitrag |
sisc
      
Beiträge: 38
D3 Prof
|
Verfasst: Mi 19.01.05 12:55
Wie verknüpfe ich zwei Tabellen gegenseitig in m:n Form? Ich hatte mir das Buch "Borland Delphi 5; Grundlagen und Profiwissen" gekauft, doch leider versteh ich von dem was die sagen (irgendwas mit Master Source, Masterfield, Nachschlagtabelle und so) wenig bis nix. Aber in dem Buch steht leider nicht erklärt, wie man es macht. Die werfen nur mit Fachbegriffen um sich. Das Buch ist nicht so gut. Doch nun zurück zu meiner eigentlichen Frage:
Ich wollte ein Programm schreiben, welches mit der "Zusammengehörigkeit" (von Personen in einem Projekt) zu tun hat.
Ich benütze das Paradox 7.0 Format.
1. Tabelle:
Nr (Primärschlüssel, Zähler),
Name (Alpha),
Vorname (Alpha),
eventuell weitere Daten.
2. Tabelle:
Nr (Numerisch),
Name(1) (Numerisch),
Name(2) (Numerisch),
Name(3) (Numerisch),
Name(4) (Numerisch).
In der 1. Tabelle stehen die Personendaten. In der zweiten Tabelle steht Nr für die (Nr) Nummer in der ersten Tabelle, um den Besitzer der "Zusammengehörigkeit" eindeutig zu indentifizieren.
In den Feldern Name(1-4) stehen die Nummern von der 1. Tabelle, von den Personen, die dann zu der Nr Person in der zweiten Tabelle gehören.
À propos, kann man Tabellen nicht irgendwie zur Laufzeit erstellen und könnte man die Tabelle theoretisch bei der Laufzeit um eine Spalte (z. B. Name(5)) erweitern?
Danke, das ihr mir helft, sisc. 
|
|
OlliWausD
      
Beiträge: 212
Win 2000/XP
Delphi 5 Professional - Interbase/Firebird
|
Verfasst: Mi 19.01.05 14:11
sorry sisc,
aber vor lauter Nr, weiss man nicht mehr, was eigentlich wo sein soll.
Beschreib doch einfach mal, was das Programm "tun" soll.
Tabelle 1 = Personal-Daten
Tabelle 2 = Bücherausleihe?? oder was soll in der Tabelle stehn????
Wie gesagt. So können wir dir schlecht weiterhelfen. Beschreib mal in "Normalen" Worten was das Programm machen soll.
mfg
OlliW
_________________ Take it easy
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Mi 19.01.05 14:13
Hallo sisc,
herzlich willkommen im Delphi Forum.
Deiner erste Tabelle mit den Namen der Mitarbeiter ist OK. Die zweite Tabelle scheint jedoch so nicht sinnvoll. Den Grund lieferst du eigentlich selbst mit deiner Frage nach Erweiterberkeit. Die zweite Tabelle sollte Projekte haißen und die Projekte beschreiben. Die n:m Verbindung erstellst du mit einer Tabelle ProjMitarbeiter. Diese hat (ggf. u.a.) die Felder ProjID, MitarbeiterID. Für jede solche Zuordnung legst du einen eigenen Datensatz an.
_________________ Live long and prosper
MrSpock \\//
|
|
sisc 
      
Beiträge: 38
D3 Prof
|
Verfasst: Do 20.01.05 09:14
Hallo
Also, das Programm ist für Projektverwaltung. Die zweite Tabelle soll nur noch einmal numerisch zusammenfassen, wer mit wem arbeitet (um Speicherplatz zu sparen). Die Frage ist nur, wie ich die zwei Tabellen miteinander so verknüpfe, das ich z. B. in einem Formular durch eine Combobox den Namen auswählen kann in dem 1.Feld der zweiten Tabelle aber eine Zahl gespeichert wird. Und, wenn ich dazu die Mitarbeiter aus der 1. Tabelle auswähle, dann werden die unter Name(1-4) als Nummer gespeichert.
Übrigens werde ich die zweite Tabelle umbenennen.
sisc 
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Do 20.01.05 09:35
Hallo sisc,
hat jeder Mitarbeiter genau 4 andere Personen, die ihm zugeteilt werden? Sind die Personen, denen Mitarbeiter zugeteilt werden Vorgesetzte?
_________________ Live long and prosper
MrSpock \\//
|
|
sisc 
      
Beiträge: 38
D3 Prof
|
Verfasst: Do 20.01.05 09:42
Hi
Die Personen sind keine Vorgesetze. Es steht nur unter ihrem Namen. Eigentlich wäre es gut, wenn man die Tabelle zur Laufzeit erweitern kann.
Entschuldigt mich, ich schreibe jetzt Englisch Schulaufgabe. Ich schau wieder in der 6. Stunde rein. 
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Do 20.01.05 09:48
Hallo sisc,
ich habe in meinem ersten Beitrag gesagt wie du so etwas machen kannst, wenn du eine echte n:m Beziehung abbilden willst.
_________________ Live long and prosper
MrSpock \\//
|
|
sisc 
      
Beiträge: 38
D3 Prof
|
Verfasst: Fr 21.01.05 09:09
Hi
Die Struktur habe ich jetzt erstellt, so wie Mr. Spock es vorgeschlagen hat. Aber ich weis nicht, wie ich die jetzt in Delphi verknüpfen soll?
sisc 
|
|
sisc 
      
Beiträge: 38
D3 Prof
|
Verfasst: Mo 24.01.05 14:18
Ich habe jetzt eine Tabelle
Personaldaten:
Nr (Zähler, Primärkey)
Name (Alpha)
usw.
Interselektionstabelle1:
Nr(Integer, Sekundärindizes)
ID (Integer, Sekundärindizes)
3. Tabelle
ID(Zähler, Primärkey)
Name(1)(Numerisch)
Name(2)(Numerisch)
Name(3)(Numerisch)
Name(4)(Numerisch)
Wie verknüpfe ich diese Tabellen jetzt am Besten in Delphi? 
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Mo 24.01.05 16:15
Hallo sisc,
stehen die Mitarbeiter (Name1 bis Name4) auch in der Personaldaten - Tabelle? Falls ja, benötigst du Tabelle 3 nicht mehr, da alle Daten in der Interselektionstabelle gespeichert sind. Du kannst dann die Daten z.B. mit:
Quelltext 1:
| SELECT * FROM Interselektionstabelle1 WHERE Nr = :PersNr |
abrufen. Du erhälst dann eine Datenmenge, die die tatsächlichen IDs der Mitarbeiter enthält, egal ob es nun genau 4 oder mehr sind. Mit einem LookUp Feld schlägst du dann die ID in der Personaldaten Tabelle nach und kannst so einfach den Namen des Mitarbeiters anzeigen.
_________________ Live long and prosper
MrSpock \\//
|
|
sisc 
      
Beiträge: 38
D3 Prof
|
Verfasst: Sa 29.01.05 17:51
Hi
@MrSpock
Ich verstehe, wie du dass meinst und ich denke auch das es funktioniert. Bei mir funktioniert es leider nicht. Er meckert wegen :PersNr. Ich schick dir den Quelltext mal zu. Schau ihn dir bitte mal an und sag mir, was ich falsch gemacht habe. Ich habe eine Readme dazugepackt. Wer ihn sonst noch haben will, schickt bitte eine Mail an mich, da ich keinen Webspace habe.
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Sa 29.01.05 20:22
Hallo sisc,
ich werde mir dein Programm einmal anschauen. Ich hatte es nicht explizit dazu geschrieben, aber die Benutzung eines Bezeichners, der mit einem ":" beginnt, macht diesen zu einem Parameter. Du musst also vor der Ausführung des SQL Staments dem Parameter eine Wert zuweisen:
Delphi-Quelltext 1: 2:
| qryMitarbeiter.ParamByName('PersNr').AsInteger := tabPersdaten.FieldByName('Nr').AsInteger; qryMitarbeiter.Open; |
_________________ Live long and prosper
MrSpock \\//
|
|
stschemel
Hält's aus hier
Beiträge: 7
WIN 2000, WIN XP, Linux
D7 Prof
|
Verfasst: Mi 09.02.05 16:09
sisc hat folgendes geschrieben: |
Wie verknüpfe ich zwei Tabellen gegenseitig in m:n Form? Ich hatte mir das Buch "Borland Delphi 5; Grundlagen und Profiwissen" gekauft, doch leider versteh ich von dem was die sagen (irgendwas mit Master Source, Masterfield, Nachschlagtabelle und so) wenig bis nix. Aber in dem Buch steht leider nicht erklärt, wie man es macht. Die werfen nur mit Fachbegriffen um sich. Das Buch ist nicht so gut. Doch nun zurück zu meiner eigentlichen Frage:
Ich wollte ein Programm schreiben, welches mit der "Zusammengehörigkeit" (von Personen in einem Projekt) zu tun hat.
Ich benütze das Paradox 7.0 Format.
1. Tabelle:
Nr (Primärschlüssel, Zähler),
Name (Alpha),
Vorname (Alpha),
eventuell weitere Daten.
2. Tabelle:
Nr (Numerisch),
Name(1) (Numerisch),
Name(2) (Numerisch),
Name(3) (Numerisch),
Name(4) (Numerisch).
In der 1. Tabelle stehen die Personendaten. In der zweiten Tabelle steht Nr für die (Nr) Nummer in der ersten Tabelle, um den Besitzer der "Zusammengehörigkeit" eindeutig zu indentifizieren.
In den Feldern Name(1-4) stehen die Nummern von der 1. Tabelle, von den Personen, die dann zu der Nr Person in der zweiten Tabelle gehören.
À propos, kann man Tabellen nicht irgendwie zur Laufzeit erstellen und könnte man die Tabelle theoretisch bei der Laufzeit um eine Spalte (z. B. Name(5)) erweitern?
Danke, das ihr mir helft, sisc.  |
Hallo!
Du willst nicht 2 Tabellen verknüpfen, sondern eine m:n mit sich selbst. Dazu brauchst Du eine Zwischentabelle (Deine 2. Tabelle), die muß aber nur 3 Spalten enthalten:
ID (Autowert) (PK)
PERSNR1 (NUMBER) (FK auf Nr in 1. Tabelle)
PERSNR2 (NUMBER) (FK auf Nr in 1. Tabelle)
und einen eindeutigen Index über PERSNR1 und PERSNR2, damit die Beziehungen nicht doppelt vergeben werden. Damit sind beliebig viele unterschiedliche Beziehungen zwischen den Personen in Tabelle 1 darstellbar.
Das hat aber rein gar nichts mit Delphi oder zu dem von Dir erwähnten (übrigens recht guten) Buch zu tun. Du solltest Dir mal etwas Literatur bzgl. Datenbankdesign und Datenmodellierung zulegen.
Die o.g. Variante funktioniert übrigens unabhängig von der verwendeten DB, also auch mit Access, SQL-Server, Pervasive oder was es noch so gibt.
Tschüß
Steffen
|
|
sisc 
      
Beiträge: 38
D3 Prof
|
Verfasst: Mi 16.02.05 14:33
Danke, dass ich mir geholfen habt!
sisc 
|
|
|