![]() |
Datenbank: Access • Zugriff über: ADO
Datenbank Tabelle ID-Veknüpfung
Hallo Liebe Freunde :D,
also ich habe mal eine kurze Frage. Hier mein Anliegen. Also ich habe eine DB mit einer Tabelle NAMEN und eine Tabelle TIERE. In der Tiertabelle sind einige Haustiere ausgelistet. Die Name soll aber nicht alle Haustieren zugeordnet werden, sonder nur bestimmte. Kann mann die Tabellen irgenwie miteinander Verknüpfen damit ich folgende Ziel erreichen kann? Mein Ziel ist es z.B. wenn ich in Delphi via einer ComboBox einen Namen aussuche, dass in einer Listbox alle Tiere, die er besitz anzeigt. |
Re: Datenbank Tabelle ID-Veknüpfung
Sind das jetzt konkrete Tiere oder nur Tiergattungen? Ich habe das Modell noch nicht ganz verstanden.
|
Re: Datenbank Tabelle ID-Veknüpfung
Warte ich erkäre es mal anders:
Also eine Tabelle LEHRER mit Lehrernamen und eine Tabelle FÄCHER mit allen Fächern dies es so gibt. Wenn ich jetzt einen Lehrer in der Combobox auswähle, sollen in der Listbox die Fächer erscheinen, die der Lehre Unterrichtet. Z.B. Lehrer Müller unterrichtet Sport und Mathe, also erscheint dann in der Listbox diese beiden Fächer. |
Re: Datenbank Tabelle ID-Veknüpfung
Das ist IMHO eine m:n-Beziehung, dafür brauchst Du eine Zwischentabelle.
Code:
Über Joins kannst Du dann die Zugehörigkeiten abfragen.
Lehrer:
ID Name usw. Faecher: ID Name usw. Lehrer2Faecher: LehrerID //Fremdschlüssel auf die ID der Lehrertabelle FaecherID //Fremdschlüssel auf die ID der Fächertabelle evtl. weitere Felder |
Re: Datenbank Tabelle ID-Veknüpfung
Cool Danke :D
Und wie müsste dann die SQL Abfrage lauten um das obige ausführen zu können? |
Re: Datenbank Tabelle ID-Veknüpfung
SQL-Code:
Ich würde allerdings die ID der Lehrer in der ComboBox hinterlegen (ComboBox.Items.Objects) und diese dann in der WHERE-Klausel verwenden, um die Eindeutigkeit zu gewährleisten.
SELECT Faecher.Name
FROM Lehrer JOIN Lehrer2Faecher ON Lehrer2Faecher.LehrerId = Lehrer.ID JOIN Faecher ON Faecher.ID = Lehrer2Faecher.FaecherID WHERE Lehrer.Name = 'Müller' |
Re: Datenbank Tabelle ID-Veknüpfung
Oder eine LookUp-Komponente verwenden
|
Re: Datenbank Tabelle ID-Veknüpfung
Oder so (ich benutz die Dinger nie ;))
|
Re: Datenbank Tabelle ID-Veknüpfung
Sind eigentlich recht geschickt
|
Re: Datenbank Tabelle ID-Veknüpfung
Zitat:
Pfui! |
Re: Datenbank Tabelle ID-Veknüpfung
Zitat:
|
Re: Datenbank Tabelle ID-Veknüpfung
Zitat:
Zitat:
|
Re: Datenbank Tabelle ID-Veknüpfung
Also hiernochma mein Quelltext:
Delphi-Quellcode:
ADOQuery1.SQL.Text := 'SELECT `Fach.Name` FROM `Lehrkraft` JOIN LehrerFach ON LehrerFach.Lehrer_ID = Lehrer_ID JOIN `Fach` ON `Fach.Fach_ID` = `LehrerFach.Fach_ID` WHERE `Lehrkraft.Name` = ''' + Fach_cb.Text + ''';';
|
Re: Datenbank Tabelle ID-Veknüpfung
Delphi-Quellcode:
ADOQuery1.SQL.Text := 'SELECT Fach.Name FROM Lehrkraft JOIN LehrerFach ON LehrerFach.Lehrer_ID = Lehrkraft.Lehrer_ID JOIN Fach ON Fach.Fach_ID = LehrerFach.Fach_ID WHERE Lehrkraft.Name = :name';
ADOQuery1.Parameters.ParamByName('name').Value := Fach_cb.Text; |
Re: Datenbank Tabelle ID-Veknüpfung
Hmm... die Fehlermeldung bleint die selbe.
Hier mein ganzer QuelCode:
Delphi-Quellcode:
procedure Tfach.FormShow(Sender: TObject);
begin LoadFach; end; procedure Tfach.LoadFach; begin /////////////////////////////////////////////////////////////////////////// /// DB Vorlage öffnen ADOQuery1.SQL.Text := 'SELECT Fach.Name FROM Lehrkraft JOIN LehrerFach ON LehrerFach.Lehrer_ID = Lehrkraft.Lehrer_ID JOIN Fach ON Fach.Fach_ID = LehrerFach.Fach_ID WHERE Lehrkraft.Name = :name'; ADOQuery1.Parameters.ParamByName('name').Value := Fach_cb.Text; ADOQuery1.Open; /////////////////////////////////////////////////////////////////////////// /// Combobox leeren fach_cb.Clear; /////////////////////////////////////////////////////////////////////////// /// while not ADOQuery1.EOF do begin fach_cb.Items.Add(ADOQuery1.FieldByName('Fach').Value); ADOQuery1.Next; end; end; |
Re: Datenbank Tabelle ID-Veknüpfung
Evtl. fehlen da Klammern, Access hat doch AFAIK so eine kranke Syntax. Lass Dir das Statement doch einmal von Access selbst erstellen.
|
Re: Datenbank Tabelle ID-Veknüpfung
Wie kann ich das machen?
|
Re: Datenbank Tabelle ID-Veknüpfung
Da gibt es doch soweit mir bekannt ist einen Abfragegenerator.
|
Re: Datenbank Tabelle ID-Veknüpfung
Hallo,
wo wird denn diese Fach_cb gefüllt ? Du benutzt sie ja als Parameter schon in FormShow. Pack den Aufruf doch mal in ein OnButtonClick zum Test. Benutz mal F5/F7/F8. Heiko |
Re: Datenbank Tabelle ID-Veknüpfung
Den Test habe ich auch schon gemacht. Daran liegt es nicht.
|
Re: Datenbank Tabelle ID-Veknüpfung
Dann drehen wir die Tabellenreihenfolge einmal um.
SQL-Code:
Nimmt Access das an?
SELECT
Fach.Name FROM Fach JOIN LehrerFach ON Fach.Fach_ID = LehrerFach.Fach_ID JOIN Lehrkraft ON LehrerFach.Lehrer_ID = Lehrkraft.Lehrer_ID WHERE Lehrkraft.Name='Meier' |
Re: Datenbank Tabelle ID-Veknüpfung
leider nicht auch noch mit klammer bei den ON();
|
Re: Datenbank Tabelle ID-Veknüpfung
also die fehlemeldung ist jetzt weg.
aber da kommt noch eine ander, kann mir da jemand weiterhelfen?
Delphi-Quellcode:
FEHLERMELDUNG:
'SELECT Fach.Name FROM Lehrkraft INNER JOIN LehrerFach ON LehrerFach.Lehrer_ID = Lehrkraft.Lehrer_ID AND INNER JOIN Fach ON Fach.Fach_ID = LehrerFach.Fach_ID WHERE Lehrkraft.Name = :name';
ADOQuery1.Parameters.ParamByName('name').Value := excuse.lehrkraft_klausur_cb.Text; Zitat:
|
Re: Datenbank Tabelle ID-Veknüpfung
Lass das AND weg
SQL-Code:
SELECT
Fach.Name FROM Lehrkraft INNER JOIN LehrerFach ON LehrerFach.Lehrer_ID = Lehrkraft.Lehrer_ID INNER JOIN Fach ON Fach.Fach_ID = LehrerFach.Fach_ID WHERE Lehrkraft.Name = :name; |
Re: Datenbank Tabelle ID-Veknüpfung
Dann erhalte ich das:
Zitat:
|
Re: Datenbank Tabelle ID-Veknüpfung
Schient ein Problem von Access zu sein. Den die Abfrare an sich ist so ok.
|
Re: Datenbank Tabelle ID-Veknüpfung
Zitat:
Muß es wirklich Access sein oder ist eine Umstellung auf ein anderes DBMS möglich ? :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 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