Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Interbase 2 Tabellen verknüpfen über TIBTable (JOIN) (https://www.delphipraxis.net/74362-interbase-2-tabellen-verknuepfen-ueber-tibtable-join.html)

spoona 1. Aug 2006 22:48

Datenbank: Interbase • Version: 6.0 • Zugriff über: Interbase

Interbase 2 Tabellen verknüpfen über TIBTable (JOIN)
 
Hallo,

ich weiß gerade leider nicht wo genau ich nach suchen soll und habe leider auch nichts gefunden.
Ich habe eigentlich ein ganz einfaches Problem:

1.Ich habe eine Tabelle "Adresse", in der eine Postleitzahl anzugeben ist bzw. gepflegt wird.
Diese Postleitzahl ist als ID zu einer Tabelle "Postleitzahl" referenziert.
Über ein DBEdit-feld lese ich den Wert der Postleitzahl aus Adresse aus, jetzt will ich aber über diese Postleitzahl einen Join zu der anderen Tabelle "Postleitzahl" machen, damit ich die zugehörige Stadt und Land bekomme der in Postleitzahl gepflegt ist und natürlich nicht in Adresse.
Ich weiß gerade leider nicht wie ich das mit den Interbase bzw. TibTable Komponenetn hinbekommen soll, ohne SQL. Es müssen wohl irgendwelche Einstellungen getätigt werden, die ich leider nicht weiß.
SQL wäre soetwas:
select Stadt
from Adresse, Postleitzahl
where Adresse.ID=11111 and Adresse.PostCode=Postleitzahl.PostCode
Ergebnis wäre dann z.B. Hamburg

Vielen Dank für Eure Hilfe
Gruß Spoona

Hansa 1. Aug 2006 23:27

Re: Interbase 2 Tabellen verknüpfen über TIBTable (JOIN)
 
Zitat:

Zitat von spoona
1.Ich habe eine Tabelle "Adresse", in der eine Postleitzahl anzugeben ist bzw. gepflegt wird. Diese Postleitzahl ist als ID zu einer Tabelle "Postleitzahl" referenziert.

Zuerst mal : Ist die ID von der PLZ entkoppelt oder nicht ? Das heißt : steht in dem Adresse-Dataset eine interne ID oder im Klartext die PLZ ? Im letzteren Fall ist das Prinzip wohl eher unklar. 8)

Zitat:

Zitat von spoona
hinbekommen soll, ohne SQL.

Interbase ohne SQL ? -> vergessen.

Dann noch IB 6.0. :shock: Das ist tot. IBTable ? Ist das nicht aus der noch toteren BDE ? :P

mkinzler 2. Aug 2006 05:49

Re: Interbase 2 Tabellen verknüpfen über TIBTable (JOIN)
 
Zitat:

Zuerst mal : Ist die ID von der PLZ entkoppelt oder nicht ? Das heißt : steht in dem Adresse-Dataset eine interne ID oder im Klartext die PLZ ? Im letzteren Fall ist das Prinzip wohl eher unklar. Cool
Ich bin zwar auch ein Befürworter von künstlichen Schlüsseln aber auch die Verwendung von natürlichen Schlüsseln ( hier die PLZ) ist möglich. Ich würde aber auch IDs verwenden.
Zitat:

Ist das nicht aus der noch toteren BDE ? Razz
Nein IBX.
Ich stimme Hansa vollständig zu, daß die an die BDE angelegte IBTable-Komponente, welche die eigentliche SQL-Ebene versteckt (Kapselung von
SQL-Code:
Select * from <Tabellennamen>;
) nicht mehr verwendet werden sollte.
Nimm eine TIBQuery und nimm die SQL-Abfrage.

Lemmy 2. Aug 2006 06:11

Re: Interbase 2 Tabellen verknüpfen über TIBTable (JOIN)
 
Hi,

Zitat:

Zitat von mkinzler
Nimm eine TIBQuery und nimm die SQL-Abfrage.

lt. Jeff Overcash (Programmierer von IBX) ist selbst die TIBQuery nur aus kompatibilitätsgründen vorhanden uns sollte gegen eine TIBSQL oder TIBDataSet getauscht werden.

Lemmy

spoona 2. Aug 2006 08:01

Re: Interbase 2 Tabellen verknüpfen über TIBTable (JOIN)
 
Hallo,

ja das Ding ist wohl leider etwas veraltet, aber ich habe die jetzt so fest in meinem Programm verankert, dass ich keine Zeit mehr habe diese jetzt alle umzubauen. Meini UNI will eine Abgabe :-)

Also indem Fall wäre die ID in der Adress Dataset auch die PLZ.
Habe hier keinen künstlichen Schlüssel verwendet.
Vielleicht kann mir jemand sagen, wie ich das ganze mit TIBTable und TDataSource umsetze.
Das wäre echt super

Vielen DAnk Gruß Spoona

Hansa 2. Aug 2006 10:43

Re: Interbase 2 Tabellen verknüpfen über TIBTable (JOIN)
 
Vorab : es dürfte egal sein, wann und wo und ob Du das da abgibst oder nicht. Du hast viel zu wenig verstanden und wenns diesmal gut geht, dann spätestens beim nächsten mal nicht mehr. :wall:

Zitat:

Zitat von spoona
Also indem Fall wäre die ID in der Adress Dataset auch die PLZ.

Was ist wohl die ID ? Die steht für "Identifikation" Und welcher Datensatz soll nun anhand der PLZ identifiziert werden ? Das verstehe wer will. "künstliche Schlüssel", was soll das sein ? Das Prinzip ist ganz einfach : jeder Datensatz erhält zunächst mal eine ID. Dadurch kann er eindeutig identifiziert werden. Man nimmt dafür aber eben kein normales Datensatzfeld, denn das könnte sich ja ändern. Denn dann ginge es los : ist das nicht schon vorhanden usw. Man läßt auch keinen Programmbenutzer an die ID dran und zeigt sie ihm nicht mal. Verknüpfungen zwischen den Tabellen sollten dann nur über die IDs gemacht werden. Du kannst dann alle Felder ändern und jede Ausgabe würde noch dasselbe Ergebnis bringen wie vor der Änderung, zumindest was die Datenmenge betrifft.

spoona 2. Aug 2006 11:20

Re: Interbase 2 Tabellen verknüpfen über TIBTable (JOIN)
 
Hallo

Zitat:

Vorab : es dürfte egal sein, wann und wo und ob Du das da abgibst oder nicht. Du hast viel zu wenig verstanden und wenns diesmal gut geht, dann spätestens beim nächsten mal nicht mehr.
NEIN, gerade ist geht es nur darum dass es funktioniert, ich glaube nicht dass du in der Situation bist es richtig beurteilen zu können. Für das nächste Mal würde ich garantiert anders an die Sache heran gehen


Danke für die Erklärung ID und künstlicher Schlüssel! Ich denke ich bekomme das gerade noch hin :-)

Über diese ID in der Adresstabelle würde diese ID auch NICHT den Datensatz eindeutig referenzieren. Es geht hier lediglich um eine Fremdschlüsselbeziehung zu Postleitzahl, die ich entweder über eine ID abbilde, die in der Tabelle Postleitzahl drin ist oder die PLZ als Fremdschküsselreferenzierung nehme. Aber das ist hier einfach nicht meine Frage. Ich denke ich bin im Stande ein normalisiertes Datenmodel aufzustellen. Also wenn du keine Antwort zu meiner Farge hast, dann brauche ich auch deine Kommentare nicht.

Ich brauche eine richtige Antwort auf meine Frage.
1) Ich versuche es richtig über die TIBTable und DataSource Komponente hinzubekommen
2) Wenn ich die DataSet-Komponente einbaue, hätte ich eher Angst noch einige Stunden damit zu verbringen meine Anwendung zum Laufen zu bringen, wenn es einfach ist wäre es natürlich super!!!!

Gruß Spoona

mikhal 2. Aug 2006 12:20

Re: Interbase 2 Tabellen verknüpfen über TIBTable (JOIN)
 
Haben die TIbTable keine Properties Filtered und Filter? Die Eigenschaft Filter wäre eigentlich genau die Eigenschaft, in der du die Where-Klausel unterbringen könntest.

Grüße
Mikhal

Hansa 2. Aug 2006 12:21

Re: Interbase 2 Tabellen verknüpfen über TIBTable (JOIN)
 
Zitat:

Zitat von spoona
Es müssen wohl irgendwelche Einstellungen getätigt werden, die ich leider nicht weiß.
SQL wäre soetwas:

Delphi-Quellcode:
select Stadt
from Adresse, Postleitzahl
where Adresse.ID=11111 and Adresse.PostCode=Postleitzahl.PostCode

Aber bitte ohne SQL, was ? Und wehe einer sagt einem Studenten auch noch, daß er was falsch angeht. 3 Leute sagen Dir, du sollst die TIBtable wegschmeißen und das TIBQuery gleich mit. Warum wird das denn nicht mal versucht ?

Also gut, ich schreibe die 3 Zeilen (Prinzip) selber :

Delphi-Quellcode:
DS.Close;
DS.SelectSQL.Text := 'select Stadt from Adresse where Adresse.ID=11111';
DS.Open;
DS = Tdataset-Nachfahre. Hier wohl TIBDataset. Das liefert dann die Stadt der Adresse, die die ID 11111 hat. Wo soll da jetzt die PLZ ins Spiel kommen ? Da das Select so wohl auch nicht gewünscht ist empfehle ich, dieses zunächst in IBExpert zu testen. Ist es richtig, dann so in das Delphi-Programm einbauen. 8)

P.S.: Das bezieht sich auf 2) in #7. Auf 1) gehe ich nicht erst ein. Der Datasource muß lediglich das Dataset zugeordnet werden. Hat das DBGrid diese Datasource, dann stehen die Daten schnell drin !

spoona 7. Aug 2006 10:15

Re: Interbase 2 Tabellen verknüpfen über TIBTable (JOIN)
 
Hallo,

also um diesen Thread zu Ende zu bringen, habe ich eine schnelle Lösung gefunden.
Das Stichwort lautet Lookup:
Darüber kann ich ein Join realisieren, was mir in meiner Situation erstmal geholfen hat.
Vielen Dank für Eure Hilfe, zukünftigt werde ich nur noch mit den Querys arbeiten :-)

Gruß Spoona


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