Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#6

Re: Daten von einer Tabelle in eine andere schreiben

  Alt 20. Sep 2006, 18:26
Danke für diese Erläuterungen. Unter diesen Umständen verstehe ich die Fehlermeldung auch nicht. Aber könnte es sein, dass wir ziemlich aneinander vorbei geredet haben?

Nach Deinen Erklärungen gehen mir folgende Gedanken durch den Kopf:
  • Der Primärschlüssel von TabelleB kann nichts mit dem Primärschlüssel von TabelleA zu tun haben, sondern ist doch nichts anderes als eine laufende Nummer aller Wochenstunden (vereinfacht formuliert).
  • Zu jeder Kombination Tag+Stunde gehört ein Lehrer, also ein Verweis auf eine ID aus TabelleA.
  • In der TabelleB haben Anrede+Name nichts zu suchen (weitgehendes 'Verbot' von Redundanz in Datenbanken).
Nach meinen Vorstellungen müsstest Du so vorgehen:
SQL-Code:
/*  TabelleA bleibt unverändert  */
/*  TabelleB sieht so aus:  */
CREATE TABLE Tbl_Stundenplan (
  ID INTEGER NOT NULL,
  Wochentag SMALLINT NOT NULL CHECK(VALUE BETWEEN 1 AND 6),
  Stunde SMALLINT NOT NULL,
  Lehrer_ID INTEGER,
  CONSTRAINT Stundenplan_PK PRIMARY KEY(ID),
  CONSTRAINT Stundenplan_Lehrer FOREIGN KEY(Lehrer_ID) REFERENCES TabelleA(ID) );
/*  hinzu kämen noch Eindeutigkeitsprüfungen: Wochentag + Stunde + Lehrer_ID  */
Lehrer werden ausschließlich über TabelleA gespeichert.

Zum Ansehen des Wochenplans kämen vermutlich VIEWs in Frage: Stundenverteilung je Lehrer, Raumverteilung je Stunde u.ä.

Zu jeder Wochenstunde wird nicht etwa Anrede und Name eingegeben, sondern einer der vorhandenen Lehrer ausgewählt.

An der Stelle muss ich passen, weil ich bisher erst meine Datenstruktur konstruiert und die Oberfläche konzipiert, aber noch nicht realisiert habe. Für mich wäre aber klar:
  • TabelleA wird direkt über ein Grid oder RecordPanel o.ä. bearbeitet.
  • Tbl_Stundenplan wird ebenso bearbeitet.
  • Die Auswahl der Lehrer erfolgt über TIBLookupComboBox o.ä. - was Du eben hast - per Master-Detail-Verknüpfung.

Wenn ich Deine Gedanken richtig interpretiert und umgesetzt habe, dann versuche bitte, damit weiterzugehen. Wenn ich Dich falsch verstanden habe, dann bitte ich um Entschuldigung - und dann vergiss für Dein Problem am besten fast alles, was ich gesagt habe (auch wenn die von mir genannten Einzelheiten richtig sein müssten).

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat