Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bei Datum Monat und Jahr ausgeben und den Wert vergleichen (https://www.delphipraxis.net/42663-bei-datum-monat-und-jahr-ausgeben-und-den-wert-vergleichen.html)

bundy 22. Mär 2005 09:53


Bei Datum Monat und Jahr ausgeben und den Wert vergleichen
 
Hallo Delphianer !!


Ich hab irgendwie einen Denkfehler oder absolute Ahnungslosigkeit.

Ich Hab ein Datum in einer Mysql Datenbank.

Bsp:

Datenbank:
Datum-------Upload-------Download-------SummeTransfer
20.3.2005 123233 123132 2324323242
20.3.2005 123123 123423 2343242344

Aufgabe: :arrow:

Ich bekomme ein Texfile mit Daten die in diese Tabelle eingelesn gehöhrt.
1.Wenn das Datum im Textfile im gleichen Monat ist wie das Datum in der Datenbank dann muss er den Datensatz updaten.
2.Wenn das Datum im Textfile nicht im selben Monat liegt dann muss ich den Datensatz hinzufügen.

meine Frage:
Wie kann ich zwei Datumswerte nach Jahr und Monat vergleichen. :thumb:

ggfan 22. Mär 2005 10:52

Re: Bei Datum Monat und Jahr ausgeben und den Wert vergleich
 
Meine Idee,
nimm das Datum und versuche mit copy() bei beiden Datumen den Tag auf einen bestimmten Wert umzuschreiben. Danach wandelst du das Ganze in DateTimeFormat um.
Ist ein ziemliches Rumgebastle, sollte aber funktionieren.

bundy 22. Mär 2005 10:58

Re: Bei Datum Monat und Jahr ausgeben und den Wert vergleich
 
Ich hab da mal was zusammengebastelt.

Bitte um Optimierungsvorschläge

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
DatenbankMonat,DatenbankJahr,LocalMonat,LocalJahr:integer;
DatenbankDatum,Localdatum:tdate;
begin
DatenbankDatum:=date;
Localdatum:=date;

DatenbankMonat:=MonthOfTheYear(DatenbankDatum);
DatenbankJahr:=YearOf(DatenbankDatum);
LocalMonat:=MonthOfTheYear(Localdatum);
LocalJahr:=YearOf(Localdatum);

if (DatenbankMonat = LocalMonat) and (DatenbankJahr = LocalJahr) then ShowMessage('Gleiches Jahr und Monat');
if (DatenbankMonat = LocalMonat) and (DatenbankJahr <> LocalJahr) then ShowMessage('Gleiches Monat anders Jahr');
if (DatenbankMonat <> LocalMonat) and (DatenbankJahr = LocalJahr) then ShowMessage('Gleiches Jahr anderes Monat');
if (DatenbankMonat <> LocalMonat) and (DatenbankJahr <> LocalJahr) then ShowMessage('anderes Jahr anderes Monat');



end;

Union 22. Mär 2005 13:09

Re: Bei Datum Monat und Jahr ausgeben und den Wert vergleich
 
Zitat:

Zitat von bundy
Hallo Delphianer !!


Ich hab irgendwie einen Denkfehler oder absolute Ahnungslosigkeit.

Ich Hab ein Datum in einer Mysql Datenbank.

Bsp:

Datenbank:
Datum-------Upload-------Download-------SummeTransfer
20.3.2005 123233 123132 2324323242
20.3.2005 123123 123423 2343242344

Aufgabe: :arrow:

Ich bekomme ein Texfile mit Daten die in diese Tabelle eingelesn gehöhrt.
1.Wenn das Datum im Textfile im gleichen Monat ist wie das Datum in der Datenbank dann muss er den Datensatz updaten.
2.Wenn das Datum im Textfile nicht im selben Monat liegt dann muss ich den Datensatz hinzufügen.

meine Frage:
Wie kann ich zwei Datumswerte nach Jahr und Monat vergleichen. :thumb:

Delphi-Quellcode:
uses dateutils;

procedure TForm1.Button1Click(Sender: TObject);
var
   dtNow, dtThen : TDateTime;
begin
   dtThen := EncodeDate(2005,2,28);
   dtNow := EncodeDate(2005,3,1);

   // ==> 200502 <> 200503
   if (YearOf(dtNow)*100 + MonthOf(dtNow)) <> (YearOf(dtThen)*100 + MonthOf(dtThen)) then
      ShowMessage('Monat oder Jahr unterschiedlich');

end;

Binärbaum 22. Mär 2005 19:24

Re: Bei Datum Monat und Jahr ausgeben und den Wert vergleich
 
Ach ist das wieder umständlich.
Man kann ja auch Delphi-Referenz durchsuchenDecodeDate verwenden. Da wird das eingegebene Datum vom Typ TDateTime in seine einzelnen Komponenten Tag, Monat und Jahr aufgeteilt.

MfG
Binärbaum

Union 22. Mär 2005 19:37

Re: Bei Datum Monat und Jahr ausgeben und den Wert vergleich
 
Zitat:

Zitat von Binärbaum
Ach ist das wieder umständlich.
Man kann ja auch Delphi-Referenz durchsuchenDecodeDate verwenden. Da wird das eingegebene Datum vom Typ TDateTime in seine einzelnen Komponenten Tag, Monat und Jahr aufgeteilt.

MfG
Binärbaum

Ja klar, und dann musst Du erstmal 6 Varablen deklarieren weil DecodeDate eine Procedure ist :drunken:

Binärbaum 22. Mär 2005 20:51

Re: Bei Datum Monat und Jahr ausgeben und den Wert vergleich
 
Zitat:

Zitat von Union
Zitat:

Zitat von Binärbaum
Ach ist das wieder umständlich.
Man kann ja auch Delphi-Referenz durchsuchenDecodeDate verwenden. Da wird das eingegebene Datum vom Typ TDateTime in seine einzelnen Komponenten Tag, Monat und Jahr aufgeteilt.

MfG
Binärbaum

Ja klar, und dann musst Du erstmal 6 Varablen deklarieren weil DecodeDate eine Procedure ist :drunken:

Und was ist daran jetzt so schlimm? Es ist immerhin eine sichere Variante, um zu überprüfen, ob bei zwei Daten Monat und/ oder Jahr übereinstimmen. Und wenn es dir nicht gefällt, dass es eine Prozedur und keine Funktion ist, kann man das ganze ja in eine Funktion kapseln:
Delphi-Quellcode:
function SameYear(d1,d2: TDateTime):Boolean;
var y1, y2, dummy: Word;
begin
  DecodeDate(d1, y1, dummy, dummy);
  DecodeDate(d2, y2, dummy, dummy);
  Result:= (y1 =y2);
end;
//oder halt für Jaghr und Monat
function SameYearAndMonth(d1,d2: TDateTime):Boolean;
var y1, m1, y2, m2 dummy: Word;
begin
  DecodeDate(d1, y1, m1, dummy);
  DecodeDate(d2, y2, m2, dummy);
  Result:= ((y1 =y2) and (m1=m2));
end;
MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 Uhr.

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