![]() |
JOIN über 3 Tabellen
Hi...
Es ist schon spät und ich bekomme das einfach nicht mehr gebacken Ich habe 3 Tabellen Reservierung (RE), Abrechnung(AB) und Patienten (PA), die wie folgt miteinander verknüpft sind PA.PA_NR --> RE.RE_PA_NR --> AB.AB_RE_NR und daraus will ich jetzt ein JOIN machen und nach der Abrechnungsnr suchen (AB.AB_NR) Unternormalen Umständen funktioniert die Anzeige so, die reine Anzeige!
Delphi-Quellcode:
Jetzt will ich aber eine Suche machen nach der AB.AB_NR
with Data1.Q_ALLERECHNUNGEN do
begin Active := False; SQL.Clear; SQL.Add('SELECT '+ 'AB.*, '+ 'RE.RE_NR, RE.RE_PA_NR, RE.RE_ANRDAT, RE.RE_ABRDAT, '+ 'PA.PA_NR, PA.PA_VORNAME, PA.PA_NAME '+ 'FROM '+ 'ABRECHNUNG AB, RESERVIERUNG RE, PATIENTEN PA '+ 'WHERE '+ 'RE.RE_NR = AB.AB_RE_NR '+ 'AND '+ 'PA.PA_NR = RE.RE_PA_NR '+ 'ORDER BY PA.PA_NAME '); try Active := True; except ShowMessage('Query Q_ALLERECHNUNGEN konnte nicht geöffnet werden!'); end; end;
SQL-Code:
Sollte da doch wohl noch irgendwie mit reinzubringen sein!
AND AB.AB_NR = :v_SUCHE
So bekomme ich nicht das gewünsche Ergebnis...
Delphi-Quellcode:
Bin für jeden Tipp dankbar
with Data1.Q_ALLERECHNUNGEN do
begin Active := False; SQL.Clear; SQL.Add('SELECT '+ 'AB.*, '+ 'RE.RE_NR, RE.RE_PA_NR, RE.RE_ANRDAT, RE.RE_ABRDAT, '+ 'PA.PA_NR, PA.PA_VORNAME, PA.PA_NAME '+ 'FROM '+ 'WHERE '+ 'AB.AB_NR = :v_RECHNGSNR '+ 'AND '+ 'RE.RE_NR = AB.AB_RE_NR '+ 'AND '+ 'PA.PA_NR = RE.RE_PA_NR '+ 'ORDER BY PA.PA_NAME '); Prepared := True; with Parameters do begin ParamByName('v_RECHNGSNR').Value := Edit6.Text; end; try Active := True; except ShowMessage('Query Q_ALLERECHNUNGEN konnte nicht geöffnet werden!'); end; end; Greets |
Re: JOIN über 3 Tabellen
Servus,
nimm mal statt
Delphi-Quellcode:
lieber
with Parameters do
begin ParamByName('v_RECHNGSNR').Value := Edit6.Text; end;
Delphi-Quellcode:
with Parameters do
begin ParamByName('v_RECHNGSNR').AsInteger := IntToStr(Edit6.Text); end; |
Re: JOIN über 3 Tabellen
Hi Thomas
das klappt nicht weil es eine ADOQuery ist und die Datenbank ist MSDE :? Greets |
Re: JOIN über 3 Tabellen
Zitat:
SQL-Code:
Dies lässt sich auch ganz leicht auf 3 Tabellen ausweiten.
SELECT [Feldliste] FROM tableA INNER JOIN tableB ON tableA.FeldA=tableB.FeldB
WHERE [einschränkende Bedingungen] Vorteil: die WHERE-Bedingung ist viel übersichtlicher, da die Tabellenbeziehungen über ON ... abgebildet werden und man vergisst keine Beziehung zwischen den Tabellen. Im Enterprise-Manager vom M$ SQL-Server kann man JOINS ganz einfach mit Klickediklick der Maus aufbauen und testen. Nicht vergessen: Prüfe, ob der Datentyp deines Parameters auch richtig ist. Manchmal ist der Datentyp falsch und die Query liefert dann keine Datensätze. |
Re: JOIN über 3 Tabellen
Das sollte auf jeden Fall auch mit MSDE funktionieren:
Delphi-Quellcode:
Gruß
with Data1.Q_ALLERECHNUNGEN do
begin Active := False; SQL.Clear; SQL.Add(' SELECT AB.* '); SQL.Add(' , RE.RE_NR '); SQL.Add(' , RE.RE_PA_NR '); SQL.Add(' , RE.RE_ANRDAT '); SQL.Add(' , RE.RE_ABRDAT '); SQL.Add(' , PA.PA_NR '); SQL.Add(' , PA.PA_VORNAME '); SQL.Add(' , PA.PA_NAME '); SQL.Add(' FROM PA '); SQL.Add('INNER JOIN RE '); SQL.Add(' ON RE.RE_PA_NR = PA.PA_NR '); SQL.Add('INNER JOIN AB '); SQL.Add(' ON AB.AB_RE_NR = RE.RE_NR '); SQL.Add(' AND AB.AB_NR = :iRNR '); SQL.Add(' ORDER BY PA.PA_NAME '); Parameters.ParamByName('iRNR').DataType := ftInteger; Parameters.ParamByName('iRNR').AsInteger := StrToInt(Edit6.Text); end; try Data1.Q_ALLERECHNUNGEN.Open; except ShowMessage('Query Q_ALLERECHNUNGEN konnte nicht geöffnet werden!'); end; |
Re: JOIN über 3 Tabellen
Danke für Eure Hilfe!!! :thumb:
@Andreas Dann sollte ich mir den Enterprise Manager mal zu gemüte führen und mal wild durch die Gegend klicken... :P mit 2 Tabellen ist das (auch für mich) kein Problem, ich wußte nur nicht wie ich die Dritte mit einbinden sollte. Aber wenn mir der Enterprise Manager dabei hilft dann teste ich das gleich mal @Time Thx :thumb: Das funktioniert, habe nur noch die Tabellen eintragen müssen, weil nur der Alias alleine funktioniert nicht. Aber diese Zeile funktioniert immer noch nicht...
Delphi-Quellcode:
Ich kann den Parameter nur als Variant übergeben was eigentlich nicht schlimm ist solange er nicht "verwurschtelt" wird Aber genau so funzt es jetzt wie ich es haben wollte...
Parameters.ParamByName('iRNR').DataType := ftInteger;
Parameters.ParamByName('iRNR').asInteger := StrToInt(Edit6.Text); für die Nachwelt noch mal so wie es sein sollte!
Delphi-Quellcode:
Greets
with Data1.Q_ALLERECHNUNGEN do
begin Active := False; SQL.Clear; SQL.Add(' SELECT AB.* '); SQL.Add(' , RE.RE_NR '); SQL.Add(' , RE.RE_PA_NR '); SQL.Add(' , RE.RE_ANRDAT '); SQL.Add(' , RE.RE_ABRDAT '); SQL.Add(' , PA.PA_NR '); SQL.Add(' , PA.PA_VORNAME '); SQL.Add(' , PA.PA_NAME '); SQL.Add(' FROM PATIENTEN PA '); SQL.Add('INNER JOIN RESERVIERUNG RE '); SQL.Add(' ON RE.RE_PA_NR = PA.PA_NR '); SQL.Add('INNER JOIN ABRECHNUNG AB '); SQL.Add(' ON AB.AB_RE_NR = RE.RE_NR '); SQL.Add(' AND AB.AB_NR = :iRNR '); SQL.Add(' ORDER BY PA.PA_NAME '); Parameters.ParamByName('iRNR').Value := StrToInt(Edit6.Text); end; try Data1.Q_ALLERECHNUNGEN.Open; except ShowMessage('Query Q_ALLERECHNUNGEN konnte nicht geöffnet werden!'); end; |
Re: JOIN über 3 Tabellen
Zitat:
Besser so:
Delphi-Quellcode:
try
Data1.Q_ALLERECHNUNGEN.Open; except on E:Exception do begin E.Message := 'Query Q_ALLERECHNUNGEN konnte nicht geöffnet werden!'#13#10+ E.Message; Raise; end; end; |
Re: JOIN über 3 Tabellen
Hi Andreas
da hast du recht, das sollte ich noch ändern :thumb: jetzt ist es perfekt... :-D Greets |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 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