so es hat endlich funktioniert. hab auch ein bisl dynamik schon reingebaut. dank dir für deine geduld. das mit dem left join das hätte mir gestern mal jemand sagen müssen...
Delphi-Quellcode:
procedure anzeigen(befehl: String);
begin
dm.dsetbilder.Close;
dm.dsetbilder.SelectSQL.Clear;
if befehl = 'alleanzeigen' then
begin
dm.dsetbilder.SelectSQL.Add('select * from bilder b order '+
'by upper(b.name)');
end
else
begin
dm.dsetbilder.SelectSQL.Clear;
dm.dsetbilder.SelectSQL.Add('select b.* from bilder b left join '+
'zwbildertags x on x.bildid=b.bid left join tags t '+
'on t.tid=x.tagid left join '+
'zwbilderprogramme z on z.bildid=b.bid left join programme p '+
'on p.pid=z.programmid ');
// nur bild
if frmhaupt.CheckBox1.Checked and not frmhaupt.CheckBox2.Checked and
not frmhaupt.CheckBox3.Checked then
dm.dsetbilder.SelectSQL.Add('where b.name containing upper(:WERT) ');
// nur programm
if not frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and
not frmhaupt.CheckBox3.Checked then
dm.dsetbilder.SelectSQL.Add('where Upper(p.namep) containing UPPER(:WERT)');
// nur tag
if not frmhaupt.CheckBox1.Checked and not frmhaupt.CheckBox2.Checked and
frmhaupt.CheckBox3.Checked then
dm.dsetbilder.SelectSQL.Add('where Upper(t.namet) containing UPPER(:WERT)');
// bild und programm
if frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and
not frmhaupt.CheckBox3.Checked then
dm.dsetbilder.SelectSQL.Add('where (p.namep containing UPPER(:WERT) '+
'or b.name containing upper(:WERT)) order by upper(b.name)');
// bild und tag
if frmhaupt.CheckBox1.Checked and not frmhaupt.CheckBox2.Checked and
frmhaupt.CheckBox3.Checked then
dm.dsetbilder.SelectSQL.Add('where (t.namet containing UPPER(:WERT) '+
'or b.name containing upper(:WERT)) order by upper(b.name)');
// programm und tag
if not frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and
frmhaupt.CheckBox3.Checked then
dm.dsetbilder.SelectSQL.Add('where (t.namet containing UPPER(:WERT) or '+
'p.namep containing UPPER(:WERT)) order by upper(b.name)');
// alle 3 zusammen
if frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and
frmhaupt.CheckBox3.Checked then
dm.dsetbilder.SelectSQL.Add('where (t.namet containing UPPER(:WERT) or '+
'p.namep containing UPPER(:WERT) or b.name containing upper(:WERT)) '+
'order by upper(b.name)');
dm.dsetbilder.ParamByName('WERT').AsString := befehl;
end;
dm.dsetbilder.Open;
if dm.dsetbilder.IsEmpty then showmessage('Keine Icons gefunden');
end;