AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi bin am verzweifeln... select abfragen miteinander kombinieren???
Thema durchsuchen
Ansicht
Themen-Optionen

bin am verzweifeln... select abfragen miteinander kombinieren???

Offene Frage von "DeddyH"
Ein Thema von Serienchiller · begonnen am 15. Jun 2011 · letzter Beitrag vom 17. Jun 2011
Antwort Antwort
Seite 6 von 8   « Erste     456 78      
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#51

AW: bin am verzweifeln... select abfragen miteinander kombinieren???

  Alt 16. Jun 2011, 15:04
..., weil für alle Kombinationen der Checkboxen eine eigene Abfrage zu basteln ist doch zu aufwendig.
Wie gesagt, muss er ja gar nicht, es ändert sich lediglich die WHERE-Klausel je nach Stand der Checkboxen.
OK, dann hab ich was überlesen. Dachte das läuft jetz hinaus auf:

Delphi-Quellcode:
if cb1.Checked and not cb2.Checked and not cb3.Checken then...
if not cb1.Checked and cb2.Checked and not cb3.Checken then...
if not cb1.Checked and not cb2.Checked and cb3.Checken then...
if cb1.Checked and cb2.Checked and not cb3.Checken then...
if cb1.Checked and not cb2.Checked and cb3.Checken then...
if not cb1.Checked and cb2.Checked and cb3.Checken then...
if cb1.Checked and cb2.Checked and cb3.Checken then...
und jedes mal ein eigenes SQL-Statement basteln mit veränderten Tabellen und veränderter Where-Bedingung...
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#52

AW: bin am verzweifeln... select abfragen miteinander kombinieren???

  Alt 16. Jun 2011, 15:04
Genau, lass die WHERE-Klausel voerst ganz weg, JOINe alle benötigten Tabellen der Reihe nach zusammen und kontrolliere das Ergebnis (das sich nicht ändern sollte). Danach baust Du Dir dynamisch Deinen Filter zusammen und bist fertig.

[edit] @Jumpy: schau nochmal auf der ersten Seite nach, da wurde auch nur die WHERE-Klausel zusammengesetzt. Das einzige Schwierige dabei ist, dass sie halt mit WHERE beginnen muss und danach dann nur noch ORs folgen. Aber das bekommt man mit der in meinem Beispiel verwendeten Boolean-Variable ja in den Griff. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (16. Jun 2011 um 15:06 Uhr)
  Mit Zitat antworten Zitat
Serienchiller

Registriert seit: 15. Jun 2011
Ort: Wurzen
40 Beiträge
 
Delphi 7 Professional
 
#53

AW: bin am verzweifeln... select abfragen miteinander kombinieren???

  Alt 16. Jun 2011, 15:10
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 = 'alleanzeigenthen
  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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#54

AW: bin am verzweifeln... select abfragen miteinander kombinieren???

  Alt 16. Jun 2011, 15:13
das mit dem left join das hätte mir gestern mal jemand sagen müssen...
Wenn ich gewusst hätte, wie Deine Ergebnismenge aussehen soll, hätte ich Dir das gestern auch schon gesagt. Der entscheidende Hinweis kam ja erst heute
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Serienchiller

Registriert seit: 15. Jun 2011
Ort: Wurzen
40 Beiträge
 
Delphi 7 Professional
 
#55

AW: bin am verzweifeln... select abfragen miteinander kombinieren???

  Alt 16. Jun 2011, 15:30
war halt eher ein kommunikationsproblem...
aber jetzt wo ich das mit den joins richtig verstanden habe kann ich mein programm auch um einige datasets erleichtern war ne schwere geburt aber hat sich gelohnt...

danke nochmal an alle die so fleißig mitgeraten haben
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#56

AW: bin am verzweifeln... select abfragen miteinander kombinieren???

  Alt 16. Jun 2011, 15:35
Um sehr mehr Tabellen gejoint werden, um so übersichtlicher werden explitite Joins ( im Vergleich zu der impliziten Variante). Zudem man nur bei Oracle implizit outerjoinen kann (+); möglichweise können das auch andere DBMS, ist aber kein Standard.
Markus Kinzler
  Mit Zitat antworten Zitat
Serienchiller

Registriert seit: 15. Jun 2011
Ort: Wurzen
40 Beiträge
 
Delphi 7 Professional
 
#57

AW: bin am verzweifeln... select abfragen miteinander kombinieren???

  Alt 17. Jun 2011, 08:29
so jetzt hab ich doch noch ein problem. und zwar zeigt er mir seit heute früh für jede verbindung die in der zwischentabelle steht, jeden ds einmal an. also habe ich jetzt teilweise 4 oder bis zu 8 mal die selben bilder untereinander stehen. gestern nachmittag war das irgendwie nicht so...

hier meine anzeigen prozedur zum jetzigen zeitpunkt:

Delphi-Quellcode:
procedure anzeigen(befehl: String);
var
  schon: boolean;
begin
  schon:= false;
  dm.dsetbilder.Close;
  dm.dsetbilder.SelectSQL.Clear;
  dm.dsetbilder.SelectSQL.Add('select * 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 ');
  if frmhaupt.CheckBox1.Checked then // bild
  begin
    dm.dsetbilder.SelectSQL.Add('where b.name containing upper(:WERT) ');
    schon:= true;
  end;
  if frmhaupt.CheckBox2.Checked then // programm
  begin
    if schon then dm.dsetbilder.SelectSQL.Add('or Upper(p.namep) '+
      'containing UPPER(:WERT) ')
    else dm.dsetbilder.SelectSQL.Add('where Upper(p.namep) '+
      'containing UPPER(:WERT) ');
    schon:= true;
  end;
  if frmhaupt.CheckBox3.Checked then // tag
  begin
    if schon then dm.dsetbilder.SelectSQL.Add('or Upper(t.namet) '+
      'containing UPPER(:WERT) ')
    else dm.dsetbilder.SelectSQL.Add('where Upper(t.namet) '+
      'containing UPPER(:WERT) ');
    schon:= true;
  end;
  if befehl <> 'alleanzeigenthen
    dm.dsetbilder.ParamByName('WERT').AsString := befehl;

  dm.dsetbilder.Open;
  if dm.dsetbilder.IsEmpty then showmessage('Keine Icons gefunden');
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#58

AW: bin am verzweifeln... select abfragen miteinander kombinieren???

  Alt 17. Jun 2011, 08:43
Wie sieht denn das resultierende SQL aus?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Serienchiller

Registriert seit: 15. Jun 2011
Ort: Wurzen
40 Beiträge
 
Delphi 7 Professional
 
#59

AW: bin am verzweifeln... select abfragen miteinander kombinieren???

  Alt 17. Jun 2011, 08:55
Delphi-Quellcode:
select * 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
where b.name containing upper(:WERT)
ps: wie macht man sql tags?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#60

AW: bin am verzweifeln... select abfragen miteinander kombinieren???

  Alt 17. Jun 2011, 08:57
Hat die Tabelle bilder einen Primärschlüssel? SQL-Tags gehen mit [ code=sql ][ /code ] (ohne die Leerzeichen).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 8   « Erste     456 78      


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 00:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz