Delphi-PRAXiS
Seite 1 von 2  1 2      

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 09: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 09: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 09: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 10:05

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

coocky 29. Feb 2008 10: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 10:12

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

taaktaak 29. Feb 2008 10: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 10: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 10: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 14: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


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