Mich plagt folgendes Problem:
In einem Formular gibt der Benutzer Werte ein. In einem Feld muß geprüft werden, ob der Wert nicht bereits vergeben ist. Diese Prüfung läuft in der Prozedur ab, die ausgeführt wird, wenn der OK-Button geklickt wird. Ob dieser Wert nicht bereits vergeben ist, weiß der Server. Deshalb wird eine Nachricht über ein TClientSocket-Objekt an den Server geschickt. Dieser antwortet auch und die Antwort kommt beim Client an. Das SockRead-Ereignis wird ausgelöst. Aber wie synchronisiere ich diese Antwort mit dem OK-Button-Event?
Etwas konkreter:
<PRE>
OK-Button-Klick Prozedur
var
TimeOut: Boolean;
begin
...
if IstWertVergeben(EingabeFeld.Text, TimeOut) then begin
if TimeOut then begin
MessageDlg(FehlermeldungTimeOut);
end
else begin
MessageDlg(FehlermeldungBereitsBelegt);
end;
end
else begin
ModalResult := mrOk;
end;
end;</PRE>
Die Funktion IstWertVergeben() liefert False zurück falls der Wert nicht vergeben ist und True, wenn er vergeben ist. Im True-Fall muß aber auch TimeOut ausgewertet werden. Der Default-Rückgabewert ist True. Es könnte ja auch sein der Server antwortet nicht. Dafür brauche ich einen Timeout. Die Funktion sieht ungefähr so aus:
<PRE>
function IstWertVergeben(Wert: String; var TimeOut: Boolean): Boolean;
begin
Result := True;
TimeOut := False;
Sende Anfrage
Warte auf Antwort oder Timeout
Im Falle von Timeout
TimeOut := True;
else
Result := ServerAntwort;
end;</PRE>
Meine Probleme sind: Wie bekomme ich einen Timeout von ca. 15 Sek. hin und wie bekomme ich die die Serverantwort aus dem OnRead-Ereignis dem Ergebnis der Funktion IstWertVergeben() zugewiesen?
Oder gibt es gar eine komplett andere Lösung?
Gruß
Wolfgang
In einem Formular gibt der Benutzer Werte ein. In einem Feld muß geprüft werden, ob der Wert nicht bereits vergeben ist. Diese Prüfung läuft in der Prozedur ab, die ausgeführt wird, wenn der OK-Button geklickt wird. Ob dieser Wert nicht bereits vergeben ist, weiß der Server. Deshalb wird eine Nachricht über ein TClientSocket-Objekt an den Server geschickt. Dieser antwortet auch und die Antwort kommt beim Client an. Das SockRead-Ereignis wird ausgelöst. Aber wie synchronisiere ich diese Antwort mit dem OK-Button-Event?
Etwas konkreter:
<PRE>
OK-Button-Klick Prozedur
var
TimeOut: Boolean;
begin
...
if IstWertVergeben(EingabeFeld.Text, TimeOut) then begin
if TimeOut then begin
MessageDlg(FehlermeldungTimeOut);
end
else begin
MessageDlg(FehlermeldungBereitsBelegt);
end;
end
else begin
ModalResult := mrOk;
end;
end;</PRE>
Die Funktion IstWertVergeben() liefert False zurück falls der Wert nicht vergeben ist und True, wenn er vergeben ist. Im True-Fall muß aber auch TimeOut ausgewertet werden. Der Default-Rückgabewert ist True. Es könnte ja auch sein der Server antwortet nicht. Dafür brauche ich einen Timeout. Die Funktion sieht ungefähr so aus:
<PRE>
function IstWertVergeben(Wert: String; var TimeOut: Boolean): Boolean;
begin
Result := True;
TimeOut := False;
Sende Anfrage
Warte auf Antwort oder Timeout
Im Falle von Timeout
TimeOut := True;
else
Result := ServerAntwort;
end;</PRE>
Meine Probleme sind: Wie bekomme ich einen Timeout von ca. 15 Sek. hin und wie bekomme ich die die Serverantwort aus dem OnRead-Ereignis dem Ergebnis der Funktion IstWertVergeben() zugewiesen?
Oder gibt es gar eine komplett andere Lösung?
Gruß
Wolfgang
Comment