![]() |
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 ;) |
Re: ADO / DBGrid / Query / mehrere Tabellen
-Erweiterung des joins
-Subquery in Verbindung mit if() |
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 |
Re: ADO / DBGrid / Query / mehrere Tabellen
Also wenn ich die Anweisung alleine nach Omata mache
Zitat:
SQL-Code:
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:
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
SQL-Code:
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
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 |
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 |
Re: ADO / DBGrid / Query / mehrere Tabellen
SUPI Funzt!!!!!!!!!! *freu
Danke! :cheer: |
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...
|
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:
'%' ist hierbei eine Wildcard (wie '*' beim Suchen nach Dateien)
select * from bla where feld1 like '%Suchtext%' or feld2='%suchtext%' ....
|
Re: ADO / DBGrid / Query / mehrere Tabellen
Zitat:
|
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. |
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