AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADO, Datensatz suchen inkl. Fremdtabelle
Thema durchsuchen
Ansicht
Themen-Optionen

ADO, Datensatz suchen inkl. Fremdtabelle

Ein Thema von bingo72 · begonnen am 17. Sep 2007 · letzter Beitrag vom 17. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#1

ADO, Datensatz suchen inkl. Fremdtabelle

  Alt 17. Sep 2007, 07:12
Datenbank: Access • Version: 2000 • Zugriff über: ADO
Morgen liebe Delphi-Gemeinde!!

Was mich momentan beschäftigt ist folgendes:

Ich habe mir eine Test-DB im Access 2000 zugelegt (bestehend aus Tabelle 1 mit ein paar Werten und einem Fremdschlüssel (GUID, könnte aber auch Long Integer sein) der auf eine Fremdtabelle (Tabelle 2) zeigt, wo weitere Werte stehen).
Jetzt will ich einen bestimmten Datensatz in Tabelle 1 suchen gehen und will natürlich mit dem Fremdschlüssel auch die Werte von Tabelle 2 auslesen können.

Jetzt hab ich schon was über TADOQuery gelesen...

Da ich noch nicht jahrelange Erfahrung habe, möchte ich eine elegante sowie 'saubere' Lösung finden.
Ich hätte gefühlsmässig mit SQL-Statements in Tabelle 1 nach einem bestimmten DS gesucht und wär dann mit dem Fremdschlüssel (sofern es diesen bestimmten DS wirklich gibt!!) in Tabelle 2 gegangen um die weiteren Daten auszulesen.

Ist das der richtige Ansatz?? Oder wie gehen da die Profis ran??

Bin über jeden guten Ansatz dankbar und froh...

LG Thomas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: ADO, Datensatz suchen inkl. Fremdtabelle

  Alt 17. Sep 2007, 07:16
Man nennt sowas einen Join:

SQL-Code:
select
    t1.<feld1>, t1.<feld2>, ...
    t2.<feld1>, t2.<feld2>, ...
from
    <Tabelle1> t1 join <Tabelle2> t2 on t2.<fk> = t1.<pk>
where
    <Suchbedigung>;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: ADO, Datensatz suchen inkl. Fremdtabelle

  Alt 17. Sep 2007, 07:17
Hallo,

über einen Join sollte das kein Problem sein. Leider kenne ich mich mit Access und seiner "Klammeritis" nicht gut aus, aber ansatzweise ist die Syntax so:
SQL-Code:
SELECT Tabelle1.Feld1, Tabelle1.Feld2, Tabelle2.Feld1, Tabelle2.Feld2...FROM Tabelle1
JOIN Tabelle2 ON Tabelle2.Fremdschlüssel = Tabelle1.Primärschlüssel
WHERE Bedingung
//Edit: Schon wieder zu langsam
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#4

Re: ADO, Datensatz suchen inkl. Fremdtabelle

  Alt 17. Sep 2007, 07:22
Danke für die raschen Antworten...

Was haltet ihr von folgendem Beispielcode??

Delphi-Quellcode:
SELECT * FROM Auftraege WHERE Fahrer IN
 (SELECT FFID FROM FahrzFahrer WHERE Fahrer = 16)
Wär das eine brauchbare Alternative zu einem JOIN?? Oder is das Mist??
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: ADO, Datensatz suchen inkl. Fremdtabelle

  Alt 17. Sep 2007, 07:32
Würde auch gehen, wenn das DBMS SubSelects versteht. Dürfte aber u.U. langsamer sein.
Markus Kinzler
  Mit Zitat antworten Zitat
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#6

Re: ADO, Datensatz suchen inkl. Fremdtabelle

  Alt 17. Sep 2007, 07:40
Danke MKinzler!!

Habe Deine Antworten schon öfters bei diversen Fragen gelesen und Du hast immer gute Tipps parat.
Also werd ich mich eingehend mit dem Thema 'JOIN' befassen und danke Dir nochmals für die rasche Antwort!!

LG
Thomas
  Mit Zitat antworten Zitat
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#7

Re: ADO, Datensatz suchen inkl. Fremdtabelle

  Alt 17. Sep 2007, 09:23
Hab mich jetzt mal damit gespielt und hab noch eine Frage:
Einfache Abfragen ohne Bezug auf Fremdtabellen funktionieren....auch die JOIN-SQL-Anweisung schluckt er brav!! Wenn ich aber das Feld Farbe abfrage (siehe Code unten), bekomme ich eine Exception, daß er das Feld 'Farbe' nicht findet. Feld 'Farbe' kommt aber in der Tabelle 'TESTTAB' vor... nur das in dem Feld 'Farbe' kein Text, sondern der Fremdschlüssel (Long_Integer im Access) auf die FREMDTAB enthalten ist.

Ausserdem will ich ja nicht den Fremdschlüssel zurückbekommen, sondern die tatsächlichen Werte, die dahinterstehen. Brauche ich dann 2 ADO-Query-Objekte??

Delphi-Quellcode:
procedure TfmMain.QueryDB;
var
  lBez : String;
  lZahl : String;
  lBool : String;
  lFarbe : String;
  lDat : String;
  lStr : String;

begin
  ADOQuery1.Active := false;
  ADOQuery1.SQL.Text := 'SELECT * FROM TESTTAB INNER JOIN FREMDTAB ON (FREMDTAB.ID = ' +
                        'TESTTAB.FARBE) WHERE ZAHL = ' + IntToStr(2);
  ADOQuery1.Active := true;

  if not ADOQuery1.IsEmpty then begin
    while not ADOQuery1.EOF do begin
      lBez := ADOQuery1.FieldByName('Bezeichnung').AsString;
      lZahl := ADOQuery1.FieldByName('Zahl').AsString;
      lBool := ADOQuery1.FieldByName('Bool').AsString;
      lDat := ADOQuery1.FieldByName('Datum').AsString;
      //Fehlermeldung: 'Feld 'Farbe' wurde nicht gefunden!
      lFarbe := ADOQuery1.FieldByName('Farbe').AsString;
      lStr := 'Bezeichnung: ' + lBez + ' Zahl: ' + lZahl + ' Bool: ' + lBool +
      ' Datum: ' + lDat + 'Farbe: ' + lFarbe;
      ShowMessage(lStr);
      ADOQuery1.Next;
    end;
  end;
  ADOQuery1.First;
  ADOQuery1.Active := false;
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: ADO, Datensatz suchen inkl. Fremdtabelle

  Alt 17. Sep 2007, 09:30
-Schau dir mal im Feldeditor die Bezeichnung des Feldes an
-Ersetze das * mal durch die Feldliste
Markus Kinzler
  Mit Zitat antworten Zitat
bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#9

Re: ADO, Datensatz suchen inkl. Fremdtabelle

  Alt 17. Sep 2007, 09:40
Vielleicht noch zur Ergänzung --> Aufbau meiner TestDB:

http://www.bos.at/downloads/TestTab.jpg
http://www.bos.at/downloads/FremdTab.jpg
http://www.bos.at/downloads/Bez.jpg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: ADO, Datensatz suchen inkl. Fremdtabelle

  Alt 17. Sep 2007, 09:55
Versuch mal:
SQL-Code:
SELECT
    Bezeichnung, Zahl, Bool, Datum, Farbe
FROM
    TESTTAB
       INNER JOIN FREMDTAB ON FREMDTAB.ID = TESTTAB.FARBE
WHERE ...
BTW. Ich würde das Feld Bool anders Nennen.
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 05:21 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