Autor Beitrag
rob87
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mi 03.12.08 12:07 
Hallo,

ich bin schon wieder da. Ich hoffe nun, ein letztens Mal für dieses Projekt. Aber nun gehts bissal ans Eingemachte:

Ich hab in einer ComboBox mehrere Werte enthalten. Nun soll anhand dieser Werte schleifenartig Verarbeitungen vorgenommen werden. Dabei muss die ComboBox-Auswahl immer um eins erhöht werden. Wenn man beim letzten EIntrag is, soll von vorne begonnen werden. Ich poste mal einen Code-Ausschnitt, dannn wirds hoffentlich klarer:
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:
26:
27:
// Die Tabellennamen etc. sind Beispielwerte und enstprechen nicht dem Original
var
  Note, i : Integer;
begin
for i := 0 to irgendwas do
  begin

      repeat
        if (Noten_je_Schueler.Locate('Name',CB_Auswahl_Schueler.Text,[loPartialKey])=true) then
        begin
          Note := Noten_je_Schueler.FieldByName('Note').Value;
        end;
      until (Noten_je_Schueler.Eof) or (Note <> 0) ;

      //Wenn der DS-Zeiger am Ende der Tabelle angekommen ist, wird beim ersten weitergemacht    
      if Noten_je_Schueler.Eof then
        Noten_je_Schueler.First
      else begin
        Noten_je_Schueler.Next;
        if Noten_je_Schueler.Eof then
          Noten_je_Schueler.First
        end;
  
  //Verarbeitung des Wertes "Note"

  end;//for KW ...
end;

Also es wird aus der CB_Auswahl_Schueler ein Schueler ausgewaehlt, bei welchem die Verarbeitung gestertart werden soll. Dann wird geschaut, welche Note dieser Schueler hat. Anschließend wird die Note weiterverarbeitet.

Mein Problem ist nun. Er liest aus der ComboBox immer den selben Wert! Ich bräuchte einen Code in der Art:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if CB_Auswahl_Schueler = Eof
  CB_Auswahl_Schueler.First;
else
  CB_Auswahl_Schueler.Next
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 03.12.08 12:24 
dann antworte ich dir mal wieder ;)

willst du wirklich IMMER wieder von vorne anfangen ?? das gibt dann doch eine endlosschleife ...

oder willst du immer alle einträge durchlaufen, egal an welcher stelle man anfängt ?
z.b. CoBo-inhalt

0 Name1
1 Name2
2 Name3
3 Name4
4 Name5

wenn man z.b. Name3 auswählt, sollen trotzdem alle 5 Einträge verarbeitet werden ?

dann solltest du dir mal ItemCount, itemindex von der Cobo in der hilfe angucken ;)
und dann mal in etwa so rangehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
merker := cobo.items.itemindex;
for i := 0 to cobo.items.count-1 do
begin
 note := 0;
 if (Noten_je_Schueler.Locate('Name', cobo.items.strings[i], [loPartialKey])=true) then
 begin
  Note := Noten_je_Schueler.FieldByName('Note').Value;
 end;
 if note > 0 then
 //Verarbeitung des Wertes "Note", falls gefunden
end;

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mi 03.12.08 12:43 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
dann antworte ich dir mal wieder ;)

willst du wirklich IMMER wieder von vorne anfangen ?? das gibt dann doch eine endlosschleife ...

oder willst du immer alle einträge durchlaufen, egal an welcher stelle man anfängt ?
z.b. CoBo-inhalt

0 Name1
1 Name2
2 Name3
3 Name4
4 Name5

wenn man z.b. Name3 auswählt, sollen trotzdem alle 5 Einträge verarbeitet werden ?

dann solltest du dir mal ItemCount, itemindex von der Cobo in der hilfe angucken ;)
und dann mal in etwa so rangehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
merker := cobo.items.itemindex;
for i := 0 to cobo.items.count-1 do
begin
 note := 0;
 if (Noten_je_Schueler.Locate('Name', cobo.items.strings[i], [loPartialKey])=true) then
 begin
  Note := Noten_je_Schueler.FieldByName('Note').Value;
 end;
 if note > 0 then
 //Verarbeitung des Wertes "Note", falls gefunden
