Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Rückgabedatum in Delphi 7 (https://www.delphipraxis.net/109382-rueckgabedatum-delphi-7-a.html)

coocky 29. Feb 2008 10:39


Rückgabedatum in Delphi 7
 
Hi,

wir haben ein Bibliotheksprogramm geschrieben, in dem ausgeliehene Bücher gespeichert werden. Wenn das ausgeliehene Datum überschritten ist, dann sollte normalerweise eine message kommen "Ausleihdatum überschritten".

Folgenden Quelltext haben wir bis jetzt:

Delphi-Quellcode:
   
 procedure TForm1.FormCreate(Sender: TObject);
var lIx : integer;
    lInt : TDateTime;
    Ueberschritten : Boolean;
begin
  if FileExists ('Bücherliste3.txt')
    then ListBox3.Items.LoadFromFile('Bücherliste3.txt');
  for lIx := 0 to ListBox3.Items.Count-1 do begin
    lInt := StrToDateTimeDef(ListBox3.Items.Strings[lIx], 0);
  if lInt<Now then Ueberschritten:=True;
  end;
  if Ueberschritten=True Then ShowMessage('Ausleihdatum überschritten');
end;

jetzt kommt aber immer eine message, egal ob überschritten oder nicht.


Bitte helft uns.

MfG

DeddyH 29. Feb 2008 10:45

Re: Rückgabedatum in Delphi 7
 
Steht in der Datei das Ausleihdatum? Dann wird es wahrscheinlich immer in der Vergangenheit liegen, die Bedingung trifft also immer zu. Ansonsten würde ich das auch etwas anders schreiben.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var lIx : integer;
    lInt : TDateTime;
    Ueberschritten : Boolean;
begin
  if FileExists ('Bücherliste3.txt')
    then ListBox3.Items.LoadFromFile('Bücherliste3.txt');
  for lIx := 0 to ListBox3.Items.Count-1 do begin
    lInt := StrToDateTimeDef(ListBox3.Items.Strings[lIx], 0); //lass Dir mal lInt ausgeben
    Ueberschritten:=lInt<Now;
  end;
  if Ueberschritten Then ShowMessage('Ausleihdatum überschritten');
end;
[edit] Blödsinn! So ist es besser:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var lIx : integer;
    lInt : TDateTime;
    Ueberschritten : Boolean;
begin
  if FileExists ('Bücherliste3.txt')
    then ListBox3.Items.LoadFromFile('Bücherliste3.txt');
  for lIx := 0 to ListBox3.Items.Count-1 do begin
    lInt := StrToDateTimeDef(ListBox3.Items.Strings[lIx], 0); //lass Dir mal lInt ausgeben
    Ueberschritten:=lInt<Now;
    if Ueberschritten Then ShowMessage('Ausleihdatum überschritten: ' + ListBox3.Items[lIx]);
  end;
end;

taaktaak 29. Feb 2008 10:59

Re: Rückgabedatum in Delphi 7
 
Moin, Moin,
entscheidend ist doch die Frage, welches Datum lInt beinhaltet. Wenn es das Ausleihdatum ist, dann müsste der Vergleich m.E. die maximale Ausleihdauer berücksichtigen. Also in PseudoCode etwa so:
Delphi-Quellcode:
if Ausleihdatum+Ausleihfrist>Now then Überschritten

DeddyH 29. Feb 2008 11:05

Re: Rückgabedatum in Delphi 7
 
Deshalb ja meine erste Frage ;)

coocky 29. Feb 2008 11:08

Re: Rückgabedatum in Delphi 7
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i  : integer;
    alt : TDateTime;
    Ueberschritten : Boolean;

if FileExists ('Bücherliste3.txt')                                     // siehe oben
    then ListBox3.Items.LoadFromFile('Bücherliste3.txt');                // siehe oben
  for i := 0 to ListBox3.Items.Count-1 do begin                          // überprüfen der ListBox von Anfang bis Ende
    alt := StrToDateTimeDef(ListBox3.Items.Strings[i], 0);               // altes Datum egibt sich aus dem Datum der ListBox3
    Ueberschritten:=alt<Now                                              // wenn altes Datum kleiner als aktuelles, dann ergibt sich Überschritten aus true
  end;
  if Ueberschritten Then ShowMessage('Ausleihdatum überschritten'); // wenn sich Überschritten aus true ergibt, dann wird Message ausgegeben
