Datenbank: Access • Version: 2003 • Zugriff über: ADO
Abfrage über Zwei Tabellen
Guten Abend
ich habe folgendes Probelm. Ich möchte in einem DBGrid Daten auch Zwei Tabellen anzeigen lassen. Das Anzeigen habe ich bereits nun mein Problem wenn ich jetzt zur Laufzeit Daten suchen möchte werden mir keine Daten mehr angezeit. Hier mein verwendeter Code vieleicht fällt euch was auf was ich falsch gemacht habe
Delphi-Quellcode:
procedure TKundenauswertung.E_SucheChange(Sender: TObject);
var SucheText : String; begin SucheText := E_Suche.Text+'%'; with Data.QRY_Zugang do begin close; SQL.Clear; SQL.Text := 'select * From Zugang, Kunden where Kunden.Zugangs_ID = Zugang.Zugangs_ID Zugang.Benutzer=:Benutzer'; Parameters.ParamByName('Benutzer').Value := SucheText; open; end; |
Re: Abfrage über Zwei Tabellen
Kann es sein, dass da ein AND fehlt?
[edit] Alternativvorschlag:
Delphi-Quellcode:
[/edit]
SQL.Text := 'SELECT Z.*,K.* FROM Zugang Z JOIN Kunden K ON K.Zugangs_ID = Z.Zugangs_ID WHERE Z.Benutzer=:Benutzer';
|
Re: Abfrage über Zwei Tabellen
Danke für die schnelle Antwort.
Der UND Befehl fehlte aber wenn ich den dazu schreibe, das es so aussieht
Delphi-Quellcode:
bleiben die Felder leer.
SQL.Text := 'select * From Zugang, Kunden where Kunden.Zugangs_ID = Zugang.Zugangs_ID and Zugang.Benutzer=:Benutzer';
Mit deinem Alternativ vorschlag bekomme ich nur die Fehlermeldung Syntaxfehler in der From-Klausel. Wass kann das sein? |
Re: Abfrage über Zwei Tabellen
hoi,
fehlt dir am ende vllt. auch noch das Semikola als Endezeichen ?
Delphi-Quellcode:
zu
Zugang.Benutzer=:Benutzer'
Delphi-Quellcode:
Zugang.Benutzer=:Benutzer ;'
edit: wenn
Delphi-Quellcode:
der Text ein Platzhalter verwendet '%' dann müsste es auch
SucheText := E_Suche.Text+'%';
Delphi-Quellcode:
sein - oder nicht ?
Zugang.Benutzer like :Benutzer ;'
cya |
Re: Abfrage über Zwei Tabellen
Hallo,
schreib das doch erst mal in der scicken join-Syntax
SQL-Code:
Jetzt muss Benutzer aber auch noch passen (ist wohl ein Integer)
Select * From Zugang
Join Kunden On Kunden.Zugangs_ID = Zugang.Zugangs_ID Where Zugang.Benutzer=:Benutzer Hiermit werden erst mal alle Zugangsdaten angezeigt.
SQL-Code:
Aber Achtung: Hat eine Kunde keine Zugangsdaten, wird er auch nicht angezeigt.
Select * From Zugang
Join Kunden On Kunden.Zugangs_ID = Zugang.Zugangs_ID Sollen aber "leere" Kunden angezeigt werden, muss ein Left Join benutzt werden
SQL-Code:
Select * From Zugang
Left Join Kunden On Kunden.Zugangs_ID = Zugang.Zugangs_ID Heiko |
Re: Abfrage über Zwei Tabellen
An Deine Stelle würde ich so anfangen:
SQL-Code:
und ansonsten würde ich in SELECT Klausel nur die Felder aus beiden Tabellen einfügen die für mich relevant sind (und kein[*]).
SELECT Z.BENUTZER FROM ZUGANG Z
LEFT OUTER JOIN KUNDEN K ON Z.ZUGANGS_ID = K.ZUGANGS_ID WHERE Z.BENUTZER =:Benutzer Ich würde auch den Benutzer nur in Großbuchstaben übergeben! Dann würde die Anweisung so aussehen:
SQL-Code:
Ich hoffe, dass das Feld ZUGANGS_ID auch in beiden Tabellen (ZUGANG und KUNDEN) so heißt,
SELECT Z.BENUTZER FROM ZUGANG Z
LEFT OUTER JOIN KUNDEN K ON Z.ZUGANGS_ID = K.ZUGANGS_ID WHERE UPPER(Z.BENUTZER) =:Benutzer weil normalerweise müsste dieses Feld in der Tabelle ZUGANG schlicht und einfach ID heißen (und nicht ZUGANGS_ID!). Dann würde die Anweisung so aussehen:
SQL-Code:
Gruß
SELECT Z.BENUTZER FROM ZUGANG Z
LEFT OUTER JOIN KUNDEN K ON Z.ID = K.ZUGANGS_ID WHERE Z.BENUTZER =:Benutzer Muchacho |
Re: Abfrage über Zwei Tabellen
morgen
Danke erstmal für die Antworten. ich habe das Problem mit diesem Code
Delphi-Quellcode:
gelöst :-D
'SELECT Z.*, K.* FROM ZUGANG Z, KUNDEN K WHERE Z.Zugangs_ID = K.Zugangs_ID AND Z.BENUTZER like :Benutzer'
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz