![]() |
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.... |
Re: Verknüpfung von Tabellen
Zitat:
SQL-Code:
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!
SELECT Kunden.Name,
Kunden.Nummer, Video.Titel FROM Kunden LEFT OUTER JOIN Video ON Video.Kundennummer = Kunden.Nummer |
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 |
Re: Verknüpfung von Tabellen
wie wäre es erstmal mit einem db tutorial?
|
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... |
Re: Verknüpfung von Tabellen
Zitat:
Beipiel qryKunden:
SQL-Code:
SELECT *
FROM Kunden WHERE id = :id
Delphi-Quellcode:
Beispiel für 2 Stufige Subquery der ausgeliehenen Filme:
qryKunden.ParambyName.('Id').AsInteger := fKundenId
qryKunden.Open;
SQL-Code:
Und zum Verbinden
SELECT Filme.Titel,
Ausleih.Datum FROM Ausleih LEFT OUTER JOIN Filme on Filme.Id = Ausleih.FilmId WHERE Ausleih.KundenId = :Id
Delphi-Quellcode:
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).
qryAusleih.DataSource := dsKunden;
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. |
Re: Verknüpfung von Tabellen
Zitat:
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:
Ob ein Kunde ein Medium ausgeliehen hat oder nicht, wird in der Tabelle Medien vermerkt.
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, .... 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. |
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 |
Re: Verknüpfung von Tabellen
Zitat:
|
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??? |
Re: Verknüpfung von Tabellen
indem du in der Where-Clause deiner Query eine Zusatzbedingung hinzufügst.
SQL-Code:
in etwa so... musst deine Joins allerdings an deine Struktur anpassen.
select k.name, v.Filmtitel
from kunden k inner join ausleihe a on a.Kunde=k.ID, videos vinner join ausleihe a on a.Video=v.ID where k.Name = 'Muller' Oder du setzt, nach öffnen der Query in Delphi, einen Filter. Davon würd ich aber prinzipiell abraten, da so erst mal alle Daten zum Client wandern, und dann erst gefiltert werden. Durch das direkte Einbetten in die Query entsteht weniger Datenverkehr, und wird auch weniger Speicher verbraucht. |
Re: Verknüpfung von Tabellen
Zitat:
|
Re: Verknüpfung von Tabellen
wie ich nach zwei sachen gleichzeitig suche ist mir weiß
ich schon, aber ich möchte das ich nach einer sache suche... die ergebnisse dann im grid ausgegeben werden und wenn ich dann zu viele einträge habe das ich die ergebnisse dann nochmal durchsuchen kann... |
Re: Verknüpfung von Tabellen
Also erstmal definierst du, was viel ist und was nicht viel ist. Und dann musst du halt ne neue Query schicken. Nach was du dann da filterst, ist dir überlassen. Ich weiss nicht so recht, ob ich dich richtig verstanden hab.
|
Re: Verknüpfung von Tabellen
Das ist aber doch eine 1:n Beziehung oder? Wenn ich die Kassetet bei mir zu Hause haben, dann kann sie sich auch kein anderer ausleihen. Den Titel wohl schon, aber jede Kassette wird doch eine eindeutige ID haben, sonst kann ich ja nicht zu ordner wo welche Kassette ist.
Zitat:
Deine Kommataste ist funktioniert wohl nur zufällig. Deine Punkttaste ist kaputt. Deine Grammatikprüfung ist kaputt. Eigentlich eine Unverschämtheit so ein Posting. Du setzt uns hier so ein hingerotztes Posting vor und erwartest von, dass wir die Mühe machen es in vernünftiges deutsch zu übersetzten, damit wir es überhaupt erst verstehen können, um dir dann zu helfen. Dir ist deine Zeit zu schade, es vernünftig zu schreiben, aber wir sollen unsere Zeit dafür opfer. Das ist eine Unverschämtheit und ich empfinde es als sehr unhöflich jemanden ein soleche Posting zu zumuten. |
Re: Verknüpfung von Tabellen
Hallo Pindel,
ich verstehe zwar was du willst aber ich habe das Gefühl, dass Du deine DB anfängst von hinten zu erstellen. Solltest Du dir nicht ersteinmal eine klare DB-Struktur schaffen und dann erst mit den Spielerein wie einer Suche anfangen? Man baut doch die DB nicht danach auf was man suchen will sondern welchen Zweck sie erfüllen soll. Ich würde dir 3 Tabellen empfehlen, wie "shmia" das schon beschrieben hat und dann kannst Du dir doch einfach über eine SQL-Abfrage alles selber zusammen basteln. Zitat:
Zitat:
|
Re: Verknüpfung von Tabellen
1. Also, ich denke nun ist es doch an der Zeit mich für mein teilweise
doch sehr schroffes Verhalten zu entschuldigen. Alle Einträge die ich gemacht habe mussten schnell von statten gehen, da ich sie in der Schule getätigt habe und ich bitte deshalb darum meine vielen Rechtschreibfehler zu entschuldigen. 2. Natürlich habe ich mir auch viele Tutorials angesehen, aber so wirklich das Richtige habe ich nicht gefunden. Wenn jemand eines kennt wäre ich natürlich dankbar. Das war auch nicht so gemeint das ich das nicht nötig hätte, ich war einfach sauer weil das alles nicht so funktioniert hat wie ich wollte. 3. Ich schreibe nächste Woche ABI über dieses Thema und unser Lehrer hat leider überhaupt keine Ahnung und gibt einfach Aufgaben, die er selber nie lösen könnte. Das grobe Programm steht jetzt schon (dank eurer Hilfe). Ich habe drei Tabellen und kann auch sehen wer welche Filme ausgeliehen hat und welcher Film von wem ausgeliehen wurde. Nun habe ich halt nur Probleme mit der Suche. Wir sollen eine verknüpfte Suche realisieren, bei der wir nach alles suchen können und auch nach mehreren Kriterien gleichzeitig. Da habe ich mir gedacht wenn ich mit einem Query und SELECT suche und die Ergebnisse dann wieder durchsuchen kann, dann kann ich ja im Prinzip nach allem suchen und nach mehreren Sachen. |
Re: Verknüpfung von Tabellen
Zitat:
Deshalb ist es ratsam sich auf bestimmte (Ab-)Fragen festzulegen. Als da wären: - Zeige *alle* ausgeliehenen Medien mit Kundendaten - Zeige alle ausgeliehenen Medien für einen best. Kunden Startpunkt ist ein ausgewählter Datensatz im Kundenstamm - Zeige alle nicht ausgeliehenen Medien für ein bestimmtes Video (Kunde interessiert sich z.B. für Ocean's Twelve; man möchte nun wissen, ob noch ein Medium im Lager ist) Startpunkt ist ein ausgewählter Datensatz in Tabelle Video Und immer schön die Begriffe Suchen und Filtern unterscheiden. Gefiltert wird mit einer WHERE Bedingung in der SELECT - Anweisung. Gesucht wird mit [TDataset.]Locate. |
Re: Verknüpfung von Tabellen
Das das schwer zu realisieren ist, ist ja genau mein Problem, aber so ist
ja leider die Aufgabenstellung. |
Re: Verknüpfung von Tabellen
Zitat:
|
Re: Verknüpfung von Tabellen
Hallo Pindel,
Du kannst eine ComboBox nehmen, wo der Benutzer sich die relevanten Felder aussuchen kann. Dann hast Du noch ein Cbox wo eben nur größer, gleich, kleiner usw. gewählt werden können und zum Schluß nimmst Du noch ein Edit-Feld wo dann Benutzerspezifische Suchbegriffe eingegeben werden können. Dann noch ein Button übernehmen, über diesen werden die Suchabfragen in ein StringGrid oder so geschrieben. Der Benutzer kann somit in einer Suchabfrage mehrere Suchbegriffe abfragen. Zu guter letzt, nur noch einen Button mit Suchen und dann kannste Du dir das Ergebnis in einem DBGrid anzeigen lassen. Du kannst dann das StringGrid durchlaufen und die kriterien in dein Abfrage übernehmen. Ich habe das zwar so noch nie gemacht aber es könnte so gehen.
SQL-Code:
Wie gesagt ich habe das auch noch nie so realisiert aber es könnte so gehen, glaub ich.
SQL.clear;
SQL.Add('Select * From Table WHERE') /*erste Zeile aus dem Grid o.ä.*/ SQL.Add('Name Like '+Edit1.text+'') /*zweite Zeile*/ SQL.ADD('ausgeliehen > '+Edit1.text+'') /*alle Zeilen abgearbeitet*/ SQL.Open; |
Re: Verknüpfung von Tabellen
So geht das auch, habe das bisher auch so gemacht, ich dachte nur das es vieleicht einfacher
wäre, wenn ich die Ergebnisse nochmal durchsuchen könnte. Das muss doch auch irgendwie gehen. Trotzdem schonmal DANKE. |
Re: Verknüpfung von Tabellen
Hallo,
das geht sicherlich, nur must dann ja alle Ergebnisse merken und in der neuen Abfrage mit einbauen. Wenn Du das so machen willst, dann must du im ersten Arbeitsschritt das Suchergebniss durchsuchen und dir die ID's merken, da diese aber aus verschieden Tabellen kommen, dürfte das ein zu großer Aufwand werden. Wenn Du die Abfrage neu startest wird eh die Ergebnismenge der alten Abfrage verworfen und alle Daten neu geholt, daher hast Du - denke ich - eigentlich keinen Vorteil davon. Nur noch mehr schreibarbeit. :wink: Oder lautet die Aufgabenstellung so, dass Du das bereits bestehende Ergebnis nochmals durchsuchen sollst? |
Re: Verknüpfung von Tabellen
Nein, das nicht, ich soll nur nach mehreren Sachen gleiczeitig suchen können.
Die Anzahl der Suchkriterien soll allerdings auch frei wählbar sein. Also mal halt nur nach einer Sache und mal nach allen. |
Re: Verknüpfung von Tabellen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz