![]() |
Datenbank: Access • Version: 2003 • Zugriff über: ADO/JET
Hilfe bei Endlosschleife
guten morgen leute!
Ja wie der Zufall es so wollte, hat meine mangelnde Erfahrung mit Delphi und Konsorten mich mal wieder in die Enge getrieben. Dieses mal hab ich ein Problem mit einer Endlosschleife. Wäre nett von Euch, wenn ihr mal in meinen Quelltext reinschaun könntet!
Delphi-Quellcode:
mfg, anarkids
procedure TForm1.load(Sender: TObject);
var f: integer; begin //Fenster auf Bildschirmgröße setzen f:=(Width-CLientWidth) div 2; setbounds(-f,-f,Screen.Width+2*f,Screen.Height+2*f); //Stringgrid Überschriften setzen stringgrid1.cells[1,0]:='HTTP'; stringgrid1.cells[2,0]:='SMTP'; stringgrid1.Cells[3,0]:='FTP'; stringgrid1.cells[4,0]:='POP3'; stringgrid1.cells[5,0]:='HTTPS'; end; procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin ado_q2.sql.CommaText := 'SELECT * from Serverdaten'; ado_q2.open; ado_q2.First; sock := TTCPClient.Create(SELF); l := 0; i := 0; while not ado_q2.Eof do begin stringgrid1.Cells[0,ado_q2.recno]:= ado_q2.FieldByName('Servername').asstring; sock.RemoteHost := ado_q2.FieldByName('IPAdresse').AsString; repeat if ado_q2.FieldByName('HTTP').asstring = 'true' then begin Sock.RemotePort := '80'; l := 1; ConnPub; end; if ado_q2.Fieldbyname('HTTPS').asstring = 'true' then begin Sock.RemotePort := '443'; l := 2; ConnPub; end; if ado_q2.FieldByName('POP3').asstring = 'true' then begin sock.RemotePort := '110'; l := 3; ConnPub; end; if ado_q2.fieldbyname('SMTP').asstring = 'true' then begin sock.RemotePort := '25'; l := 4; connpub; end; if ado_q2.FieldByName('FTP').asstring = 'true' then begin sock.RemotePort := '21'; l := 5; connpub; end; i := i + 1; until i=5; ado_q2.Next; end; ado_q2.Close; sock.free; end; procedure TForm1.ConnPub; begin Sock.OnConnect := Connected; Sock.OnError := SocketError; Sock.Active := true; Application.ProcessMessages; Sock.Active := false; end; procedure TForm1.Connected(Sender: TObject); begin stringgrid1.Font.Color := clGreen; stringgrid1.Cells[l,ado_q2.RecNo] := 'Online'; end; |
Re: Hilfe bei Endlosschleife
Hallo anarkids,
sollte die Initialisierung der Variablen i (i := 0) nicht innerhalb der WHILE-Schleife vor dem REPEAT stehen? i wird ständig erhöht aber nie wieder zurückgesetzt. Deshalb funktioniert die Abbruchbedingung (i = 5) ab dem zweiten Durchlauf wahrscheinlich nicht. Gruß Hawkeye |
Re: Hilfe bei Endlosschleife
wiedermal nen typischer anfängerfehler!
großes dankeschön hawkeye!!! recht freundliche grüße anarkids |
Re: Hilfe bei Endlosschleife
Hallo!
Also... Da Du lediglich einen Sock erzeugt, den Du immer wieder "vermatschst" gehe ich davon aus, dass Du Ihn nicht mehr brauchst... Übrigens i und l zu verwenden ist immer schlecht zu lesen... Wofür soll aber die Repeat sein? Warum machst Du das ganze 5 mal? Warum setzt Du i außerhalb der While auf 0 und nicht innerhalb vor der Repeat? Übrigens bin ich nicht sicher, ob der Connect innerhalb so kurzer Zeit (1x Application.Processmessages) schon verbunden ist... Aber eine Endlosschleife sehe ich nicht... Oder doch, klar... Nach der 1. Repeat ist I = 5 wenn Du das nächste mal in die Repeat kommst, ist I immer noch 5 und wird als erstes auf 6 gesetzt.. Somit wird i nie wieder 5... Also immer >= abtesten...Aber wenn Du vor der Repeat i immer auf Null setzt geht es... Was uns zu meiner Frage zurückführt warum 5 Mal? Frank :coder: |
Re: Hilfe bei Endlosschleife
Das Programm scheint zu prüfen, ob ein bestimmter Server ansprechbar ist. Die Wiederholung ist zur Sicherheit da, dass er nicht "aus Versehen" Alarm auslöst, wenn das Verbinden einmal aus Zufall / Paketverlust etc scheitert. Wenn der Server fünf Mal nicht verbindet, dann kann er davon ausgehen, dass er wirklich offline ist.
Zumindest interpretier ich den Code mal so :D |
Re: Hilfe bei Endlosschleife
Zitat:
Zitat:
Der code funktioniert jetzt. Bin halt neu in Delphi und ich weiß selbst, dass man an diesem code noch ne MENGE verändern/verbessern kann. Wollte bloß, dass die endlosschleife weg ist. Jetzt funktioniert es ja auch ganz gut. Trotzdem danke nochmal für die direkte Fragestellung! Zitat:
Trotzem danke euch beiden für die Antworten ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz