Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verknüpfung von Tabellen (https://www.delphipraxis.net/41684-verknuepfung-von-tabellen.html)

Pindel 7. Mär 2005 09:51

Datenbank: Paradox • Version: 7 • Zugriff über: TQuery

Verknüpfung von Tabellen
 
Hallo...

Ich habe ein Problem und hoffe ihr könnt mir helfen...
Ich habe zwei Tabellen zum Beispiel Videos und Kunden...
Diese Tabellen möchte ich jetzt m:n Verknüpfen, wie machen ich das...
Die Tabellen sind vom Typ TTable. Und wenn die dann Verknüpft sind möchte ich
die durchsuchen...
Wie mache ich das???

Danke schonmal im vorraus....

Union 7. Mär 2005 10:01

Re: Verknüpfung von Tabellen
 
Zitat:

Zitat von Pindel
Hallo...

Ich habe ein Problem und hoffe ihr könnt mir helfen...
Ich habe zwei Tabellen zum Beispiel Videos und Kunden...
Diese Tabellen möchte ich jetzt m:n Verknüpfen, wie machen ich das...
Die Tabellen sind vom Typ TTable. Und wenn die dann Verknüpft sind möchte ich
die durchsuchen...
Wie mache ich das???

Danke schonmal im vorraus....

Wenn Du TQuery verwendest, setzt Du SQL ein um eine verknüpfte Ansicht der Tabelleninhalte zu erhalten. Beispiel:
SQL-Code:
SELECT Kunden.Name,
       Kunden.Nummer,
       Video.Titel
FROM Kunden
LEFT OUTER JOIN Video ON Video.Kundennummer = Kunden.Nummer
Besser wäre aber in diesem Fall noch eine dritte Tabelle, in der steht, welcher Kunde welches Video wann ausgeliehen hat. Sonst hast Du bei einer m:n Verknüpfung ja sowohl die Videodaten als auch die Kundendaten doppelt!

Pindel 8. Mär 2005 17:23

Re: Verknüpfung von Tabellen
 
Habe das noch nicht ganz verstanden....
Ich habe in einer Tabelle die Kunden und möchte in einer
Anderen die Videos haben...
nun möchte ich wenn ein Kunde mehrere Videos ausleiht... das ich das sehen kann welche er ausleiht...
und wenn von einem film mehrere weg sind das ich sehen kann wer die hat...
außerdem komme ich nicht so ganz mit der suche klar...
ich möchte gerne nach alles suchen können und auch nach mehreren kriterien...

danke schonmal

ibp 8. Mär 2005 17:33

Re: Verknüpfung von Tabellen
 
wie wäre es erstmal mit einem db tutorial?

Pindel 8. Mär 2005 17:43

Re: Verknüpfung von Tabellen
 
Ich denke das habe ich nicht nötig...
mir ist schon klar was er meint, aber ich weiss nicht genau wie ich das vernünftig hinbekomme
wenn ich mich an die normalformen halten muss...
ich kann zum beispiel eine dritte tabelle machn in der ich die ID der videos-tabelle und die
id der kunden-tabelle mit einander verknüpfe, aber ich weiss nicht wie ich das dann vernünftig anzeigen
soll...
wenn ich zum beipiel auf einen kunden klicke, das ich dann sehe welche filme der ausgeliehen hat...
probleme habe ich außerdem mit der suche...

Union 8. Mär 2005 18:02

Re: Verknüpfung von Tabellen
 
Zitat:

Zitat von Pindel
Ich denke das habe ich nicht nötig...
mir ist schon klar was er meint, aber ich weiss nicht genau wie ich das vernünftig hinbekomme
wenn ich mich an die normalformen halten muss...
ich kann zum beispiel eine dritte tabelle machn in der ich die ID der videos-tabelle und die
id der kunden-tabelle mit einander verknüpfe, aber ich weiss nicht wie ich das dann vernünftig anzeigen
soll...
wenn ich zum beipiel auf einen kunden klicke, das ich dann sehe welche filme der ausgeliehen hat...
probleme habe ich außerdem mit der suche...

Du könntest z.B. einen Kundendialog machen, wo Name Adresse usw. drinstehen. Und dort fügst Du ein DbGrid ein, in dem die von diesem Kunden ausgeliehenen Filme mit Ausleihdatum stehen. Dazu musst Du von der untergeordneten TQuery die Eigenschaft DataSource setzen und kannst dann auf die Felder als automatische Parameter zugreifen.

Beipiel qryKunden:

SQL-Code:
SELECT * 
FROM Kunden
WHERE id = :id
Delphi-Quellcode:
qryKunden.ParambyName.('Id').AsInteger := fKundenId
qryKunden.Open;
Beispiel für 2 Stufige Subquery der ausgeliehenen Filme:

SQL-Code:
SELECT Filme.Titel,
       Ausleih.Datum
FROM Ausleih
LEFT OUTER JOIN Filme on Filme.Id = Ausleih.FilmId
WHERE Ausleih.KundenId = :Id
Und zum Verbinden
Delphi-Quellcode:
qryAusleih.DataSource := dsKunden;
Jedesmal wenn Du den Tabellenzeiger in qryKunden (dsKunden) bewegst (Next, Prior etc.) prüft dann qryAusleih über eine Notification die DataSource und aktualisiert sich selbst (d.h. macht Close, füllt den Parameter :id mit dem GLEICHNAMIGEN Wert aus qryKunden und wieder Open).

Analog kannst Du das auch umgekehrt bei den Filmen machen, also wer hat welchen Film ausgeliehen. In den jweiligen Grids könntest Du auch gleich Bearbeitungsoptionen mit reinnehmen, Neu, Löschen usw. dann kannst Du von den Kunden gleich zum Verleih springen oder vom Film einen Kunden entfernen.

shmia 8. Mär 2005 18:07

Re: Verknüpfung von Tabellen
 
Zitat:

Zitat von Pindel
Ich denke das habe ich nicht nötig...

Hey, man kann immer noch was dazu lernen...

Also bei einer Videothek gibt es ja möglicherweise mehrere Exemplare vom gleichen Film.
Wenn man schlau ist, hat jedes Medium einen eindeutigen Barcode.
Also gibt es nun 3 Tabellen:
Kunden, Videos und Medien.
Die Tabelle Medien hat folgende Felder:
Code:
IdMedia - der eindeutige Schlüssel (=der Barcode)
IdVideo - Verweis auf die Filmdaten
Quality - 1=Neuwertig 6=kaputt
UseCount - Anzahl der Ausleihvorgänge
IdKunde - Der Kunde, der den Film hat oder (NULL)
Mediatype- 0=VHS, 1=DVD, 2=SuperDVD, 3= AudioCD, ....
Ob ein Kunde ein Medium ausgeliehen hat oder nicht, wird in der Tabelle Medien vermerkt.
Denn ein physikalischer Gegenstand kann entweder bei einem Kunden sein oder im Laden.

Zusätzlich sollte man eine Historytabelle führen, mit der man sämtliche Ausleih- und Rückgabevorgänge nachvollziehen kann.
In der Historytabelle steht IdKunde, IdMedia, Vorgang (1=Ausleih, 2=Rück), DatumUhrzeit, Verkaeufer, ...

Das sollte dir doch mal genügend Anregungen für das DB Design geben.

Pindel 8. Mär 2005 18:08

Re: Verknüpfung von Tabellen
 
sauber, danke...genau sowas habe ich gesucht...
und wie funktioniert das mit der suche??
die aufgabe ist das ich nach allem suchen kann und auch nach mehreren kriterien auf einmal...
danke

Union 8. Mär 2005 18:13

Re: Verknüpfung von Tabellen
 
Zitat:

Zitat von Pindel
sauber, danke...genau sowas habe ich gesucht...
und wie funktioniert das mit der suche??
die aufgabe ist das ich nach allem suchen kann und auch nach mehreren kriterien auf einmal...
danke

Suchen kannst Du entweder über Locate, Findkey oder mit SELECT. Locate stellt sich den passenden Index selber ein, Findkey erwartet dass der richtige bereits eingestellt ist (aber dafür auch 20 x schneller) und mit SELECT (evtl. verknüpft mit LIKE) bist Du am flexibelsten.

Pindel 9. Mär 2005 09:00

Re: Verknüpfung von Tabellen
 
Wenn ich mit einem Query und select nach sachen
gesucht habe, wie kann ich die ergebnisse dann nochmal nach
anderen sachen durchsuchen???


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.
Seite 1 von 3  1 23      

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