Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank Tabelle ID-Veknüpfung (https://www.delphipraxis.net/133992-datenbank-tabelle-id-veknuepfung.html)

thiagojonas 13. Mai 2009 14:08

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.

DeddyH 13. Mai 2009 14:11

Re: Datenbank Tabelle ID-Veknüpfung
 
Sind das jetzt konkrete Tiere oder nur Tiergattungen? Ich habe das Modell noch nicht ganz verstanden.

thiagojonas 13. Mai 2009 14:27

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.

DeddyH 13. Mai 2009 14:38

Re: Datenbank Tabelle ID-Veknüpfung
 
Das ist IMHO eine m:n-Beziehung, dafür brauchst Du eine Zwischentabelle.
Code:
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
Über Joins kannst Du dann die Zugehörigkeiten abfragen.

thiagojonas 13. Mai 2009 14:51

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?

DeddyH 13. Mai 2009 14:55

Re: Datenbank Tabelle ID-Veknüpfung
 
SQL-Code:
SELECT Faecher.Name
FROM Lehrer
JOIN Lehrer2Faecher ON Lehrer2Faecher.LehrerId = Lehrer.ID
JOIN Faecher ON Faecher.ID = Lehrer2Faecher.FaecherID
WHERE Lehrer.Name = 'Müller'
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.

mkinzler 13. Mai 2009 15:10

Re: Datenbank Tabelle ID-Veknüpfung
 
Oder eine LookUp-Komponente verwenden

DeddyH 13. Mai 2009 15:11

Re: Datenbank Tabelle ID-Veknüpfung
 
Oder so (ich benutz die Dinger nie ;))

mkinzler 13. Mai 2009 15:13

Re: Datenbank Tabelle ID-Veknüpfung
 
Sind eigentlich recht geschickt

Blup 14. Mai 2009 06:57

Re: Datenbank Tabelle ID-Veknüpfung
 
Zitat:

Zitat von mkinzler
Oder eine LookUp-Komponente verwenden

Oberfläche direkt mit Datenbankkomponenten verbinden :roll:
Pfui!

mkinzler 14. Mai 2009 07:00

Re: Datenbank Tabelle ID-Veknüpfung
 
Zitat:

Zitat von Blup
Zitat:

Zitat von mkinzler
Oder eine LookUp-Komponente verwenden

Oberfläche direkt mit Datenbankkomponenten verbinden :roll:
Pfui!

So grundsätzlich würde ich das nicht ablehnen.

thiagojonas 20. Mai 2009 14:39

Re: Datenbank Tabelle ID-Veknüpfung
 
Zitat:

SELECT Faecher.Name
FROM Lehrer
JOIN Lehrer2Faecher ON Lehrer2Faecher.LehrerId = Lehrer.ID
JOIN Faecher ON Faecher.ID = Lehrer2Faecher.FaecherID
WHERE Lehrer.Name = 'Müller'
Erhalte hierbei eine Fehlermdeldung:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Valho_Student.exe ist eine Exception der Klasse EOleException mit der Meldung 'Syntaxfehler in FROM-Klausel' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

thiagojonas 20. Mai 2009 14:44

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 + ''';';

DeddyH 20. Mai 2009 14:49

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;

thiagojonas 20. Mai 2009 15:51

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;

DeddyH 20. Mai 2009 15:55

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.

thiagojonas 20. Mai 2009 15:57

Re: Datenbank Tabelle ID-Veknüpfung
 
Wie kann ich das machen?

DeddyH 20. Mai 2009 15:58

Re: Datenbank Tabelle ID-Veknüpfung
 
Da gibt es doch soweit mir bekannt ist einen Abfragegenerator.

hoika 20. Mai 2009 17:53

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

thiagojonas 20. Mai 2009 18:54

Re: Datenbank Tabelle ID-Veknüpfung
 
Den Test habe ich auch schon gemacht. Daran liegt es nicht.

DeddyH 20. Mai 2009 18:58

Re: Datenbank Tabelle ID-Veknüpfung
 
Dann drehen wir die Tabellenreihenfolge einmal um.
SQL-Code:
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'
Nimmt Access das an?

thiagojonas 20. Mai 2009 19:37

Re: Datenbank Tabelle ID-Veknüpfung
 
leider nicht auch noch mit klammer bei den ON();

thiagojonas 31. Mai 2009 18:00

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:
'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;
FEHLERMELDUNG:
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Valho_Student.exe ist eine Exception der Klasse EOleException mit der Meldung 'Syntaxfehler (fehlender Operator) in Abfrageausdruck ''' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

mkinzler 31. Mai 2009 18:05

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;

thiagojonas 31. Mai 2009 19:00

Re: Datenbank Tabelle ID-Veknüpfung
 
Dann erhalte ich das:
Zitat:

---------------------------
Valho_student
---------------------------
Syntaxfehler (fehlender Operator) in Abfrageausdruck 'LehrerFach.Lehrer_ID = Lehrkraft.Lehrer_ID INNER JOIN Fach ON Fach.Fach_ID = LehrerFach.Fach_ID'
---------------------------
OK
---------------------------

mkinzler 31. Mai 2009 19:05

Re: Datenbank Tabelle ID-Veknüpfung
 
Schient ein Problem von Access zu sein. Den die Abfrare an sich ist so ok.

haentschman 31. Mai 2009 19:28

Re: Datenbank Tabelle ID-Veknüpfung
 
Zitat:

Schient ein Problem von Access zu sein.
...sollte man als Textbaustein ablegen so oft wie ich das lese. :gruebel:

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