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:
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.
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; Ich hole die shopnr in die Variable TmpStr anhand derer ich dann den shopnamen holen will. Wo ist mein Fehler?
Delphi-Quellcode:
Gruß René
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; |
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? |
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é |
Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
Zitat:
Zitat:
SQL-Code:
oder halt ein Join über beide Tabellen.
Select * from `aa_shopdaten` where `shop_nr` in ( Select shopnr from `aa_tasks` where `taskstate` <> 'Erledigt');
|
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:
Kannst Du mir bitte aufzeigen wie es mit Join aussehen würde, daß interessiert mich jetzt.
Query_ContactCard.SQL.Text := 'Select * from `aa_shopdaten` where `shop_nr` in ( Select shopnr from `aa_tasks` where `taskstate` <> 'Erledigt');
Gruß René |
Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
In Delphi mußt du die Strings natürlich doppelt quoten:
Delphi-Quellcode:
Als impliziten SQL-92-Join:
Query_ContactCard.SQL.Text := 'Select * from `aa_shopdaten` where `shop_nr` in ( Select shopnr from `aa_tasks` where `taskstate` <> ''Erledigt'');
SQL-Code:
Select
* from `aa_shopdaten` d, `aa_tasks` t where t.`taskstate` <> 'Erledigt' and d.shopnr = t.shopnr; |
Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
Hallo mkinzler,
Delphi-Quellcode:
bringt mir SQL-Error:unknown Column 'shop_nr' in 'IN/ALL/ANY subquery''
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; Er findet also wieder die shopnr nicht, habe ich noch irgendetwas übersehen? Gruß rené |
Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
Könnte auch shop_nr heißen.
|
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é |
Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:40 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