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;