cherokee
6th August 2012, 20:17
Hello,
just wondering if it is possible create a field with a domain date(or any other domain) in a 3GL program.
Thanks in advance
Carlos
mark_h
7th August 2012, 14:06
I just tested this and it compiled:
domain tcdate some.date
function main()
{
some.date = date.num()
When I ran it in debug it worked.
cherokee
7th August 2012, 16:52
Thanks Mark,
I do have fields/vars in my 3GL with diffrent domain types; sorry if I wasn' t clear. I wanted to use it as an entry field on a graphic window or a grid, with a specific domain.
Thanks again.
steveauckly
7th August 2012, 20:55
I didn't think this is possible so I coded my own. Nothing fancy, feel free to use it and improve on it.
function parse.date.input(ref domain tcdate pass.date, ref long pass.field.obj)
{
string fld.date.string(21), ls.month(2), ls.year(4)
get.object(pass.field.obj,DsNstring,fld.date.string)
on case fld.date.string(1;1)
case "+":
pass.date = current.date + lval(fld.date.string(2;20))
break
case "-":
pass.date = current.date - lval(fld.date.string(2;20))
break
default:
ls.month = sprintf$("%D(%02m)", current.date)
ls.year = sprintf$("%D(%04Y)", current.date)
on case len(strip$(fld.date.string))
case 1:
fld.date.string = ls.month & "0" & strip$(fld.date.string) &
ls.year
pass.date = inputstr.to.date(fld.date.string, "%D002")
break
case 2:
fld.date.string = ls.month & strip$(fld.date.string) & ls.year
pass.date = inputstr.to.date(fld.date.string, "%D002")
break
case 4:
fld.date.string = strip$(fld.date.string) & ls.year
pass.date = inputstr.to.date(fld.date.string, "%D002")
break
case 6:
fld.date.string = fld.date.string(1;4) & ls.year(1;2) &
fld.date.string(5;2)
pass.date = inputstr.to.date(fld.date.string, "%D002")
break
case 8:
if fld.date.string(2;1) = "-" then
pass.date = inputstr.to.date("0" & fld.date.string(1;1) &
^ "0" & fld.date.string(3;1) & fld.date.string(5;4), "%D002")
else
pass.date = inputstr.to.date(fld.date.string(1;8), "%D002")
endif
break
case 9:
if fld.date.string(3;1) = "-" then
pass.date = inputstr.to.date(fld.date.string(1;2) &
"0" & fld.date.string(4;1) & fld.date.string(6;4), "%D002")
else
if fld.date.string(2;1) = "-" then
fld.date.string = "0" & fld.date.string(1;1) & fld.date.string(3;2) &
fld.date.string(6;4)
pass.date = inputstr.to.date(fld.date.string, "%D002")
else
ls.message(1) = "Date may be dd, mmdd,mmddyy,mmddyyyy or +/- a number of days."
display.msg()
endif
endif
break
default:
ls.message(1) = "Date may be dd, mmdd, mmddyy, mmddyyyy or +/- a number of days."
display.msg()
break
endcase
break
endcase
}
cherokee
8th August 2012, 14:54
Thank you for sharing your script. I was wondering if I had to wirte all you've written.. :) .
Thanks again.