Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO / DBGrid / Query / mehrere Tabellen (https://www.delphipraxis.net/116791-ado-dbgrid-query-mehrere-tabellen.html)

tschinkes 6. Jul 2008 18:35

Datenbank: Access • Zugriff über: ADO

ADO / DBGrid / Query / mehrere Tabellen
 
Ich hoffe die Überschrift ist nicht zu überladen :cheer:

Zu meinem Problem, ich habe sechs Tabellen in meiner Datenbank (Access), eine ist die Mastertabelle, die durch ADOQuery mit hilfe von Inner Joins verknüpft ist mit den anderen Tabellen, bis auf eine Tabelle.
Also MasterTabelle->Join->4weitereTabellen
Diese Daten werden dann in einem DBGrid angezeigt. Jetzt hatte ich die Idee das die letzte Tabelle die noch nicht verknüpft ist in dem DBGrid so anzuzeigen, das wenn ein datensatz aus der Mastertabelle übereinstimmt mit dergespeicherten ID in der sechsten Tabelle, dann soll im DBGrid in einer neuen Spalte, in dem Feld des betroffenen Datensatzes ein 'Ja' erscheint, ansonsten ein 'Nein'.
Um das Beipiel praktisch zu sehen, es handelt sich um eine Sammlung von Schallplatten, und sind unterteilt in einzelne Tabellen wegen der redudanz. Jetzt gibt es die sechste Tabelle der Leihe und ich möchte erreichen das in der Übersicht in dem DBGrid eine Spalte anzeigt ob die Schallplatte ausgeliehen ist oder nicht.
Ist ein wenig wirr erklärt aber ich hoffe man kann es verstehen, ist nicht gerade leicht das ganze zu beschreiben ;)

mkinzler 6. Jul 2008 18:37

Re: ADO / DBGrid / Query / mehrere Tabellen
 
-Erweiterung des joins
-Subquery
in Verbindung mit if()

omata 6. Jul 2008 18:54

Re: ADO / DBGrid / Query / mehrere Tabellen
 
SQL-Code:
SELECT *, IIf(y.id IS NULL;'Nein';'Ja') AS entliehen
FROM mastertabelle x
LEFT JOIN (SELECT DISTINCT id
           FROM tabelle6) y
  ON x.id = y.id

tschinkes 6. Jul 2008 20:54

Re: ADO / DBGrid / Query / mehrere Tabellen
 
Also wenn ich die Anweisung alleine nach Omata mache

Zitat:

Zitat von omata
SQL-Code:
SELECT *, IIf(y.id IS NULL;'Nein';'Ja') AS entliehen
FROM mastertabelle x
LEFT JOIN (SELECT DISTINCT id
           FROM tabelle6) y
  ON x.id = y.id

Bei mir:

SQL-Code:
SELECT *, iif(y.Platte IS NULL,'Nein','Ja') AS Ausleihe
FROM Platte x
LEFT JOIN (SELECT DISTINCT Platte x
FROM Leihe) y
ON x.id = y.Platte
funkioniert es schon mal, aber da ich nun noch die anderen Tabellen habe und diese ebenfals in einen Join legen muss, dachte ich mir logischer weise, das ich den dann in den ersten From ersetze und es sieht wie folgt aus:

SQL-Code:
SELECT *, iif(y.Platte IS NULL,'Nein','Ja') AS Ausleihe
FROM (SELECT * FROM (((Platte t1
INNER JOIN Interpret t2 ON t2.id=t1.Interpret)
INNER JOIN Label t3 ON t3.id=t1.Label)
INNER JOIN Stil t4 ON t4.id=t1.Stil)
INNER JOIN Qualität t5 ON t5.id=t1.Qualität)
LEFT JOIN (SELECT DISTINCT Platte x
FROM Leihe) y
ON x.id = y.Platte
Nun gibt mir aber Delphi einen JOIN Syntax Fehler, mmhh ich merk schon da muss man ganz schön fix sein das ganze ohne Probleme hinzubekommen Oo

