![]() |
Datenbank: MySql • Version: 5.0.x • Zugriff über: dbexpress
Unknown column bei TSQLQuery auf zwei Tabellen (Left join)
Hallo, ich bin von Zeos/Delphi 2007 auf dbexpress/Delphi 2009 umgestiegen und nun bald am verzweifeln, ich hoffe mir kann von Euch jemand helfen!
Folgendes kleines SQL Statement liefert mir eine Exception unter Delphi 2009, funktioniert aber prima mit dem mysql Client aber auch mit dem in Delphi integrierten Datenexplorer. Der Fehler tritt nur auf wenn ich zwei Tabellen verbinde (hier ein Left Join). Als Fehlermeldung kommt "Unknown column rights.rightID in Where clause". Das Feld rights.rightID gibt es aber in der Tabelle rights. Der Fehler kommt auch nur bei einer TSQLQuery bei einer TSQLSimpleDataSet Abfrage funktioniert es ebenfalls ohne Fehler.
Delphi-Quellcode:
Vielen Dank
procedure TForm2.Button1Click(Sender: TObject);
begin SQLquery1.SQL.Text:='SELECT allocrights.rightID, rights.rightID, allocrights.userID FROM allocrights, rights WHERE allocrights.rightID=rights.rightID'; SQLquery1.Open; Memo1.Lines.Add(SQLquery1.Text); Memo1.Lines.Add(IntToStr(SQLquery1.RecordCount)); <==== Exception mit Fehler "Unknown column rights.rightID SQLquery1.Close; end; Michael [edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit] |
Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi
Wird vielleicht Groß-/Kleinschreibung unterschieden
BTW: Ich würde mit Tabellenaliasen arbeiten
SQL-Code:
SELECT
a.rightID, r.rightID, a.userID FROM allocrights a, rights r WHERE a.rightID=r.rightID; |
Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi
Hallo,
ich würde eh die "neue" Syntax nehmen
SQL-Code:
SELECT
allocrights.rightID, rights.rightID, allocrights.userID FROM allocrights JOIN rights on allocrights.rightID=rights.rightID Ev. heisst das bei MySQL auch INNER JOIN. Sie auch hier: ![]() Aber so nebenbei, die alte Join-Syntax sollte trotzdem gehen. Heiko |
Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi
Zitat:
SQL-Code:
;
SELECT *
FROM allocrights JOIN rights ON allocrights.rightID=rights.rightID WHERE allocrights.userID=5910 And rights.sysID=23; |
Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi
Hallo, es muss sich wohl um einen Fehler in Delphi 2009 handeln, da meine Datenbank nur folgendes Kommando bekommt.
SQL-Code:
und nicht
SELECT * FROM allocrights
SQL-Code:
Hat den jemand schon mal erfolgreich ein SQL Select Statement auf zwei Tabellen mit einer TSQLQuery abgesetzt?
SELECT * FROM allocrights, rights
Vielen Dank! |
Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi
Müsste imho auch
SQL-Code:
Wie gesagt machen Tabellenaliases da ganze übersichtlicher
SELECT allocrights.*, rights.* FROM allocrights, rights;
|
Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi
Hallo,
liegt viell. am DBExpress. Hier gab es auch Probleme. siehe letzter Eintrag. ![]() Heiko |
Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi
Zitat:
Der Fehler wandert sogar mit, wenn ich
SQL-Code:
ausführe kommt Unknown column a.rightID
SELECT a.*, r.*
FROM rights r, allocrights a WHERE a.rightID=r.rightID AND a.userID=5910 And r.sysID=23; Der Fehler wandert sogar mit, wenn ich
SQL-Code:
ausführe kommt Unknown column r.rightID
SELECT a.*, r.*
FROM allocrights a, rights r, WHERE a.rightID=r.rightID AND a.userID=5910 And r.sysID=23; d.h. je nachdem welche Tabelle an zweiter Stelle steht wird abgeschnitten und der MySQL Server bringt dann natürlich einen Fehler. |
Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi
Zitat:
Denn eine TSQLQuery muss den SQL-Ausdruck parsen um das "Count(*)" an der richtigen Stelle einfügen zu können. Und dieser Parser ist komplett überfordert, wenn er auf einen JOIN trifft. Zudem wird unter bestimmten Umständen auch mal die gesamte WHERE Klausel weggelassen, was dann natürlich zu völlig falschen Daten führt. Also besser einen eigenen "SELECT COUNT(*)" abfeuern. Damit ist man auf der sicheren Seite. |
Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi
Zitat:
Ich werde als Delphi 2009 Kunde dazu ein Ticket bei embarcadero aufmachen, die sollen das mal endlich fixen.
SQL-Code:
SELECT COUNT(*) FROM rights, allocrights WHERE allocrights.rightID=rights.rightID AND allocrights.userID=5910 And rights.sysID=23;
Delphi-Quellcode:
[edit=mkinzler]Delphi-Tag ergänzt Mfg, mkinzler[/edit]
SQLquery1.Open;
Memo1.Lines.Add(IntToStr(SQLquery1.FieldByName('count(*)').AsInteger)); SQLquery1.Close; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz