Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten von einer Tabelle in eine andere schreiben (https://www.delphipraxis.net/77485-daten-von-einer-tabelle-eine-andere-schreiben.html)

rbertus2000 20. Sep 2006 10:03

Datenbank: Interbase • Version: 6 • Zugriff über: dbexpress

Daten von einer Tabelle in eine andere schreiben
 
Hallo,
Ich habe ein kleines Problem mit einer Interbase Datenbank. Ich habe zwei Tabellen, die ich irgendwie verknüpfen möchte, habe es auch schon mit Mastersource versucht, aber es hat irgendwie nicht funktioniert.
Nun zu meinen zwei Tabellen:

Tabelle A
id (Primärschlüssel)
Anrede
Vorname
Name
Strasse
Wohnort

Tabelle B
id (Primärschlüssel)
Anrede
Nachname
.
.
.

Ich möchte jetzt nach Möglichkeit, dass die Daten der Felder Anrede und Vorname von Tabelle A automatisch in die Felder von Tabelle B übernommen werden, bzw. angezeigt werden. Wie bekomm ich das hin?

Jürgen Thomas 20. Sep 2006 12:14

Re: Daten von einer Tabelle in eine andere schreiben
 
Zitat:

Zitat von rbertus2000
Ich habe zwei Tabellen, die ich irgendwie verknüpfen möchte, habe es auch schon mit Mastersource versucht, aber es hat irgendwie nicht funktioniert.

Tabelle A
id (Primärschlüssel)

Tabelle B
id (Primärschlüssel)

Ich möchte jetzt nach Möglichkeit, dass die Daten der Felder Anrede und Vorname von Tabelle A automatisch in die Felder von Tabelle B übernommen werden, bzw. angezeigt werden. Wie bekomm ich das hin?

Hallo,

Dein Problem bedarf noch zusätzlicher Erläuterungen:
  • Sind die Tabellen in der gleichen Datenbank enthalten? Wenn nicht, dann gibt es unter Interbase AFAIK keine direkte Möglichkeit.
  • Geht es um dauerhafte Übernahme oder nur um eine Anzeige? Je nachdem sind die Lösungen unterschiedlich.
Eine Lösung für die einfache Anzeige, dabei werden beide Tabellen gemeinsam angezeigt:
SQL-Code:
SELECT * FROM TabelleA
UNION
SELECT * FROM TabelleB
Eine Lösung für die gemischte Anzeige:
SQL-Code:
SELECT a.Anrede, a.Vorname, a.Nachname, b.Vorname, b.Nachname
  FROM TabelleA a
  JOIN TabelleB b ON a.id = b.id
Eine Lösung für die Datenübernahme:
SQL-Code:
UPDATE TabelleA a
   SET a.Vorname = (SELECT b.Vorname FROM TabelleB b where a.id = b.id),
       a.Nachname = (SELECT b.Nachname FROM TabelleB b where a.id = b.id)
Dies funktioniert (getestet mit IBExpert). Es könnte auch sein, dass der Ausführungsplan gut genug läuft; es könnte aber sicher noch Besseres geben.

Gruß Jürgen

PS. Bitte um Entschuldigung: ich habe die Codes nur einfach so hingeschrieben.

rbertus2000 20. Sep 2006 12:57

Re: Daten von einer Tabelle in eine andere schreiben
 
Danke für die Antwort. Mein Problem ist damit aber leider noch nicht gelöst, denn wenn ich den Code für die gemischte Anzeige oder den für die Datenübernahme nutze, kommt immer das als Fehlermeldung:
Zitat:

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
A.NACHNAME.
Die Spalte Nachname gehört aber eindeutig zu der Tabelle. Woran könnte das liegen?

P.S. Beide Tabellen sind in der gleichen Datenbank.
P.P.S. Ich nutze den EMS SQL Manager 2005 Lite

Jürgen Thomas 20. Sep 2006 14:01

Re: Daten von einer Tabelle in eine andere schreiben
 
Zitat:

Zitat von rbertus2000
Danke für die Antwort. Mein Problem ist damit aber leider noch nicht gelöst, denn wenn ich den Code für die gemischte Anzeige oder den für die Datenübernahme nutze, kommt immer das als Fehlermeldung:
Zitat:

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
A.NACHNAME.
Die Spalte Nachname gehört aber eindeutig zu der Tabelle. Woran könnte das liegen?

Das sieht nach einem winzigen Schreibfehler aus, den ich nur entdecken könnte, wenn ich exakt die Tabellendefinition und den SQL-Befehl sehe.

Mir fallen folgende Möglichkeiten ein:
* Das Tabellenkürzel a fehlt.
* In Deinem ersten Beitrag heißt bei TabelleA das Feld 'Name' und nicht 'Nachname'.
Vielleicht hilft die Fehlersuche in dieser Richtung.

Gruß Jürgen

rbertus2000 20. Sep 2006 17:11

Re: Daten von einer Tabelle in eine andere schreiben
 
Zitat:

Zitat von Jürgen Thomas
Das sieht nach einem winzigen Schreibfehler aus, den ich nur entdecken könnte, wenn ich exakt die Tabellendefinition und den SQL-Befehl sehe.

Ich bin aber davon überzeugt, dass ich keinen Schreibfehler gemacht habe. Vielleicht sollte ich auch noch mal erklären, wozu das eigendlich dient. Das ganze soll eine Art Lehrerverwaltung für meine Schule werden. In der ersten Tabellen werden also die Daten der Lehrer eingegeben und die zweite Tabelle soll dann stehen, wann welcher Lehrer in welchem Raum ist (deshalb 1. Std - 9. Std). Nun wäre es natürlich blöd, wenn man den Namen und die Anrede der Lehrer in dieser Tabelle auch noch einmal eingeben musste, deshalb wollte ich, dass diese Daten irgendwie automatisch übernommen werden.

Zum besseren Verständnis hier nochmal die genaue Struktur der Tabellen und mein ausgeführter Befehl. Vielleicht wird daraus mein Fehler ja ersichtlicher, denn ich finde ihn nicht.

Tabelle A (heißt eigendlich Lehrer, hatte sie nur der Einfachheit halber A genannt)
ID (Primärschlüssel)
Anrede
Vorname
Nachname
Adresse
Postleitzahl
Wohnort

Tabelle B (heißt eigendlich Montag)
ID (Primärschlüssel)
Anrede
Nachname
1. Std
2. Std
3. Std
...
9. Std.

Ich hatte jetzt versucht die Update Anweisung mit den Angepassten Daten auszuführen, also
SQL-Code:
UPDATE MONTAG a
   SET a.Anrede = (SELECT b.Anrede FROM "Lehrer" b where a.id = b.id),
       a.Nachname = (SELECT b.Nachname FROM "Lehrer" b where a.id = b.id)
Dabei gab er mit dann den oben genannten Fehler zurück. Die Schreibweisen der Felder sind richtig, ich habe sie doppelt überprüft! Ich weiß wirklich nicht was der Fehler sein kann.

Jürgen Thomas 20. Sep 2006 18:26

Re: Daten von einer Tabelle in eine andere schreiben
 
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

rbertus2000 20. Sep 2006 21:22

Re: Daten von einer Tabelle in eine andere schreiben
 
Danke für deine Hilfe. Ich habe inzwischen herausgefunden, warum der Fehler auftritt. Komischerweise will er die Feld- und Tabellennamen entweder nur in Großbuchstaben oder in Anführungszeichen haben. Komisch :gruebel: ... naja, du hast mir jedenfalls sehr geholfen. Nochmals danke dafür.


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