Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit Now() (https://www.delphipraxis.net/134089-probleme-mit-now.html)

Sphinx2k 15. Mai 2009 10:41


Probleme mit Now()
 
Ich hab gerade ein sehr sehr merkwürdiges Problem.
In meinem Programm wird ein Datei umbenannt nach Datum+Zeit. Nachdem ich jetzt dem fehler nachgespührt habe der vorhanden ist bin ich bei Now angekommen.
Das ganze hat auch schon ganz zu Anfang funktioniert...gehe ich in eine Version die ein paar Tage älter ist funktionert es dort mit dem gleichen Code und was ich geändert habe dürfte an sich keinen einflüss darauf haben was mir Now() liefert.
Now liefert mir immer die selbe Zeit zurück, selbst wenn ich das Programm beende und neu Starte, es neu Compiliere,.... Nach einigen Minuten wird dann eine neue Zeit ausgelesen und diese bleibt für X Minuten immer die selbe.

Hat jemand eine Idee woran das liegen konnte?

Delphi-Quellcode:
procedure TForm1.SpeedButton3Click(Sender: TObject);
var
  DName: String;
  Jahr,Monat,Tag, Stunde, Minute, Sekunde, MSekunde: Word;
  Jetzt: TDateTime;
begin
  Jetzt:=Now();
  if OpenPictureDialog1.Execute() then begin
    DecodeDate(Jetzt,JAhr,Monat,Tag);
    DecodeTime(Jetzt,Stunde,Minute,Sekunde,MSekunde);
    DName:='temp\'+IntToStr(Jahr)+IntToStr(Monat)+IntToStr(Tag)+IntToStr(Stunde)+
           IntToStr(Minute)+IntToStr(Sekunde)+IntToStr(MSekunde)+'.jpg';
    DateiNeuPfad:=ExtractFilePath(Application.ExeName)+DName;
    Copyfile(PCHAR(OpenPictureDialog1.FileName), PCHAR(DateiNeuPfad), false);
  end;
end;
[edit=mkinzler]Zeilenumbruch in Quelltext eingefügt Mfg, mkinzler[/edit]

Bernhard Geyer 15. Mai 2009 10:52

Re: Probleme mit Now()
 
Was sagt deine Windows-Zeitangabe? Now verwendet die WinAPI-Funktion GetLocalTime. Es müsste also in Windows was "kaputt" sein.
Außer du hast irgendwo eine eigene Now-Funktion definiert die verwendet wird.

DeddyH 15. Mai 2009 11:10

Re: Probleme mit Now()
 
Außerdem kann man die Namensvergabe noch kürzen.
Delphi-Quellcode:
DName := Format('%s%s%s',['temp\',FormatDateTime('yyyymmddhhnnsszzz',Now),'.jpg']);

Sphinx2k 15. Mai 2009 11:43

Re: Probleme mit Now()
 
Eine andere Now Funktion gibt es nicht wie evtl. Probleme verursachen könnte.
Das Windows ein Problem hat glaube ich auch nicht da die 2 Tage alte Version noch funktioniert und seit dem habe ich nur die Zeichenfunktionen von Paintbox.canvas auf Andorra 2D umgestellt.
Es bleibt weiterhin Rätselhaft warum es nicht funktioniert. Hab jetzt noch mal einen Random Wert in den Dateinamen mit reingepackt der umschifft das Problem etwas, aber es bleibt trotzdem eine Fehlerquelle die ich gerne ausmerzen möchte.

Die Format Funktion war mir noch nicht bekannt damit sieht es doch gleich ordenlticher aus. Danke.

ToFaceTeKilla 15. Mai 2009 11:57

Re: Probleme mit Now()
 
Mit welcher Delphiversion arbeitest du denn?
Bin zwar kein Experte, aber ich kann dir sagen, dass zb Delphi 6 öfters zu unerklärlichem Verhalten neigt.
Im Zweifelsfall hat ein Reboot bei mir bis jetzt immer geholfen...

Bernhard Geyer 15. Mai 2009 12:05

Re: Probleme mit Now()
 
Häng mal FastMM und andere Checktools rein. Ich denke das deine Umstellungsarbeit einige wild gewordene Zeiger hinterlassen hat.

sx2008 15. Mai 2009 14:53

Re: Probleme mit Now()
 
Zitat:

Zitat von Sphinx2k
Eine andere Now Funktion gibt es nicht wie evtl. Probleme verursachen könnte.

Nun, als Programmierer hat man manchmal Tomaten auf den Augen.
Du musst dir also erst einmal selbst beweisen,
dass du mit der Aussage "Eine andere Now Funktion gibt es nicht" Recht hast.
Zwei Möglichkeiten:
1.) Bei gedrückter Strg-Taste im Sourcecode auf das Wort Now klicken.
Nun müsste sich die Unit SysUtils öffnen und zur Deklaration der Funktion springen.
Das klappt nur ab Delphi Prof. und höher; also wenn der VCL Sourcecode vorhanden ist
2.) angeben, dass die Unit SysUtils verwendet werden soll:
Delphi-Quellcode:
var Jetzt: TDateTime;
begin
  Jetzt:=SysUtils.Now();
Du kannst dich darauf verlassen, dass SysUtils.Now fehlerfrei funktioniert.

Im nächsten Schritt beweisst du dir selbst, dass sich die Uhrzeit ändert:
Delphi-Quellcode:
var Jetzt: TDateTime;
begin
  Jetzt:=SysUtils.Now();
  ShowMessage(DateTimeToStr(Jetzt));
Du wirst sehen, dass die Uhrzeit richtig ist.
Dann nimmst du die Verbesserung aus Beitrag #3 und lässt dir den Dateinamen vorher anzeigen:
Delphi-Quellcode:
procedure TForm1.SpeedButton3Click(Sender: TObject);
var
  DName: String;
  Jetzt: TDateTime;
begin
  if OpenPictureDialog1.Execute() then
  begin
    Jetzt:=SysUtils.Now();
    DName := Format('%s%s%s',['temp\',FormatDateTime('yyyymmddhhnnsszzz', Jetzt),'.jpg']);
    DateiNeuPfad:=ExtractFilePath(Application.ExeName)+DName;
    ShowMessage(DateiNeuPfad);  // <====== zum Testen anzeigen
    Copyfile(PCHAR(OpenPictureDialog1.FileName), PCHAR(DateiNeuPfad), false);
  end;
end;

DeddyH 15. Mai 2009 15:02

Re: Probleme mit Now()
 
Und auf die Variable Jetzt kann man ganz verzichten.
Delphi-Quellcode:
procedure TForm1.SpeedButton3Click(Sender: TObject);
var
  DName: String;
begin
  if OpenPictureDialog1.Execute() then
  begin
    DName := Format('%s%s%s',['temp\',FormatDateTime('yyyymmddhhnnsszzz', SysUtils.Now),'.jpg']);
    DateiNeuPfad:=ExtractFilePath(Application.ExeName)+DName;
    ShowMessage(DateiNeuPfad);  // <====== zum Testen anzeigen
    Copyfile(PCHAR(OpenPictureDialog1.FileName), PCHAR(DateiNeuPfad), false);
  end;
end;

Mikescher 15. Mai 2009 15:21

Re: Probleme mit Now()
 
Klopft mal einer auf'n Server bei mir spinnt die Seite :mrgreen:

MfG Mikescher

igel457 15. Mai 2009 15:53

Re: Probleme mit Now()
 
Schau dir mal die "SimpleText" Demo von Andorra an. Dort hatte ich (glaube ich) genau das gleiche Problem. Ich glaube, dass Now nicht Funktioniert hat, sondern nur Date und Time (Now = Date + Time) und das eventuell nicht in OnIdle, sondern nur in einem Timer-Event.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz