Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdFTP und falsches Systemdatum + Systemzeit (https://www.delphipraxis.net/80283-tidftp-und-falsches-systemdatum-systemzeit.html)

Andidreas 6. Nov 2006 15:32


TIdFTP und falsches Systemdatum + Systemzeit
 
aloha...

bin grad beim testen schier verzweifelt...


folgendes... ein programm soll in einem bestimmten rythmus ablaufen (z.B. jeden Montag um 22:00:00)
um dies zu erreichen, vergleiche ich das aktuelle datum + uhrzeit mit einem errechneten datum + uhrzeit...
die routinene funktionieren!!!

beim testen bin ich aber auf folgendes problem gestossen...
wenn ich zum testen das datum und die uhrzeit am pc veränder (also z.b. auf 13.11.2006 22:00:00) dann krieg ich jedes mal ein problem beim ini file auslesen (indem sich die ftp daten befinden) und ich kann nicht zum ftp verbinden...

woran liegt das, ist delphi das lesen einer ini datei, oder die TIdFTP Komponente so emfpindlich, das sie es nicht verträgt wenn ich am pc meinem programm ein falsches datum und uhrzeit vorspiele???

shmia 6. Nov 2006 17:41

Re: TIdFTP und falsches Systemdatum + Systemzeit
 
Deine Funktion zum Auslesen der INI-Datei hat einen Bug. (zeig mal Code)
Ich würde einfach einen Button ("jetzt übertragen") aufs Formular setzen, dann brauchst du
die Systemzeit nicht ändern.

Andidreas 7. Nov 2006 07:13

Re: TIdFTP und falsches Systemdatum + Systemzeit
 
hmm das die prozedur nen bug hat glaub ich nicht, aber egal hier mal der code...

Delphi-Quellcode:
function TMain_Form.fnLoadFile() : Boolean;

var
Ini : TMemIniFile;

begin

  If FTP.Connected = True Then
  Begin
    FTP.Quit;
    FTP.Disconnect;
  End;

  Ini := TMemIniFile.Create(ExtractFilePath(Application.ExeName) + 'ProgName.ini');

  FTP.Host := Ini.ReadString('FTP', 'Host', 'NoData');
  FTP.UserName := Ini.ReadString('FTP', 'User', 'NoData');
  FTP.Password := Ini.ReadString('FTP', 'Password', 'NoDate');

  Try
    FTP.Connect;

    If FTP.Connected = True Then
    Begin
      FTP.ChangeDir('/Directory');
      glFileName := fnConvertFileNameFTP();
      FTP.Get(glFileName, 'C:\Temp\' + glFileName,
              True, False);
    End;

  Finally
    FTP.Quit;
    FTP.Disconnect;
  End;
{ DONE : Fehler bei Download von FTP / FileExists??? }
  If Not FileExists('C:\Temp\' + glFileName) Then
  Begin
    prWriteErrMsg('Error while Downloading ZPDMMCIDL File!');
    fnLoadFile := False;
  End
  Else
  Begin
    fnLoadFile := True;
  End;

end;
das mit dem button "geht nicht" bzw. nur einmal...

der ablauf von dem prog is ungefähr so...
-programm wird auf einem server gestartet...
-admin drückt start...
-es erfolgt ein 1. lauf...
-es wird der nächste lauf (also datum und uhrzeit) errechnet...
-das programm wird in denn tray minimiert und da läufts so vor sich hin und überprüft in
regelmässigen abständen die uhrzeit und das datum...
-ist das datum = dem errechneten datum dann arbeitet das programm die bestimmten routinen
wieder ab...

shmia 7. Nov 2006 09:25

Re: TIdFTP und falsches Systemdatum + Systemzeit
 
1.) Du hast vergessen, das Objekt Ini (: TMemIniFile) wieder mit .Free freizugeben.
2.) Du hast 2 Aufgaben a.) einlesen der Parameter aus dem Inifile b.) FTP-Download
diese beiden Aufgaben sollten jeweils getrennt in einer eigenen Procedure/Funktion liegen.
Das verbessert die Test- und Debugbarkeit, da nun jede Aufgabe getrennt getestet/debuggt werden kann.

Andidreas 7. Nov 2006 10:09

Re: TIdFTP und falsches Systemdatum + Systemzeit
 
hmm ok das mit dem freigeben hab ich wirklich vergessen... danke!

aber an dem kann mein fehler imho nicht liegen...

folgende test hab ich gemacht
1) systemdatum und uhrzeit geändert um denn gewünscht test durchführen zu können
2) nach dem ich mit der obigen variante immer auf die schnauze geflogen bin, hab ich das datum im debbug modus verändert, und da gings dann... also kanns ja an der ini nicht liegen weil sie hier sonst hätte denn gleiche fehler verursachen müssen...

shmia 7. Nov 2006 10:32

Re: TIdFTP und falsches Systemdatum + Systemzeit
 
Du gehst bei der Fehlersuche noch nicht systematisch vor.
Du hast 2 Aufgaben a.) einlesen der Parameter aus dem Inifile b.) FTP-Download
Also trenne diese beiden Aufgabe doch mal.
Dann kommt ein (Test-)Button aufs Formular:
Delphi-Quellcode:
procedure TMain_Form.Button42Click(Sender:TObject);
begin
   Assert(Assigned(FTP));
   // um sämliche Fehler auszuschliesen
   // werden hier die Parameter hartcodiert zugewiesen
   // (nur für Test)
   FTP.Host := 'hostname'
   FTP.UserName := 'user';
   FTP.Password := 'password';
   if not DownloadFTPFile then  // die Funktion für den FTP dwonload
      ShowMessage('Download fehlgeschlagen');
end;
Du kümmerst dich weder um das Datum noch um die INI-Datei!!!
Jetzt diesen Button mehrfach drücken und schauen was passiert und die downgeloadete Datei anschauen.
Ich denke das Prinzip sollte jetzt klar sein:
Problem in Teilaufgaben zerlegen und beweisen, dass jede Teilaufgabe für sich funktioniert.

Andidreas 7. Nov 2006 10:49

Re: TIdFTP und falsches Systemdatum + Systemzeit
 
die prozedur mit dem download funktioniert einwandfrei, da ich diese prozedur schon in mehreren programm (in denen der user wenn er lustig ist bis zu 1.000 denn button drücken kann)...

aber ich werd deinen vorschlag mal ausprobieren...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 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