AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Abfrage über Zwei Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage über Zwei Tabellen

Ein Thema von MCOP2001DE · begonnen am 22. Apr 2010 · letzter Beitrag vom 25. Apr 2010
Antwort Antwort
MCOP2001DE

Registriert seit: 19. Jun 2004
89 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Abfrage über Zwei Tabellen

  Alt 22. Apr 2010, 20:59
Datenbank: Access • Version: 2003 • Zugriff über: ADO
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Abfrage über Zwei Tabellen

  Alt 22. Apr 2010, 22:42
Kann es sein, dass da ein AND fehlt?

[edit] Alternativvorschlag:
SQL.Text := 'SELECT Z.*,K.* FROM Zugang Z JOIN Kunden K ON K.Zugangs_ID = Z.Zugangs_ID WHERE Z.Benutzer=:Benutzer'; [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
MCOP2001DE

Registriert seit: 19. Jun 2004
89 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Abfrage über Zwei Tabellen

  Alt 23. Apr 2010, 06:30
Danke für die schnelle Antwort.
Der UND Befehl fehlte aber wenn ich den dazu schreibe, das es so aussieht
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?
  Mit Zitat antworten Zitat
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#4

Re: Abfrage über Zwei Tabellen

  Alt 23. Apr 2010, 06:45
hoi,

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

Zugang.Benutzer=:Benutzer' zu

Zugang.Benutzer=:Benutzer ;'
edit:

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

cya
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Abfrage über Zwei Tabellen

  Alt 23. Apr 2010, 08:09
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
Heiko
  Mit Zitat antworten Zitat
Muchacho

Registriert seit: 9. Okt 2009
60 Beiträge
 
Delphi 2010 Enterprise
 
#6

Re: Abfrage über Zwei Tabellen

  Alt 23. Apr 2010, 10:30
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
  Mit Zitat antworten Zitat
MCOP2001DE

Registriert seit: 19. Jun 2004
89 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

Re: Abfrage über Zwei Tabellen

  Alt 25. Apr 2010, 09:47
morgen

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 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