Einzelnen Beitrag anzeigen

daNiii

Registriert seit: 10. Nov 2008
98 Beiträge
 
Turbo Delphi für Win32
 
#1

knifflige KriterienAbfrage einer Datenbank!

  Alt 15. Apr 2009, 11:17
Datenbank: Access • Version: 2007 • Zugriff über: SQL... siehe unten
HI!!!
hier mal eine sehr knifflige aufgabenstellung!
ich weis auch gar nicht ob es für mein Problem überhaupt eine Lösung gibt.
Hierbei handelt es sich um ein Programm, welches einen zeigt für welche Seminare man angemeldet ist und welche Seminare man nicht besucht.
Die Struktur der DAtenbank findest du im Anhang.

Ausgangssituation: ich habe bereits ein Listview erstellt, in dem alle Seminare angezeigt werden bei denen Der User angemeldet wird.

Problem: ich habe ein zweites Listview, in dem sollte alle übrigen Seminare (bei denen der User nicht angemeldet ist)angezeigt werden.

Hier mein Programmieransatz:

Delphi-Quellcode:
 
//erstes Listview: funktioniert problemlos
       adoquery1.close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('SELECT Anmeldungen.SID, Seminare.Seminartitel, Seminare.Datum, Anmeldungen.AID, Anmeldungen.MID FROM Seminare INNER JOIN Anmeldungen ON Seminare.[SID] = Anmeldungen.[SID] WHERE (((Anmeldungen.MID)=' +inttostr(Mitarbeiter)+')) ORDER BY Seminare.SID');
      adoquery1.open;
      while not adoquery1.eof do begin
        LI := Listview1.items.Add;
        LI.Caption := inttostr(adoquery1.FieldValues['SID']);
        LI.subitems.add(adoquery1.FieldValues['Seminartitel']);
        LI.subitems.add(datetostr(adoquery1.FieldValues['Datum']));
        LI.subitems.add(inttostr(adoquery1.FieldValues['AID']));
        SIDcounter:= SIDcounter +1;
       adoquery1.next;
       end;
       adoquery1.close;

//zweites Listview:
//Der SIDcounter zählt die zeilen im ersten Listview und somit die Anzahl der angemeldeten Seminare
//SID_angemeldet (array Variable) speichert welche Seminare im Listview1 eingetragen sind.
 for I := 1 to SIDcounter do begin
                  SID_angemeldet[I] := strtoint(LI.caption[I]);
                   end;
//SQLCODE(array VAriable): Teile des späteren SQLcodes.
          SQLCODE[1]:= 'and (Seminare.SID <> '+inttostr(SID_angemeldet[1])+') ';
          SQLCODE[2]:= 'and (Seminare.SID <> '+inttostr(SID_angemeldet[2])+') ';
          SQLCODE[3]:= 'and (Seminare.SID <> '+inttostr(SID_angemeldet[3])+') ';
          SQLCODE[4]:= 'and (Seminare.SID <> '+inttostr(SID_angemeldet[4])+') ';
          SQLCODE[5]:= 'and (Seminare.SID <> '+inttostr(SID_angemeldet[5])+') ';
          SQLCODE[6]:= 'and (Seminare.SID <> '+inttostr(SID_angemeldet[6])+') ';
          SQLCODE[7]:= 'and (Seminare.SID <> '+inttostr(SID_angemeldet[7])+') ';
          SQLCODE[8]:= 'and (Seminare.SID <> '+inttostr(SID_angemeldet[8])+') ';
          SQLCODE[9]:= 'and (Seminare.SID <> '+inttostr(SID_angemeldet[9])+') ';
          SQLCODE[10]:= 'and (Seminare.SID <> '+inttostr(SID_angemeldet[10])+') ';



         if SIDcounter = 1 then SQL_code:= SQLCODE[1] else
         if SIDcounter = 2 then SQL_code:= SQLCODE[1] + SQLCODE[2] else
         if SIDcounter = 3 then SQL_code:= SQLCODE[1] + SQLCODE[2] + SQLCODE[3] else
         if SIDcounter = 4 then SQL_code:= SQLCODE[1] + SQLCODE[2] + SQLCODE[3] + SQLCODE[4] else
         if SIDcounter = 5 then SQL_code:= SQLCODE[1] + SQLCODE[2] + SQLCODE[3] + SQLCODE[4] + SQLCODE[5]else
         if SIDcounter = 6 then SQL_code:= SQLCODE[1] + SQLCODE[2] + SQLCODE[3] + SQLCODE[4] + SQLCODE[5] + SQLCODE[6] else
         if SIDcounter = 7 then SQL_code:= SQLCODE[1] + SQLCODE[2] + SQLCODE[3] + SQLCODE[4] + SQLCODE[5] + SQLCODE[6] + SQLCODE[7] else
         if SIDcounter = 8 then SQL_code:= SQLCODE[1] + SQLCODE[2] + SQLCODE[3] + SQLCODE[4] + SQLCODE[5] + SQLCODE[6] + SQLCODE[7] + SQLCODE[8]else
         if SIDcounter = 9 then SQL_code:= SQLCODE[1] + SQLCODE[2] + SQLCODE[3] + SQLCODE[4] + SQLCODE[5] + SQLCODE[6] + SQLCODE[7] + SQLCODE[8] + SQLCODE[9]else
         if SIDcounter = 10 then SQL_code:= SQLCODE[1] + SQLCODE[2] + SQLCODE[3] + SQLCODE[4] + SQLCODE[5] + SQLCODE[6] + SQLCODE[7] + SQLCODE[8] + SQLCODE[9] + SQLCODE[10] ;


//hier der kniffelige Teil...funktioniert nicht.
          adoquery1.Close;
        adoquery1.close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('SELECT distinct Seminare.SID, Seminare.Seminartitel, Seminare.Datum FROM Seminare INNER JOIN (Mitarbeiter INNER JOIN Anmeldungen ON Mitarbeiter.MID = Anmeldungen.MID) ON Seminare.SID = Anmeldungen.SID WHERE ((Mitarbeiter.MID)<>' +inttostr(Mitarbeiter)+')'+SQL_Code+' ORDER BY Seminare.SID)');
      adoquery1.open;
      while not adoquery1.eof do begin
        LI := Listview2.items.Add;
        LI.Caption := inttostr(adoquery1.FieldValues['SID']);
        LI.subitems.add(adoquery1.FieldValues['Seminartitel']);
        LI.subitems.add(datetostr(adoquery1.FieldValues['Datum']));

       adoquery1.next;
       end;
       adoquery1.close;
  Mit Zitat antworten Zitat