Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verknüpften wert anhand der ID ausgeben (https://www.delphipraxis.net/174178-verknuepften-wert-anhand-der-id-ausgeben.html)

Hausmarke 8. Apr 2013 14:01

Datenbank: Firebird • Version: 2.1 • Zugriff über: TIBDatabase

Verknüpften wert anhand der ID ausgeben
 
Hallo werte ForenUser,

ich habe hier bereits sehr oft antworten auf meine fragen gefunden. Bisher hatte ich jedoch das glück das die fragen die ich hatte, bereits im Forum gestellt worden waren.
Leider konnte ich zu meiner aktuellen fragen nichts finden, bzw. wird wohl meine fragestellung bzw. meine suchbegriffe die Ergebnisse nicht weit genug eingegrenzt haben.

Zum Sachverhalt:
ich greife via TIBDatabase auf eine Firebird Datenbank mit mehreren tabellen zu.
In einer der Tabellen sind die Werte der anderen Tabellen durch die ID hinterlegt und auch durch Keys verknüpft.
Nun möchte ich bei der Ausgabe meiner haupttabelle, nicht die ID ausgeben sondern die Werte auf welche die hinterlegten ID´s verweisen.

Der einzige weg der sich mir momentan erschließt, ist eine Abfrage einzubauen welche die ID ausließt, die andere Tabelle öffnet, und dann den Übergebenen Wert bei der Ausgabe (die ID) durch den eigentlichen Inhalt ersetzt.
Aber dies erscheint mir relativ umständlich, zudem gehe ich davon aus, das durch dieses vorgehen das Programm schwerfälliger wird.
Gibt es evtl. eine andere, schnellere Lösung?

besten dank im voraus

Uwe Raabe 8. Apr 2013 14:06

AW: Verknüpften wert anhand der ID ausgeben
 
Lookup-Felder

Hausmarke 8. Apr 2013 14:30

AW: Verknüpften wert anhand der ID ausgeben
 
Vielen Dank für die schnelle Antwort.

Ich werd mir das mal in der Hilfe anschauen.

wie ich es aktuell sehe, benötige ich dafür eine TTable komponente. Ich schätze das in dieser die Verknüpften Werte beider Tabellen hinterlegt werden.

p80286 8. Apr 2013 14:32

AW: Verknüpften wert anhand der ID ausgeben
 
Wenn ich Dich richtig verstanden habe, hast Du eine "Masterjointable" in der alle Beziehungen zwischen deinen Datentabellen enthalten sind.
Also ungefähr so:
MJT
ID
ID_Dat1
ID_Dat2
ID_Dat3
ID_Dat4
..

Dat1
ID_Dat1
Daten

Dat2
ID_Dat2
Daten

Dat3
ID_Dat3
Daten

....


Das wäre nicht unbedingt optimal, aber durchaus handhabbar

Code:
select Dat1.Daten,Dat2.Daten,Dat3.Daten
from MJT
    ,Dat1
    ,Dat2
    ,Dat3
where MJT.ID_Dat1=Dat1.ID_Dat1
  and MJT.ID_Dat2=Dat2.ID_Dat2
...
usw
Gruß K-H

Hausmarke 9. Apr 2013 13:00

AW: Verknüpften wert anhand der ID ausgeben
 
Danke für den Vorschlag.

Meine Tabelle sieht dabei etwas einfacher aus, als beispiel:

Tab_Haus:
  • ID
  • Ort
  • BauartID - FK auf Tab_Bauart(ID)

Tab_Bauart:
  • ID
  • Bauart

mein ziel ist es im ausgabeformular anstatt der ID die in Tab_Bauart hinterlegte Bauart auszugeben.

ich werde es aller voraussicht nicht über die LookUpComboBox umsetzen, sondern über ein separates Formular, wodurch der User unmittelbar neue "Baustile" aufnehmen kann.

p80286 9. Apr 2013 13:13

AW: Verknüpften wert anhand der ID ausgeben
 
Ich muß gestehen, daß ich nicht so recht verstehe worauf Du hinaus willst
a)Du verknüpfst Haus mit Bauart
Code:
select Haus.Ort,Bauart.Bauart
from Haus,Bauart
where Haus.ID_Bauart=Bauart.ID(+)
b) Du willst eine Liste aller vorhandenen Bauarten (ohne ID)
Code:
select Bauart from Bauart
Gruß
K-H

Hausmarke 10. Apr 2013 06:34

AW: Verknüpften wert anhand der ID ausgeben
 
im grunde löst die SQL abfrage das problem.

Ich hatte gehofft es gibt eine möglichkeit die Daten in Ihrer abhängigkeit im dataset zu belassen.


besten dank für die Hilfe

mkinzler 10. Apr 2013 06:54

AW: Verknüpften wert anhand der ID ausgeben
 
Zitat:

Zitat von Hausmarke (Beitrag 1210926)
im grunde löst die SQL abfrage das problem.

Ich hatte gehofft es gibt eine möglichkeit die Daten in Ihrer abhängigkeit im dataset zu belassen.


besten dank für die Hilfe

Ich versteh nur Bahnhof

Hausmarke 10. Apr 2013 07:17

AW: Verknüpften wert anhand der ID ausgeben
 
bitte entschuldigt wenn ich mich etwas umständlich ausdrücke.
ich bin gerade dabei mir das alles wieder anzueignen, und es ist dann doch lange her, einiges neu und ich verwende evtl. nicht die korrekten begriffe.

im Grunde habe ich eine DB die über eine IBDatabase -> Datasource -> Dataset eingebunden ist.
Nun konnte ich bei meinem simplen Programm zur Adressverwaltung, ein DBgrid und ein paar DBEdits äußerst simple ansprechen und manipulieren, ohne das Daten aus Ihrer Abhängigkeit zueinander gerissen wurden.
Der nächste schritt ist die DB weiter auszuarbeiten und mit Keys zu versehen.

Ich hatte gehofft das ich über Komponenten die beiden Datasets, einmal die Daten die ausgegeben werden inkl. der ID die auf eine andere Tabelle verweist, und die dazu passenden daten der anderen Tabelle, verknüpfen kann.
Sodass beide datasets in Verbindung stehen, und sich das DBEdit o.ä., den passenden Datensatz zur ID selbst holt.

ich hoffe mein anliegen ist nun besser nachvollziehbar.

im prinzip ist es mit einer SQL abfrage auch schnell gelöst. aber da man ja gerade am anfang der lernphase bei weitem keinen überblick über die komponenten und deren möglichkeiten hat, dachte ich, ich frag mal.

Uwe Raabe 10. Apr 2013 08:36

AW: Verknüpften wert anhand der ID ausgeben
 
Zitat:

Zitat von Hausmarke (Beitrag 1210938)
Ich hatte gehofft das ich über Komponenten die beiden Datasets, einmal die Daten die ausgegeben werden inkl. der ID die auf eine andere Tabelle verweist, und die dazu passenden daten der anderen Tabelle, verknüpfen kann.
Sodass beide datasets in Verbindung stehen, und sich das DBEdit o.ä., den passenden Datensatz zur ID selbst holt.

Eigentlich wiederhole ich mich nur ungern, aber Lookup-Felder sind offenbar genau das, was du suchst. Dazu musst du erst alle benötigten Datasets auf dem Form oder Datenmodul platzieren (z.B. Tab_Haus und Tab_Bauart) und in deinem Haupt-Dataset (Tab_Haus) alle Felder statisch anlegen (Doppel-Click auf das Tab_Haus und dann Strg-F). Dann fügst du ein neues Feld hinzu (Strg-N) und wählst bei Feldtyp "Nachschlagen" aus. Schlüsselfeld wäre z.B. BauartID, Datenmenge Tab_Bauart, Schlüssel wäre dann ID und Ergebnisfeld Bauart.

Hausmarke 10. Apr 2013 09:12

AW: Verknüpften wert anhand der ID ausgeben
 
oh, wer lesen kann ist klar im Vorteil.... :oops:
ich hatte beim lesen deiner 1. antwort "lookup-comboBox" assoziiert, womit ich eine ttable Komponente benötigt hätte, welche ich jedoch nicht nutzen möchte und deshalb nach einen anderen weg gesucht habe.

Aber mit den LookUp-Feldern bekomm ich genau die Werte geliefert die ich wollte, danke :thumb:

Uwe Raabe 10. Apr 2013 09:29

AW: Verknüpften wert anhand der ID ausgeben
 
Du kannst die Lookup-Combo auch mit jedem anderen DataSet verwenden. Die Beispiele verwenden halt oft noch die alten BDE-Komponenten.

Hausmarke 11. Apr 2013 14:03

AW: Verknüpften wert anhand der ID ausgeben
 
ich hatte für die LookUpComboBox ein separates Dataset erstellt, und wollte dieses in die LookUpCB einbinden, jedoch kommt immer die Fehlermeldung das eine TTable Komponente benötigt wird.

Wäre interessant zu wissen wie man dies umgehen kann bzw. was ich falsch gemacht habe.


Momentan bin ich mit den LookUp-Feldern ganz zufrieden.

Soweit funktioniert das nun auch mit meinen Ausgabedaten, allerdings suche ich jetzt nach der nächsten Lösung für folgendes Problem:

Wenn ich in der Haupttabelle die ID des FK ändere, wird in der Bezugstabelle bei der vorab genutzten ID, der Wert der Neuen ID abgelegt.

Dadurch habe ich dann 2 unterschiedliche IDs mit den gleichen Werten in meiner Bezugstabelle.

Ich schätze es liegt daran wie ich den Wert übergebe.
Nach der auswahl in der ComboBox übergebe ich diesen wie folgt:
Code:
selectedID := integer(DBComboBox.items.Objects[DBComboBox.ItemIndex]);
Form1.Dataset.fieldbyname('BezugsID').asInteger := selectedID;

Uwe Raabe 11. Apr 2013 15:23

AW: Verknüpften wert anhand der ID ausgeben
 
Sorry, aber aus deinen Ausführungen werde ich nicht ganz schlau. Kannst du vielleicht ein kleines Projekt zusammenstellen, das das Problem zeigt?

Hausmarke 12. Apr 2013 09:22

AW: Verknüpften wert anhand der ID ausgeben
 
das problem stellt sich wie folgt dar:
die Tabellen Vorher

Tab_Haus
  • ID
    1
    2
    3
  • Ort
    Ort1
    Ort2
    Ort3
  • BauartID
    3
    2
    4

Tab_Bauart
  • ID
    1
    2
    3
  • Bauart
    Bauart1
    Bauart2
    Bauart3


Die Tabellen danach
nachdem ich für Tab_Haus.ID "2" die Tab_Haus.BauartID von "2" zu "1" geändert habe

Tab_Haus
  • ID
    1
    2
    3
  • Ort
    Ort1
    Ort2
    Ort3
  • BauartID
    3
    1 <-- ändert ID wie gewünscht
    4

Tab_Bauart
  • ID
    1
    2
    3
  • Bauart
    Bauart1
    Bauart2
    Bauart2 <-- wird geändert, obwohl ich nicht bewusst ins Dataset speicher.

Wie versucht zu erläutern, ändert es mir in der Tab_Bauart den wert der unter der letzten ID
gespeichert ist.

Hausmarke 12. Apr 2013 09:28

AW: Verknüpften wert anhand der ID ausgeben
 
ich konnte das Problem nun dadurch lösen, das ich bei im LookUp-Feld unter "ProviderFlags" den Wert für pfInUpdate auf false gesetzt habe.

Dadurch wird das Feld nicht mehr in die Update Anweisungen miteinbezogen, wodurch auch keine Änderungen an der Tab_Bauart vorgenommen werden.

Danke für die Hilfestellungen :thumb:

Ich werde Versuchen meine nächsten fragen treffender zu formulieren :wink:


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