end;
Wir haben deine Ideen mit eingefügt, jedoch wird die message trotzdem ausgegeben, auch wenn das Datum nicht überschritten ist.
Die letzte Zeile konnten wir nicht übernehemen, da dann ein Fehler entstehet und das Programm abstürzt.

MfG

DeddyH 29. Feb 2008 11:12

Re: Rückgabedatum in Delphi 7
 
Stell doch mal die Textdatei hier online.

taaktaak 29. Feb 2008 11:28

Re: Rückgabedatum in Delphi 7
 
Cooky, du musst DeddyH (und mir) erst mal die grundsätzliche Frage beantworten, WELCHES Datum mit lInt ausgelesen wird - solange das nicht bekannt ist, können wir hier bis zum St. Nimmerleinstag rätseln :-D

DeddyH 29. Feb 2008 11:31

Re: Rückgabedatum in Delphi 7
 
Das Format der Einträge wäre auch noch gut zu wissen. Sollte es ungültig sein, käme bei StrToDateTimeDef(Eintrag,0) nämlich 0 heraus :mrgreen: .

Thorben_Ko 29. Feb 2008 11:36

Re: Rückgabedatum in Delphi 7
 
Ja, mein Verdachte ist das in der Datei das Datum nicht richtig drin gesteht, und so StrToDateDef 0 zurücggibt, und da 0 < now hätten wir das übel :D

Aber nur ne spekulation

[EDIT]
ROTER KASTEN AHH

coocky 29. Feb 2008 15:33

Re: Rückgabedatum in Delphi 7
 
gut dann werd ich das jetzt mal ein bisschen ausführlicher erklären :-D