end;

Ich will solange die Wiederholungen machen, wie der Benutzer es ausgewählt hat
ausblenden Delphi-Quelltext
1:
2:
3:
4:
for i := 0 to irgendwas do  //Irgendwas <= 53
begin
//Verarbeitung
End;


Ich glaub du hast mich bissal anders verstanden. Des sind zwei Schleifen ineinander. Bei der äußeren Schleife soll er die ComboEinträge durchwechsel (praktisch ComboBox.Items.Next oder so *g*)
Und in der inneren Schleife soll er in der DB schauen, wie und ob er die Note zu dem Schueler findet.

Ich schau mir deine Lösung mal an... Aber ich glaub des haut bei mir ned hin. Aber nun erstmal Mahlzeit! :lol:
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 03.12.08 12:48 
ok, dann also
ausblenden Delphi-Quelltext
1:
for i := 0 to cobo.items.count-1 do					

durch deine variante ersetzen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
 if (Noten_je_Schueler.Locate('Name', cobo.items.strings[i], [loPartialKey])=true) then
 begin
  Note := Noten_je_Schueler.FieldByName('Note').Value;
 end;


springt natürlich immer auf den selben dS, da locate immer auf den ersten treffer jumpt.
wenn in der tabelle der name mehrfach mit unterschiedliche noten ist:
Tabelle nach Namn sortieren,
per locate auf den ersten treffer setzen, dann in der tabelle immer next, solange der name noch der gleiche ist

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mi 03.12.08 12:58 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
ok, dann also
ausblenden Delphi-Quelltext
1:
for i := 0 to cobo.items.count-1 do					

durch deine variante ersetzen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
 if (Noten_je_Schueler.Locate('Name', cobo.items.strings[i], [loPartialKey])=true) then
 begin
  Note := Noten_je_Schueler.FieldByName('Note').Value;
 end;


springt natürlich immer auf den selben dS, da locate immer auf den ersten treffer jumpt.
wenn in der tabelle der name mehrfach mit unterschiedliche noten ist:
Tabelle nach Namn sortieren,
per locate auf den ersten treffer setzen, dann in der tabelle immer next, solange der name noch der gleiche ist


Ich glaub ned, dass des bei mir so hinhaut. Denn ich brauch zwar eine Art Combobox.items.next oder combobox.eof-prüfung
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 03.12.08 13:01 
Dann setz doch den ItemIndex der ComboBox. Am Ende bist Du, wenn der ItemIndex Items.Count - 1 entspricht.
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 03.12.08 13:10 
Combobox.items.next gibts nich, dafür machste

ausblenden Delphi-Quelltext
1:
2:
if (combobox.items.Count - 1) <= (combobox.items.index + 1) then
 combobox.items.index := combobox.items.index + 1;


endeprüfung wie DeddyH bereits gesagt hat

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mi 03.12.08 13:59 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
Combobox.items.next gibts nich, dafür machste

ausblenden Delphi-Quelltext
1:
2:
if (combobox.items.Count - 1) <= (combobox.items.index + 1) then
 combobox.items.index := combobox.items.index + 1;


endeprüfung wie DeddyH bereits gesagt hat

Ok. Klar. Stimmt. Merci

Noch ne kurze Frage. Wasn der UNterschied zwischen CB.Items.Index und CB.ItemIndex ?
Des muss doch eigentlich ItemIndex heißen, oder?
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 03.12.08 15:02 
jo, stimmt, tippfehler von mir,
combobox.items.index
gibts gar net

(sry, bin alt und der Kopf funzt nicht mehr so wie früher :mrgreen:)

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mi 03.12.08 15:08 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
jo, stimmt, tippfehler von mir,
combobox.items.index
gibts gar net

(sry, bin alt und der Kopf funzt nicht mehr so wie früher :mrgreen:)


Ned tragisch. Aber nun funktionierts alles so wies so. Nochmal danke an alle, dass ihr mich solang ausgehalten habt :-)