AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Daten von einer Tabelle in eine andere schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Daten von einer Tabelle in eine andere schreiben

Ein Thema von rbertus2000 · begonnen am 20. Sep 2006 · letzter Beitrag vom 20. Sep 2006
Antwort Antwort
rbertus2000

Registriert seit: 10. Apr 2006
13 Beiträge
 
Turbo Delphi für Win32
 
#1

Daten von einer Tabelle in eine andere schreiben

  Alt 20. Sep 2006, 11:03
Datenbank: Interbase • Version: 6 • Zugriff über: dbexpress
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?
mfg rbertus2000
  Mit Zitat antworten Zitat
Jürgen Thomas

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

Re: Daten von einer Tabelle in eine andere schreiben

  Alt 20. Sep 2006, 13:14
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.
#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
rbertus2000

Registriert seit: 10. Apr 2006
13 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Daten von einer Tabelle in eine andere schreiben

  Alt 20. Sep 2006, 13:57
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
mfg rbertus2000
  Mit Zitat antworten Zitat
Jürgen Thomas

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

Re: Daten von einer Tabelle in eine andere schreiben

  Alt 20. Sep 2006, 15:01
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
#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
rbertus2000

Registriert seit: 10. Apr 2006
13 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Daten von einer Tabelle in eine andere schreiben

  Alt 20. Sep 2006, 18:11
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.
mfg rbertus2000
  Mit Zitat antworten Zitat
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, 19: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
rbertus2000

Registriert seit: 10. Apr 2006
13 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Daten von einer Tabelle in eine andere schreiben

  Alt 20. Sep 2006, 22:22
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 ... naja, du hast mir jedenfalls sehr geholfen. Nochmals danke dafür.
mfg rbertus2000
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 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