omata 6. Jul 2008 21:20

Re: ADO / DBGrid / Query / mehrere Tabellen
 
SQL-Code:
SELECT *, iif(Leihe.Platte IS NULL,'Nein','Ja') AS Ausleihe
FROM ((((Platte AS t1 
         INNER JOIN Interpret AS t2 ON t1.interpret = t2.id)
        INNER JOIN Label AS t3 ON t1.label = t3.id)
       INNER JOIN Stil AS t4 ON t1.stil = t4.id)
      INNER JOIN Qualität AS t5 ON t1.qualität = t5.id)
LEFT JOIN (SELECT DISTINCT Platte
           FROM Leihe) Leihe
  ON t1.id = Leihe.platte

tschinkes 6. Jul 2008 21:49

Re: ADO / DBGrid / Query / mehrere Tabellen
 
SUPI Funzt!!!!!!!!!! *freu


Danke! :cheer:

tschinkes 7. Jul 2008 20:39

Re: ADO / DBGrid / Query / mehrere Tabellen
 
Eine Frage hätt ich noch, und zwar wenn ich nun über ein DBField einen bestimmten Text suchen möchte, wie müsste ich die Select Abfrage modifiezieren das er mir in allen Feldernm ushct und mir nur die gesuchten anzeigt? Daran hänge ich gerade...

alzaimar 7. Jul 2008 20:50

Re: ADO / DBGrid / Query / mehrere Tabellen
 
Indem Du die Where-Klausel entsprechend erweiterst. Das Zauberwort heißt 'LIKE'. Da Access pervers ist, musst Du in der Hilfe schauen oder warten, bis ein Access-Guru (wer will das schon sein :mrgreen: ) sich outet und Dir genau sagt, wie's geht.

Im Prinzip aber so:
SQL-Code:
select * from bla where feld1 like '%Suchtext%' or feld2='%suchtext%' ....
'%' ist hierbei eine Wildcard (wie '*' beim Suchen nach Dateien)

mkinzler 7. Jul 2008 20:51

Re: ADO / DBGrid / Query / mehrere Tabellen
 
Zitat:

'%' ist hierbei eine Wildcard (wie '*' beim Suchen nach Dateien)
Oder halt in Access

tschinkes 7. Jul 2008 20:57

Re: ADO / DBGrid / Query / mehrere Tabellen
 
*lol gott sei dank bin ich mit der ansicht nicht alleine *fg, allein die SELECT Anweisung weiter oben ist ja schon pervers ;)

Naja wenns ne einfachere Lösung gibt wäre ich echt dankbar dafür.

Also mit der LIKE Anweisung hab ich auch schon probiert, gibt eine Exception, irgendwo muss es da rein aber ich weiß nicht wo Oo

Mein Ansatz ist wie folgt:

Delphi-Quellcode:
  with DataModule1.ADOQueryGrid do
  begin
    Active := FALSE;
    SQL.Clear;
    SQL.add ('SELECT *, iif(Leihe.Platte IS NULL,''Nein'',''Ja'') AS Ausleihe' +
                'FROM ((((Platte AS t1' +
                'INNER JOIN Interpret AS t2 ON t1.interpret = t2.id)' +
                'INNER JOIN Label AS t3 ON t1.label = t3.id)' +
                'INNER JOIN Stil AS t4 ON t1.stil = t4.id)' +
                'INNER JOIN Qualität AS t5 ON t1.qualität = t5.id)' +
                'LEFT JOIN (SELECT DISTINCT Platte'+
                'FROM Leihe WHERE t1.CODE = :suchid) Leihe'+
                'ON t1.id = Leihe.platte');
    ParamCheck := true;
    Parameters.ParamByName('suchid').Value := Edit1.Text;
    Open;
    end;
  end;


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

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