Autor |
Beitrag |
Steamboat Willi
Hält's aus hier
Beiträge: 11
|
Verfasst: Sa 03.02.18 20:50
Habe zwei Tabellen mit einem Join verbunden. Die linke Seite besteht aus einigen Spalten der Haupttabelle und enthält das Feld mit dem Primärschlüssel. Die rechte Seite besteht aus einer ganzen Nebentabelle mit dem gleichen Primärschlüssel. Das habe ich mit den entsprechenden Komponenten realisiert. Wenn jetzt die Haupttabelle einen Datensatz enthält, müßte meiner Meinung nach der entsprechende Teil auch über den Join angezeigt werden, was aber nicht der Fall ist. Wie kann ich diesen Fehler beheben?
Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Sa 03.02.2018 um 20:13
Moderiert von Narses: zweite Frage entfernt
|
|
Sinspin
Beiträge: 1322
Erhaltene Danke: 117
Win 10
RIO, CE, Lazarus
|
Verfasst: So 04.02.18 19:11
Hallo, ich versuche gerade deine Beschreibung zu verstehen, aber mir kommt es vor als wenn Du zwei Sachen mixt.
Was hast Du gemacht?
A: Ein SQL Script geschrieben das einen JOIN enthält und Du sieht keine Feldinhalte der Nebentabelle?
B: Zwei Tabellen via Master/Detail Beziehung miteinander verbunden und es fehlen die Daten der Detail-Tabelle?
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Steamboat Willi
Hält's aus hier
Beiträge: 11
|
Verfasst: Mo 05.02.18 13:54
ich habe ein SQL-Script mit einem Join geschrieben, das ich auf der Delphi-Oberfläche anzeigen möchte. Wenn die Haupttabelle einen Datensatz enthält, wird der entsprechende Anteil nicht im Join angezeigt.
|
|
Sinspin
Beiträge: 1322
Erhaltene Danke: 117
Win 10
RIO, CE, Lazarus
|
Verfasst: Mo 05.02.18 18:02
Es ist leider nicht wirklich möglich Dir zu helfen ohne Dein SQL Script zu sehen. Gerade bei Joins ist das leider selbst dann noch schwierig da es an den Daten der Tabelle liegen kann.
Aber lass bitte erstmal das Script sehen.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Steamboat Willi
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 06.02.18 14:10
Hier ist das Script:
SQL-Anweisung 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| SELECT b.MITGLIEDSNUMMER, b.NACHNAME, b.VORNAME, b.GEBURTSDATUM, a.MITGLIEDSNUMMER, a.STRASSE, a.LAND, a.POSTLEITZAHL, a.WOHNORT, a.TELEFON_PRIVAT, a.TELEFON_GESCHAEFTLICH, a.FAX_PRIVAT, a.FAX_GESCHAEFTLICH, a.TELEFON_MOBIL, a.E_POST_PRIVAT, a.E_POST_GESCHAEFTLICH FROM BASISDATEN b RIGHT OUTER JOIN ADRESSE a ON a.MITGLIEDSNUMMER = b.MITGLIEDSNUMMER |
Damit werden alle Felder im Grid angezeigt, nur die Inhalte der Basisdaten nicht.
Moderiert von Christian S.: SQL-Tags hinzugefügt
|
|
Sinspin
Beiträge: 1322
Erhaltene Danke: 117
Win 10
RIO, CE, Lazarus
|
Verfasst: Di 06.02.18 15:25
Hast Du das Script mal in einem SQL Designer oder SQL Tool zu deiner DB ausgeführt?
Ich mein, dass Du nicht mit den Grid im Programm arbeiten musst. Dann ist zumindest Ausgeschlossen dass es an dem liegen kann.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Ralf Jansen
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 06.02.18 16:36
Ich vermute du willst einen Left outer join und keinen right outer join.
Zumindest scheint mir der Fall "ich habe eine Adresse dazu aber kein Mitglied dann zeig mir wenigstens die Adresse" an nicht sinnvoll.
|
|
Steamboat Willi
Hält's aus hier
Beiträge: 11
|
Verfasst: Do 08.02.18 13:14
Vielen Dank, ich bin einen Schritt weiter.
Ich habe den SQL-Code in Database tour geändert:
SQL-Anweisung 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| SELECT b.MITGLIEDSNUMMER, b.NACHNAME, b.VORNAME, b.GEBURTSDATUM, a.MITGLIEDSNUMMER, a.STRASSE, a.LAND, a.POSTLEITZAHL, a.WOHNORT, a.TELEFON_PRIVAT, a.TELEFON_GESCHAEFTLICH, a.FAX_PRIVAT, a.FAX_GESCHAEFTLICH, a.TELEFON_MOBIL, a.E_POST_PRIVAT, a.E_POST_GESCHAEFTLICH
FROM ADRESSE a RIGHT OUTER JOIN BASISDATEN b ON a.MITGLIEDSNUMMER = b.MITGLIEDSNUMMER |
Das wird unabhängig davon, ob ich einen LEFT oder RIGHT OUTER JOIN verwende, dort ausgeführt, d.h. die Feldinhalte "BASISDATEN" werden dort angezeigt.
Das gleiche passiert in Delphi, wenn ich dort unter "SelectSQL" die gleiche Sequenz eingebe.
Was noch nicht funktioniert, ist "INSERT into ADRESSE". Delphi hat mir hier folgenden Code erzeugt:
SQL-Anweisung 1: 2: 3: 4: 5: 6: 7: 8:
| insert into ADRESSE (MITGLIEDSNUMMER, STRASSE, LAND, POSTLEITZAHL, WOHNORT, TELEFON_PRIVAT, TELEFON_GESCHAEFTLICH, FAX_PRIVAT, FAX_GESCHAEFTLICH, TELEFON_MOBIL, E_POST_PRIVAT, E_POST_GESCHAEFTLICH) values (:MITGLIEDSNUMMER, :STRASSE, :LAND, :POSTLEITZAHL, :WOHNORT, :TELEFON_PRIVAT, :TELEFON_GESCHAEFTLICH, :FAX_PRIVAT, :FAX_GESCHAEFTLICH, :TELEFON_MOBIL, :E_POST_PRIVAT, :E_POST_GESCHAEFTLICH) |
Kann mir jemand hierfür einen Tip geben?
Moderiert von Narses: SQL-Tags hinzugefügt
|
|
|