AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Unknown column bei TSQLQuery auf zwei Tabellen (Left join)

Unknown column bei TSQLQuery auf zwei Tabellen (Left join)

Ein Thema von michiww · begonnen am 11. Mai 2009 · letzter Beitrag vom 11. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2   
michiww

Registriert seit: 9. Mai 2007
Ort: Franken
17 Beiträge
 
Delphi 10.4 Sydney
 
#1

Unknown column bei TSQLQuery auf zwei Tabellen (Left join)

  Alt 11. Mai 2009, 09:46
Datenbank: MySql • Version: 5.0.x • Zugriff über: dbexpress
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:
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;
Vielen Dank
Michael

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.804 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi

  Alt 11. Mai 2009, 09:53
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;
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.023 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi

  Alt 11. Mai 2009, 09:54
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:
MySQL Join


Aber so nebenbei, die alte Join-Syntax sollte trotzdem gehen.


Heiko
Heiko
  Mit Zitat antworten Zitat
michiww

Registriert seit: 9. Mai 2007
Ort: Franken
17 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi

  Alt 11. Mai 2009, 10:56
Zitat von hoika:
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:
MySQL Join


Aber so nebenbei, die alte Join-Syntax sollte trotzdem gehen.


Heiko
Hallo, der Tipp von Heiko funktioniert zwar (Danke!) aber nur weil hier keine WHERE clause mehr Verwendung findet, sobald ich auf ein Feld der zweiten Tabelle zugreifen möchte (z.B. rights.sysID) kommt nach wie vor eine Exception (nun "Unknown column rights.sysID") , sogar wenn ich vorher beim Select "SELECT *" angegeben habe.

SQL-Code:
SELECT *
FROM allocrights
JOIN rights ON allocrights.rightID=rights.rightID
WHERE allocrights.userID=5910 And rights.sysID=23;
;
  Mit Zitat antworten Zitat
michiww

Registriert seit: 9. Mai 2007
Ort: Franken
17 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi

  Alt 11. Mai 2009, 12:07
Hallo, es muss sich wohl um einen Fehler in Delphi 2009 handeln, da meine Datenbank nur folgendes Kommando bekommt.
SELECT * FROM allocrights und nicht
SELECT * FROM allocrights, rights Hat den jemand schon mal erfolgreich ein SQL Select Statement auf zwei Tabellen mit einer TSQLQuery abgesetzt?
Vielen Dank!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.804 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi

  Alt 11. Mai 2009, 12:10
Müsste imho auch
SELECT allocrights.*, rights.* FROM allocrights, rights; Wie gesagt machen Tabellenaliases da ganze übersichtlicher
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.023 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi

  Alt 11. Mai 2009, 12:33
Hallo,

liegt viell. am DBExpress.

Hier gab es auch Probleme.
siehe letzter Eintrag.
MySQL DBExpess

Heiko
Heiko
  Mit Zitat antworten Zitat
michiww

Registriert seit: 9. Mai 2007
Ort: Franken
17 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi

  Alt 11. Mai 2009, 12:33
Zitat von mkinzler:
Müsste imho auch
SELECT allocrights.*, rights.* FROM allocrights, rights; Wie gesagt machen Tabellenaliases da ganze übersichtlicher
Hallo mkinzler, habe ich schon probiert auch mit Aliases macht aber keinen Unterschied.
Der Fehler wandert sogar mit, wenn ich
SQL-Code:
SELECT a.*, r.*
FROM rights r, allocrights a
WHERE a.rightID=r.rightID AND a.userID=5910 And r.sysID=23;
ausführe kommt Unknown column a.rightID

Der Fehler wandert sogar mit, wenn ich
SQL-Code:
SELECT a.*, r.*
FROM allocrights a, rights r,
WHERE a.rightID=r.rightID AND a.userID=5910 And r.sysID=23;
ausführe kommt Unknown column r.rightID
d.h. je nachdem welche Tabelle an zweiter Stelle steht wird abgeschnitten und der MySQL Server bringt dann natürlich einen Fehler.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.477 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi

  Alt 11. Mai 2009, 12:45
Zitat:
Memo1.Lines.Add(IntToStr(SQLquery1.RecordCount)); <==== Exception mit Fehler "Unknown column rights.rightID
Darum gilt bei uns Firmenweit die Regel: "RecordCount von TSQLQuery darf nicht genutzt werden".

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.
  Mit Zitat antworten Zitat
michiww

Registriert seit: 9. Mai 2007
Ort: Franken
17 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Unknown column bei TSQLQuery auf zwei Tabellen (Left joi

  Alt 11. Mai 2009, 13:41
Zitat von jbg:
Zitat:
Memo1.Lines.Add(IntToStr(SQLquery1.RecordCount)); <==== Exception mit Fehler "Unknown column rights.rightID
Darum gilt bei uns Firmenweit die Regel: "RecordCount von TSQLQuery darf nicht genutzt werden".

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.
Ja, ist in der Tat so. Folgender Code liefert bei mir nun das richtige Ergebnis. Vielen Dank jbg !!!
Ich werde als Delphi 2009 Kunde dazu ein Ticket bei embarcadero aufmachen, die sollen das mal endlich fixen.

SELECT COUNT(*) FROM rights, allocrights WHERE allocrights.rightID=rights.rightID AND allocrights.userID=5910 And rights.sysID=23;
Delphi-Quellcode:
SQLquery1.Open;
Memo1.Lines.Add(IntToStr(SQLquery1.FieldByName('count(*)').AsInteger));
SQLquery1.Close;
[edit=mkinzler]Delphi-Tag ergänzt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf