Einzelnen Beitrag anzeigen

TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#1

Dienst/Service bleibt hängen bei StrToFloat()

  Alt 12. Nov 2007, 13:26
Ich habe einen kleinen Dienst geschrieben der eine Datei einliest und diese soll dann später mit einer Datenbank abgeglichen werden.
Jedoch gibt es ein Problem wenn ich die Funktion StrToFloat() verwende dann bleibt der Dienst hängen.

Delphi-Quellcode:
procedure TService1.Execute;
begin
  while NOT Terminated do begin
  //Log=> 'starte update'
  pLoad_File(db_File);
  //... Update routinen
  //Log=> 'beende update'
  end;

end;
Konvertiere ich in der folgenden Prozedur 2 Stings nach Real mit der Funktion 'StrToFloat' so ergibt die Logdatei das der Dienst hängen bleibt.
Zitat:
Log:
starte update
Konvertiere ich nicht mit 'StrToFloat' so sieht die log Datei korrekt aus
Zitat:
Log:
starte update
beende update
Was für ein Problem gibt es mit StroToFloat in einem Dienst/Service, ich raff es nicht!?


Delphi-Quellcode:
Procedure pLoad_File(Var db_File tDbFile);
Var
  FHandle : System.Text;
  Index : Integer;
  strRow : String;
  strID : String;
  strName : String;
  strType : String;
  strSupplier : String;
  strPrice : String;
  strPriceDiv : String;

Begin
  //init
  db_File := nil;
  Index := 0;

  //Länge setzen
  SetLength(db_File, 32768);

  //Einlesen der Artikelinformationen
  Assign(FHandle, FilePath);
  {$I-}
  Reset(FHandle);
  {$I+}
  If IoResult = 0 Then Begin
    While NOT EOF(FHandle) Do Begin
      Readln(FHandle,strRow);
      strID := Copy(strRow,64,6);
      strName := Copy(strRow,1,25);
      strType := Copy(strRow,27,15);
      strSupplier := Copy(strRow,43,3);
      strPrice := Copy(strRow,76,7);
      strPriceDiv := Copy(strRow,136,4);

      db_File[Index].ID := fDeleteChar(' ',fAsciiToAnsi(strID));
      db_File[Index].Name := fAsciiToAnsi(strName);
      db_File[Index].Typ := fAsciiToAnsi(strType);
      db_File[Index].Supplier := fAsciiToAnsi(strSupplier);
      db_File[Index].Price := 0;
      db_File[Index].PriceDiv := 1;

      //Preis
      If (Length(strPrice) > 0) AND fCheckChars(strPrice,'0123456789.') Then
        db_File[Index].Price := StrToFloat(strPrice)
      Else
        db_File[Index].Price := 0.0;

      //Preisdivisor
      If {(Length(strPriceDiv) > 0) AND} fCheckChars(strPriceDiv,'0123456789.') Then
        db_File[Index].PriceDiv := StrToFloat(strPriceDiv)
      Else
        db_File[Index].PriceDiv := 1;

      Inc(Index);
    End;{while}
    Close(FHandle);

  End;{if IoResult}

  //Array auf korrekte Länge abschneiden
  SetLength(db_File, Index);

End;
  Mit Zitat antworten Zitat