Entwickler-Ecke

Datenbanken - Sql-Befehl falsch


D. Annies - Mo 06.04.09 12:30
Titel: Sql-Befehl falsch
Hi, Delpher,

warum ist der folgende SQL-Befehl falsch? Es gibt kein "Meckern", aber er "Hängt sich auf".


Delphi-Quelltext
1:
2:
3:
4:
5:
SQL.Text := format('select B.Titel, count(*) as Anzahl, B.Klasse, L.Kuerzel ' +
         'from "%s" B, "%s" L ', [TbArtikel.tablename, TbLk.tablename])+
         'where (B.Klasse between ''1%'' and ''9%'') or (B.Klasse = ''DaZ'') ' +
          ' and (B.Klasse = L.Klasse) ' +
         'group by B.Klasse, B.Titel, L.Kuerzel';


Wo sind die Spezis - ich habe keine Ahnung,
Detlef


mkinzler - Mo 06.04.09 12:51

Welches DBMS?
Ich würde es mal mit einem expliziten Join versuchen:

Delphi-Quelltext
1:
2:
3:
4:
SQL.Text := format('select B.Titel, count(b.ID) as Anzahl, B.Klasse, L.Kuerzel ' +
         'from "%s" B join "%s" L on L.Klasse = B.Klasse ', [TbArtikel.tablename, TbLk.tablename])+
         'where (B.Klasse between ''1%'' and ''9%'') or (B.Klasse = ''DaZ'') '
         'group by B.Klasse, B.Titel, L.Kuerzel;';

Im Allgemeinen würde ich mal über den Einsatz von (SQL-)Parametern nachdenken


D. Annies - Mo 06.04.09 14:20

Danke, Markus


BenBE - Mo 06.04.09 14:24

In Formatstrings sollte man % escapen (also doppelt schreiben), wenn man ein % im resultierenden String haben möchte.


D. Annies - Mo 06.04.09 19:54

Danke auch an dich, Benny,
Detlef