Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten aus zweiter Table aufgrund Ergebnis aus erster Table (https://www.delphipraxis.net/73710-daten-aus-zweiter-table-aufgrund-ergebnis-aus-erster-table.html)

drschubi 22. Jul 2006 17:47

Datenbank: Mysql • Version: 5 • Zugriff über: Zeos

Daten aus zweiter Table aufgrund Ergebnis aus erster Table
 
Hallo,

ich hoffe die Überschrift verwirrt nicht allzu sehr.

Ich hole aus der Tabelle aa_task die nicht erledigten Aufgaben heraus. Aufgrund der hier ermittelten shop_nr möchte ich den dazugehörigen Namen aus dem Feld shop_name aus der Tabelle aa-shopdaten holen.
Das funktioniert aber nicht.


Dies funktioniert normal
Delphi-Quellcode:
procedure TForm1.list_task;
begin
  Query_ContactCard.SQL.Text := 'Select * from `aa_tasks` where `taskstate` <> ''Erledigt'' order by `shopnr` DESC;';  Query_ContactCard.Open;
  Query_ContactCard.FieldByName('id').AsString;
  Lv_task.Items.Clear;
  while not Query_Contactcard.Eof do
    begin
      LI := lv_task.Items.Add;
      LI.Caption := '';
      LI.SubItems.Add(Query_ContactCard.FieldByName('done').AsString);
      LI.SubItems.Add(Query_ContactCard.FieldByName('shopnr').AsString);
      LI.SubItems.Add(Query_ContactCard.FieldByName('task').AsString);
      Query_ContactCard.Next;
    end;
end;
Hier versuche ich das oben beschriebene, es kommt aber ein Fehler, weil das Feld "shop_name" nicht gefunden wurde, das Feld ist aber in der Tabelle aa_shopdaten vorhanden.

Ich hole die shopnr in die Variable TmpStr anhand derer ich dann den shopnamen holen will. Wo ist mein Fehler?
Delphi-Quellcode:
procedure TForm1.BtnReadTasksClick(Sender: TObject);
var
  TmpStr:string;
begin
  Query_ContactCard.SQL.Text := 'Select * from `aa_tasks` where `taskstate` <> ''Erledigt'' order by `shopnr` DESC;'; //IN
  Query_ContactCard.Open;
  Query_ContactCard.FieldByName('id').AsString;
  Lv_task.Items.Clear;

  while not Query_Contactcard.Eof do
    begin
      TmpStr:='';
      LI := lv_task.Items.Add;
      LI.Caption := '';
      LI.SubItems.Add('');
      LI.SubItems.Add(Query_ContactCard.FieldByName('shopnr').AsString);
      tmpstr:=Query_ContactCard.FieldByName('shopnr').AsString;
     // Showmessage(tmpstr);
      LI.SubItems.Add(Query_ContactCard.FieldByName('shop_name').AsString);
      Query_ContactCard.SQL.Text := 'Select * from `aa_tasks` where `taskstate` <> ''Erledigt'' order by `shopnr` DESC;';
      Query_ContactCard.Open;
      LI.SubItems.Add(Query_ContactCard.FieldByName('task').AsString);
      Query_ContactCard.SQL.Text := 'Select * from `aa_shopdaten` where `shop_name` = '+ TmpStr +';';
      Query_ContactCard.Open;
      Query_ContactCard.Next;
    end;
end;
Gruß René

mkinzler 22. Jul 2006 17:56

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
 
Du Versuchst innerhalb der Schleife über das Ergebnis einen Abfrage diese zu verändern. Für diesen Fall solltest du einen anderen Query nehmen oder gleich einen Join machen.
Wie stehen die beiden Tabellen im Verhältnis?

drschubi 22. Jul 2006 18:14

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
 
Hallo mkinzler,

wie soll ich das mit dem join machen, wie meinst du "wie stehen die Tabellen zueinander"?
:oops:
Gruß René

mkinzler 22. Jul 2006 18:26

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
 
Zitat:

wie meinst du "wie stehen die Tabellen zueinander"?
aa_tasks hat ein Fremdschlüssel shopnr auf die Tabelle aa_shopdaten.
Zitat:

wie soll ich das mit dem join machen
Na beide Abfragen in einer, entweder als Subselect (wenn du nur Daten der aa_shopdaten benötigst:

SQL-Code:
Select * from `aa_shopdaten`  where `shop_nr` in ( Select shopnr from `aa_tasks` where `taskstate` <> 'Erledigt');
oder halt ein Join über beide Tabellen.

drschubi 22. Jul 2006 18:42

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
 
Hallo mkinzler,

vielen Dank, wusste nicht daß es so verschachtelt geht.
Hier sagt er mir, es würde ein Operator oder Semikolon fehlen.
Delphi-Quellcode:
 Query_ContactCard.SQL.Text := 'Select * from `aa_shopdaten`  where `shop_nr` in ( Select shopnr from `aa_tasks` where `taskstate` <> 'Erledigt');
Kannst Du mir bitte aufzeigen wie es mit Join aussehen würde, daß interessiert mich jetzt.

Gruß René

mkinzler 22. Jul 2006 18:54

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
 
In Delphi mußt du die Strings natürlich doppelt quoten:

Delphi-Quellcode:
Query_ContactCard.SQL.Text := 'Select * from `aa_shopdaten`  where `shop_nr` in ( Select shopnr from `aa_tasks` where `taskstate` <> ''Erledigt'');
Als impliziten SQL-92-Join:

SQL-Code:
Select
    * 
from
    `aa_shopdaten` d, `aa_tasks` t
where
    t.`taskstate` <> 'Erledigt' and
    d.shopnr = t.shopnr;

drschubi 22. Jul 2006 19:04

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
 
Hallo mkinzler,

Delphi-Quellcode:
procedure TForm1.BtnReadTasksClick(Sender: TObject);
begin
 Query_ContactCard.SQL.Text := 'Select * from `aa_shopdaten`  where `shop_nr` in ( Select shopnr from `aa_tasks` where `taskstate` <> ''Erledigt'')';
  Query_ContactCard.Open;
  Query_ContactCard.FieldByName('id').AsString;
  Lv_task.Items.Clear;
  while not Query_Contactcard.Eof do
    begin
      LI := lv_task.Items.Add;
      LI.Caption := '';
      LI.SubItems.Add('');
      LI.SubItems.Add(Query_ContactCard.FieldByName('shopnr').AsString);
      LI.SubItems.Add(Query_ContactCard.FieldByName('shop_name').AsString);
      LI.SubItems.Add(Query_ContactCard.FieldByName('task').AsString);
      Query_ContactCard.Next;
      end;
bringt mir SQL-Error:unknown Column 'shop_nr' in 'IN/ALL/ANY subquery''

Er findet also wieder die shopnr nicht, habe ich noch irgendetwas übersehen?

Gruß rené

mkinzler 22. Jul 2006 19:06

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
 
Könnte auch shop_nr heißen.

drschubi 22. Jul 2006 19:17

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
 
Upps :oops: :oops: :oops:

Das war der Fehler, also die Zuordnung von shop_name und shopnr klappt jetzt, dafür findet er jetzt das feld Task nicht mehr, langsam blicke ich es nicht mehr.

Gruß René

mkinzler 22. Jul 2006 19:21

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
 
Zitat:

dafür findet er jetzt das feld Task nicht mehr, langsam blicke ich es nicht mehr.
In welcher Tabelle befindet sich das Feld?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:40 Uhr.
Seite 1 von 2  1 2      

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