also wenn man auf einen Button klickt dann wird in die ListBox3 das Rückgabedatum eingefügt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox3.Items.Add(FormatDateTime('ddd d. mmm. yyyy', Now+28
end;
wenn das Programm beendet wird, dann wird der Inhalt der ListBox in einer Textdatei eingefügt also da steht dann einfach nur das Datum drin (ich weiß aber nicht in welchem Format)

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  close;                                          
  ListBox3.Items.SaveToFile('Bücherliste3.txt');  
end;
und wenn dann das Programm gespeichert wird, wird der Inhalt der Liste wieder geladen und das Programm soll jede Zeile durchgehen und überprüfen, welches Datum davon überschritten ist und dann soll die Message 'Ausleihdatum überschritten' ausgegeben werden (aber nur einmal nicht 10 mal wenn 10 Daten überschritten sind) und dann sollten die überschrittenen möglichst noch rot unterlegt werden, aber da wissen wir auch nicht wie das geht.

Delphi-Quellcode:
 procedure TForm1.FormCreate(Sender: TObject);
var i  : integer;
    alt : TDateTime;
    Ueberschritten : Boolean;
begin
  if FileExists ('Bücherliste3.txt')                                    
    then ListBox3.Items.LoadFromFile('Bücherliste3.txt');              
 for i := 0 to ListBox3.Items.Count-1 do begin                          
    alt := StrToDateTimeDef(ListBox3.Items.Strings[i], 0);            
    Ueberschritten:=alt<Now                                              
  end;
  if Ueberschritten Then ShowMessage('Ausleihdatum überschritten');
end;
Wir hoffen damit könnt ihr jetzt was anfangen, weil mehr wissen wir auch nich dazu also welche formate das sind und so. Sind da leider nicht so bewandert. :-D

Luckie 29. Feb 2008 15:59

Re: Rückgabedatum in Delphi 7
 
Du hast uns immer noch nicht die alles entscheidenden Fragen beantwortet. Lies doch bitte mal unsere Beiträge. Welches Format haben die Daten in der Datei und was für ein datum ist es? Das Rückgabedatum oder das Ausleihdatum.

Desweitern ist dein Code etwas verkorkst:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i  : integer;
    alt : TDateTime;
    Ueberschritten : Boolean;
begin
  if FileExists ('Bücherliste3.txt')                                     // Bitte mit kompletter Pfadangabe. Dass dein Programm die Datei findet ist purer Zufall
    then ListBox3.Items.LoadFromFile('Bücherliste3.txt');                // Kommentar siehe vorherige Zeile
  for i := 0 to ListBox3.Items.Count-1 do begin                          
    alt := StrToDateTimeDef(ListBox3.Items.Strings[i], 0);               // Guck doch einfach mal im Debugger, was nach dieser Zeile in [i]alt[/i] drin steht oder lass es dir ausgeben
    Ueberschritten:=alt<Now                                              // Der Inhalt der Variable [i]Ueberschritten[/i] wird immer wieder überschrieben, so dass du letztendlich nur den letzten Eintrag in den folgenden Zeilen überprüfst
  end;
  if Ueberschritten then
    ShowMessage('Ausleihdatum überschritten');
end;
Wie wäre es hier mit:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i  : integer;
    alt : TDateTime;
    Ueberschritten : Boolean;
begin
  if FileExists ('Bücherliste3.txt')                                    
    then ListBox3.Items.LoadFromFile('Bücherliste3.txt');                
  for i := 0 to ListBox3.Items.Count-1 do
  begin                          
    alt := StrToDateTimeDef(ListBox3.Items.Strings[i], 0);              
    if alt<Now then ShowMessage('Ausleihdatum überschritten');
  end;
end;

NormanNG 29. Feb 2008 16:16

Re: Rückgabedatum in Delphi 7
 
Hi,

das Format, mit dem das Rückgabedatum in die Liste (und in der Folge auch in die Datei) geschrieben wird,
ist mit 'ddd d. mm. yyyy' definitert. Ein solchen String kann man aber nicht mehr mit StrToDateDef zurückwandeln,
weshalb immer der Defaultwert (0) geliefert wird...

Versuchs doch einfach mal mit dem Format 'dd.mm.yyyy' - das wir beim Einlesen richtig zurückgewandelt.

coocky 29. Feb 2008 16:22

Re: Rückgabedatum in Delphi 7
 
Zitat:

Zitat von Luckie
Du hast uns immer noch nicht die alles entscheidenden Fragen beantwortet. Lies doch bitte mal unsere Beiträge. Welches Format haben die Daten in der Datei und was für ein datum ist es? Das Rückgabedatum oder das Ausleihdatum

Zitat:

Zitat von coocky
also wenn man auf einen Button klickt dann wird in die ListBox3 das Rückgabedatum eingefügt

Zitat:

Zitat von coocky
Wir hoffen damit könnt ihr jetzt was anfangen, weil mehr wissen wir auch nich dazu also welche formate das sind und so. Sind da leider nicht so bewandert. :-D


NormanNG 29. Feb 2008 16:24

Re: Rückgabedatum in Delphi 7
 
Hi,

Zitat:

Wir hoffen damit könnt ihr jetzt was anfangen, weil mehr wissen wir auch nich dazu also welche formate das sind und so. Sind da leider nicht so bewandert.
vergiss es, du hast soweit alles vorher gesagt. Versuchs mit dem anderen Datum-Format-String...

coocky 29. Feb 2008 16:28

Re: Rückgabedatum in Delphi 7
 
ok mach ich

Luckie 29. Feb 2008 20:20

Re: Rückgabedatum in Delphi 7
 
Zitat:

Zitat von NormanNG
das Format, mit dem das Rückgabedatum in die Liste (und in der Folge auch in die Datei) geschrieben wird,
ist mit 'ddd d. mm. yyyy' definitert.

Woher weißt du das?

Zitat:

weil mehr wissen wir auch nich dazu also welche formate das sind und so.
Ihr schreibt doch selber in die datei rein. Da müst ihr doch wissen was ihr da wie reinschreibt? :roll:

DeddyH 29. Feb 2008 20:24

Re: Rückgabedatum in Delphi 7
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von NormanNG
das Format, mit dem das Rückgabedatum in die Liste (und in der Folge auch in die Datei) geschrieben wird, ist mit 'ddd d. mm. yyyy' definitert.

Woher weißt du das?

Das steht hier: http://www.delphipraxis.net/internal...=852472#852472


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:58 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 by Thomas Breitkreuz