hagur
asked on
Dates
I'm creating a program which only can do a certain thing once per day.
This means that I have to be able to find out whether this has been done "today". I'm not sure how to do this, but I thought of something like this:
1. Get current date or something similar.
2. Save it to database or whatever.
3. Next time this is attempted, then read from database, get current date again and figure out if one day has passed.
How can I compare two dates to see if there is atleast one day difference?
Atleast see if the day of month is the same in both dates or not.
This is probably not a complicated task, but I don't know where to begin ...
Thanks in advance!
This means that I have to be able to find out whether this has been done "today". I'm not sure how to do this, but I thought of something like this:
1. Get current date or something similar.
2. Save it to database or whatever.
3. Next time this is attempted, then read from database, get current date again and figure out if one day has passed.
How can I compare two dates to see if there is atleast one day difference?
Atleast see if the day of month is the same in both dates or not.
This is probably not a complicated task, but I don't know where to begin ...
Thanks in advance!
To Compare the date you stored when you did the action you could use code like this:
if table1DATEFIELD.asdatetime <> Date then
begin
DoYourCodeHere;
end;
mr76
if table1DATEFIELD.asdatetime
begin
DoYourCodeHere;
end;
mr76
You can store a date in a database like this:
Table1.FieldByName('Date') .AsDateTim e := Date;
or
Table1.FieldByName('Date') .AsDateTim e := Now;
to get the date and time.
To read it back:
var thedate: TDateTime;
thedate := Table1.FieldByName('date') .AsDateTim e;
Regards,
Epsylon.
Table1.FieldByName('Date')
or
Table1.FieldByName('Date')
to get the date and time.
To read it back:
var thedate: TDateTime;
thedate := Table1.FieldByName('date')
Regards,
Epsylon.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
hmm,
just all said,
only to remark that you must store the date
of last run to keep a date-comparebase
then do as follows
read the last-run-date from whatever (file, table, registry, ini)
compare the date with today
if different
run your job
if job-run ok
store todays-date as lastrundate
else
some error log
(just a sceleton)
meikl
just all said,
only to remark that you must store the date
of last run to keep a date-comparebase
then do as follows
read the last-run-date from whatever (file, table, registry, ini)
compare the date with today
if different
run your job
if job-run ok
store todays-date as lastrundate
else
some error log
(just a sceleton)
meikl
I agree with rwilson, the registry is probably the best and fastest way to do this.
Are these the answers to your question?
Is it once per day or once per 24 hour period?
Mark
Are these the answers to your question?
Is it once per day or once per 24 hour period?
Mark
Hi all.
Hi hagur.
The working sample is bellow. This is a compilation of above ideas.
------------
program Project1;
uses
windows,
registry,
sysutils,
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
function GetLocalRegistry : TRegistry;
var S : string;
begin
S:=ExtractFileName(Applica tion.ExeNa me);
SetLength(S,length(S)-4); // delete .exe extension
result:=TRegistry.Create;
result.RootKey:=HKEY_LOCAL _MACHINE;
result.OpenKey('software\' +S,true);
end;
function NeedToRun : boolean;
var R : TRegistry;
D : TDateTime;
begin
R:=GetLocalRegistry;
try
D:=R.ReadDate('last_run');
except
D:=0;
end;
R.Free;
result:=Int(D) <> Int(Date);
end;
procedure MarkToday;
var R : TRegistry;
begin
R:=GetLocalRegistry;
R.WriteDate('last_run',Dat e);
R.Free;
end;
begin
Application.Initialize;
Application.CreateForm(TFo rm1, Form1);
if NeedToRun then
begin
Application.Run;
MarkToday;
end;
end.
-----
Igor.
Hi hagur.
The working sample is bellow. This is a compilation of above ideas.
------------
program Project1;
uses
windows,
registry,
sysutils,
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
function GetLocalRegistry : TRegistry;
var S : string;
begin
S:=ExtractFileName(Applica
SetLength(S,length(S)-4); // delete .exe extension
result:=TRegistry.Create;
result.RootKey:=HKEY_LOCAL
result.OpenKey('software\'
end;
function NeedToRun : boolean;
var R : TRegistry;
D : TDateTime;
begin
R:=GetLocalRegistry;
try
D:=R.ReadDate('last_run');
except
D:=0;
end;
R.Free;
result:=Int(D) <> Int(Date);
end;
procedure MarkToday;
var R : TRegistry;
begin
R:=GetLocalRegistry;
R.WriteDate('last_run',Dat
R.Free;
end;
begin
Application.Initialize;
Application.CreateForm(TFo
if NeedToRun then
begin
Application.Run;
MarkToday;
end;
end.
-----
Igor.
Listening.
ASKER
Thank you all for your comments!
I will be able to do this now. But I'm not sure which one should get the points.
Epsylon gave a good example of how to read/write dates to a database,
Rwilson gave a good example of comparing dates.
kretzschmar, this is exactly like I had planned doing this. It was nice though to get a skeleton of the flow ...
And finally Igor, Nice to see the code in complete state.
What do you think is fair?
I will be able to do this now. But I'm not sure which one should get the points.
Epsylon gave a good example of how to read/write dates to a database,
Rwilson gave a good example of comparing dates.
kretzschmar, this is exactly like I had planned doing this. It was nice though to get a skeleton of the flow ...
And finally Igor, Nice to see the code in complete state.
What do you think is fair?
Its up to you. If you want to split points you will need to post separate Q's with the appropriate points for each expert. Otherwise pick the answer the suits you best and reward it.
Cheers,
Raymond.
Cheers,
Raymond.
ASKER
I think I'll have to accept Raymonds answer, he answered the part of my question I really needed. I knew how to save and load from database etc ...
Thanks anyway for everything!
- Hagur
Thanks anyway for everything!
- Hagur
To get the current date, use this:
var
Today: TDateTime;
begin
Today:=Date;
end;
If you want to know wich day was yesterday,simply use Today-1, tomorrow is Today+1 and so on....
regards
rene