Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Abfrage über Zwei Tabellen (https://www.delphipraxis.net/150648-abfrage-ueber-zwei-tabellen.html)

MCOP2001DE 22. Apr 2010 19:59

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;

DeddyH 22. Apr 2010 21:42

Re: Abfrage über Zwei Tabellen
 
Kann es sein, dass da ein AND fehlt?

[edit] Alternativvorschlag:
Delphi-Quellcode:
SQL.Text := 'SELECT Z.*,K.* FROM Zugang Z JOIN Kunden K ON K.Zugangs_ID = Z.Zugangs_ID WHERE Z.Benutzer=:Benutzer';
[/edit]

MCOP2001DE 23. Apr 2010 05:30

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:
SQL.Text := 'select * From Zugang, Kunden where Kunden.Zugangs_ID = Zugang.Zugangs_ID and Zugang.Benutzer=:Benutzer';
bleiben die Felder leer.
Mit deinem Alternativ vorschlag bekomme ich nur die Fehlermeldung Syntaxfehler in der From-Klausel.
Wass kann das sein?

soulies 23. Apr 2010 05:45

Re: Abfrage über Zwei Tabellen
 
hoi,

fehlt dir am ende vllt. auch noch das Semikola als Endezeichen ?

Delphi-Quellcode:
Zugang.Benutzer=:Benutzer'
zu

Delphi-Quellcode:
Zugang.Benutzer=:Benutzer ;'

edit:

wenn
Delphi-Quellcode:
SucheText := E_Suche.Text+'%';
der Text ein Platzhalter verwendet '%' dann müsste es auch
Delphi-Quellcode:
Zugang.Benutzer like :Benutzer ;'
sein - oder nicht ?

cya

hoika 23. Apr 2010 07:09

Re: Abfrage über Zwei Tabellen
 
Hallo,

schreib das doch erst mal in der scicken join-Syntax

SQL-Code:
Select * From Zugang
Join Kunden On Kunden.Zugangs_ID = Zugang.Zugangs_ID
Where Zugang.Benutzer=:Benutzer
Jetzt muss Benutzer aber auch noch passen (ist wohl ein Integer)

Hiermit werden erst mal alle Zugangsdaten angezeigt.

SQL-Code:
Select * From Zugang
Join Kunden On Kunden.Zugangs_ID = Zugang.Zugangs_ID
Aber Achtung: Hat eine Kunde keine Zugangsdaten, wird er auch nicht angezeigt.

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

Muchacho 23. Apr 2010 09:30

Re: Abfrage über Zwei Tabellen
 
An Deine Stelle würde ich so anfangen:
SQL-Code:
SELECT Z.BENUTZER FROM ZUGANG Z
LEFT OUTER JOIN KUNDEN K ON Z.ZUGANGS_ID = K.ZUGANGS_ID
WHERE Z.BENUTZER =:Benutzer
und ansonsten würde ich in SELECT Klausel nur die Felder aus beiden Tabellen einfügen die für mich relevant sind (und kein[*]).

Ich würde auch den Benutzer nur in Großbuchstaben übergeben!
Dann würde die Anweisung so aussehen:
SQL-Code:
SELECT Z.BENUTZER FROM ZUGANG Z
LEFT OUTER JOIN KUNDEN K ON Z.ZUGANGS_ID = K.ZUGANGS_ID
WHERE UPPER(Z.BENUTZER) =:Benutzer
Ich hoffe, dass das Feld ZUGANGS_ID auch in beiden Tabellen (ZUGANG und KUNDEN) so heißt,
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:
SELECT Z.BENUTZER FROM ZUGANG Z
LEFT OUTER JOIN KUNDEN K ON Z.ID = K.ZUGANGS_ID
WHERE Z.BENUTZER =:Benutzer
Gruß

Muchacho

MCOP2001DE 25. Apr 2010 08:47

Re: Abfrage über Zwei Tabellen
 
morgen

Danke erstmal für die Antworten.
ich habe das Problem mit diesem Code
Delphi-Quellcode:
'SELECT Z.*, K.* FROM ZUGANG Z, KUNDEN K WHERE Z.Zugangs_ID = K.Zugangs_ID AND Z.BENUTZER like :Benutzer'
gelöst :-D


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