AGB  ·  Datenschutz  ·  Impressum  







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

JOIN über 3 Tabellen

Ein Thema von Luciano · begonnen am 28. Sep 2004 · letzter Beitrag vom 29. Sep 2004
Antwort Antwort
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#1

JOIN über 3 Tabellen

  Alt 28. Sep 2004, 16:40
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:
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;
Jetzt will ich aber eine Suche machen nach der AB.AB_NR

AND AB.AB_NR = :v_SUCHE Sollte da doch wohl noch irgendwie mit reinzubringen sein!

So bekomme ich nicht das gewünsche Ergebnis...
Delphi-Quellcode:
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;
Bin für jeden Tipp dankbar

Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
djmasi

Registriert seit: 9. Jun 2004
Ort: Leipzig
105 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: JOIN über 3 Tabellen

  Alt 28. Sep 2004, 16:50
Servus,
nimm mal statt
Delphi-Quellcode:
with Parameters do
      begin
        ParamByName('v_RECHNGSNR').Value := Edit6.Text;
      end;
lieber
Delphi-Quellcode:
with Parameters do
      begin
        ParamByName('v_RECHNGSNR').AsInteger := IntToStr(Edit6.Text);
      end;
Thomas Maßmann
"...ihr würdet selbst den lieben Gott einbetonieren, wenn eure Datenbank ihn eines Tag's erfasst..."
H.-R.-Kunze
Auch Delphi 9 Preview-Inhaber bin
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: JOIN über 3 Tabellen

  Alt 28. Sep 2004, 16:56
Hi Thomas

das klappt nicht weil es eine ADOQuery ist und die Datenbank ist MSDE

Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: JOIN über 3 Tabellen

  Alt 28. Sep 2004, 17:18
Zitat von Luciano:
Bin für jeden Tipp dankbar
Verwende doch die SQL/92 Syntax für Joins:
SQL-Code:
SELECT [Feldliste] FROM tableA INNER JOIN tableB ON tableA.FeldA=tableB.FeldB
WHERE [einschränkende Bedingungen]
Dies lässt sich auch ganz leicht auf 3 Tabellen ausweiten.
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#5

Re: JOIN über 3 Tabellen

  Alt 28. Sep 2004, 17:52
Das sollte auf jeden Fall auch mit MSDE funktionieren:
Delphi-Quellcode:
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;
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: JOIN über 3 Tabellen

  Alt 29. Sep 2004, 07:31
Danke für Eure Hilfe!!!

@Andreas
Dann sollte ich mir den Enterprise Manager mal zu gemüte führen und mal wild durch die Gegend klicken... 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 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:
    Parameters.ParamByName('iRNR').DataType := ftInteger;
    Parameters.ParamByName('iRNR').asInteger := StrToInt(Edit6.Text);
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...

für die Nachwelt noch mal so wie es sein sollte!
Delphi-Quellcode:
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;
Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: JOIN über 3 Tabellen

  Alt 29. Sep 2004, 07:50
Zitat von Luciano:
Delphi-Quellcode:
try
  Data1.Q_ALLERECHNUNGEN.Open;
except
  ShowMessage('Query Q_ALLERECHNUNGEN konnte nicht geöffnet werden!');
end;
Dein ShowMessage unterdrückt die eigentliche Fehlermeldung. Dann ist grosses Rätzelraten abgesagt
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;
Andreas
  Mit Zitat antworten Zitat
Luciano

Registriert seit: 17. Dez 2003
Ort: Großostheim
126 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: JOIN über 3 Tabellen

  Alt 29. Sep 2004, 08:04
Hi Andreas

da hast du recht, das sollte ich noch ändern
jetzt ist es perfekt...

Greets
Mike Santangelo
Wie kann ich den wissen was ich denke, wenn ich nicht höre was ich sage!
  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 14: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