Autor Beitrag
Stocki1990
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 17.05.09 17:20 
Servus Leute!

Mein Schulprojekt bzw. Hausübung größeren Ausmaßes nähert sich allmählich dem Ende zu. Nur 1 kleiner Punkt muss nun nur noch funktionieren.

Es gibt eine Datenbank-Tabelle namens "KV", wo die Namen und Klassen der Lehrer (Klassenvorstände) gespeichert werden.

Das Hinzufügen von Lehrern funktioniert bereits einwandfrei.

Der Lehrer einer bestimmten Klasse wird nun im Label angezeigt.
- zB 1AHK hat Lehrer XY

Wenn ich jedoch eine Klasse auswähle, die noch keinen Lehrer zugeteilt hat, wird im Label trotzdem ein Lehrername angezeigt.

Wenn die Klasse keinen KV hat, soll auch keiner angezeigt werden.

Hier wäre einmal mein Quelltext:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure Tform1.lehrereinlesen();
var

Alle : string;

begin
   ADOQuery1.close;
 ADOQuery1.SQL.clear;
 ADOQuery1.SQL.Add('SELECT * FROM KV where Klasse = '  + QuotedStr(Klass));
 ADOQuery1.Open;

 While not ADOQuery1.Eof do begin
 lb_kv.caption := Adoquery1.fieldvalues['KVName'];
   ADOQuery1.Next;
 end;
   Adoquery1.close;

Alle := form1.cb_schuler.Items[form1.cb_schuler.ItemIndex];

    if Alle = 'Alle' then
 begin
lb_kv.caption := '';
 end;

end;


Da ich in meiner Combobox einen Eintrag namens "Alle" habe, wo alle Schüler und Klassen angezeigt werden, werden natürlich keine Lehrer angezeigt.

Ich hoffe, dass Ihr mir auch hierbei wieder helfen könnt. - Dann wär's das für dieses Wochenende ;)

Schönen Sonntag noch wünscht euch
Christoph

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 17.05.09 17:27 
Also wenn ich Dein Problem gerade richtig überblicke, dann müsste doch
ausblenden SQL-Anweisung
1:
ADOQuery1.SQL.Add('SELECT * FROM KV where Klasse = '+QuotedStr(Klass)+' and not isempty(KVName)');					

reichen - oder?

Oder habe ich da jetzt gerade SQL- und Delphi-Code durcheinandergebracht?
Stocki1990 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 17.05.09 17:36 
Danke für deine schnelle Antwort.
Leider funktioniert dein angegebener Code nicht. :(

1AHK hat den Lehrer XY (steht so in der Datenbank)
1BHK hat auch, laut Label den Lehrer XY (steht nicht in der Datenbank)

Grüße Christoph
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: So 17.05.09 17:43 
Für den Fall das du keinen Lehrer in der Datenbank findest wird das Label auf keinen neuen Wert gesetzt, daher zeigt es dir immer noch das letzte Ergebnis an.

Füg doch mal am Anfang deiner Funktion dies ein:
ausblenden Delphi-Quelltext
1:
lb_kv.caption := '';					
Stocki1990 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 17.05.09 18:10 
user profile iconSvenAbeln hat folgendes geschrieben Zum zitierten Posting springen:
Für den Fall das du keinen Lehrer in der Datenbank findest wird das Label auf keinen neuen Wert gesetzt, daher zeigt es dir immer noch das letzte Ergebnis an.

Füg doch mal am Anfang deiner Funktion dies ein:
ausblenden Delphi-Quelltext
1:
lb_kv.caption := '';					

Wow danke - Es funktioniert. Bin echt erstaunt, dass es sich nur um 1 Programmzeile handelt. Bin an diesem Problem ziemlich lange gesessen.

Grüße Christoph

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 17.05.09 18:15 
Und jetzt einmal im Ganzen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure Tform1.lehrereinlesen();
begin
  lb_kv.caption := '';
  ADOQuery1.close;
  ADOQuery1.SQL.Text := 'SELECT KVName FROM KV WHERE Klasse = :klasse';
  ADOQuery1.Parameters.ParamByName('klasse').Value := Klass;
  ADOQuery1.Open;
  While not ADOQuery1.Eof do begin
    lb_kv.caption := Adoquery1.FieldByName('KVName').Value;
    ADOQuery1.Next;
  end;
  Adoquery1.close;
end;

Nach meinem Dafürhalten müsste das so funktionieren (ungetestet). Aber können das denn mehrere Lehrer sein? Wenn ja, ist ein Label ein eher ungeeignetes Ausgabemedium, ansonsten kann man sich das Next sparen.