AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Daten aus zweiter Table aufgrund Ergebnis aus erster Table
Thema durchsuchen
Ansicht
Themen-Optionen

Daten aus zweiter Table aufgrund Ergebnis aus erster Table

Ein Thema von drschubi · begonnen am 22. Jul 2006 · letzter Beitrag vom 22. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
drschubi

Registriert seit: 18. Dez 2003
94 Beiträge
 
#1

Daten aus zweiter Table aufgrund Ergebnis aus erster Table

  Alt 22. Jul 2006, 17:47
Datenbank: Mysql • Version: 5 • Zugriff über: Zeos
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é
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab

  Alt 22. Jul 2006, 17:56
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?
Markus Kinzler
  Mit Zitat antworten Zitat
drschubi

Registriert seit: 18. Dez 2003
94 Beiträge
 
#3

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab

  Alt 22. Jul 2006, 18:14
Hallo mkinzler,

wie soll ich das mit dem join machen, wie meinst du "wie stehen die Tabellen zueinander"?

Gruß René
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab

  Alt 22. Jul 2006, 18:26
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:

Select * from `aa_shopdaten` where `shop_nr` in ( Select shopnr from `aa_tasks` where `taskstate` <> 'Erledigt'); oder halt ein Join über beide Tabellen.
Markus Kinzler
  Mit Zitat antworten Zitat
drschubi

Registriert seit: 18. Dez 2003
94 Beiträge
 
#5

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab

  Alt 22. Jul 2006, 18:42
Hallo mkinzler,

vielen Dank, wusste nicht daß es so verschachtelt geht.
Hier sagt er mir, es würde ein Operator oder Semikolon fehlen.
 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é
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab

  Alt 22. Jul 2006, 18:54
In Delphi mußt du die Strings natürlich doppelt quoten:

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` <> 'Erledigtand
    d.shopnr = t.shopnr;
Markus Kinzler
  Mit Zitat antworten Zitat
drschubi

Registriert seit: 18. Dez 2003
94 Beiträge
 
#7

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab

  Alt 22. Jul 2006, 19:04
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é
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab

  Alt 22. Jul 2006, 19:06
Könnte auch shop_nr heißen.
Markus Kinzler
  Mit Zitat antworten Zitat
drschubi

Registriert seit: 18. Dez 2003
94 Beiträge
 
#9

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab

  Alt 22. Jul 2006, 19:17
Upps

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é
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Daten aus zweiter Table aufgrund Ergebnis aus erster Tab

  Alt 22. Jul 2006, 19:21
Zitat:
dafür findet er jetzt das feld Task nicht mehr, langsam blicke ich es nicht mehr.
In welcher Tabelle befindet sich das Feld?
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:57 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