View Full Version : سوال: مشکل با تاریخ شمسی در Crystal
hani_prog
پنج شنبه 13 فروردین 1388, 21:01 عصر
سلام به دوستان
در SQl 2000 تاریخ شمسی رو نمیشه وارد کرد پس باید میلادی وارد کنیم
تا بتونیم روی آن عملیاتی مانند جستجو و .... انجام بدهیم
حال اگر به خواهیم از جداول بانک گزارش بگیریم و تاریخ رو شمسی چاپ کنه
باید چار کنیم
ممنون میشم یک سورس برام بذارین
hani_1261@yahoo.com
hasan_esfahan
پنج شنبه 13 فروردین 1388, 23:19 عصر
دوست عزیز اصلا کریستال با تاریخ مشکلی نداره البته من یک تاریخ شمسی نوشته بودم که تاریخ سیستم را بر می گردوند که حالا ان را تغیر دادم به شکل مورد نظر شما
البته سه خط اول را تغیر دادم که شما فیلد مورد نظر خود را قرار بده اگه مشکلی بود خبرم کن
numbervar iMiladiMonth:=tonumber(Mid ({tb1.DATE},1 ,4));
numbervar iMiladiDay:=tonumber(Mid ({tb1.DATE},6 ,2));
numbervar iMiladiYear:=tonumber(Mid ({tb1.DATE},9,2));
numbervar shamsiDay;
numbervar shamsiMonth;
numbervar shamsiYear;
numbervar dayCount;
numbervar farvardinDayDiff;
numbervar deyDayDiff;
numberVar array sumDayMiladiMonth :=[0,31,59,90,120,151,181,212,243,273,304,334];
numberVar array sumDayMiladiMonthLeap := [0,31,60,91,121,152,182,213,244,274,305,335];
numberVar farvardinDayDiff:=79;
numbervar miladiYear1:=int(imiladiYear mod 100);
numbervar miladiYear2:=int(imiladiYear mod 4);
numbervar miladiYear3:=int(imiladiYear mod 100);
numbervar miladiYear4:=int(imiladiYear mod 400);
if (((miladiYear1 <> 0 )and (miladiYear2 =0))or((miladiYear3=0)and (miladiYear4=0))) then
dayCount := sumDayMiladiMonthLeap[iMiladiMonth] + iMiladiDay
else
dayCount := sumDayMiladiMonth[iMiladiMonth] + iMiladiDay;
miladiYear1:=int((imiladiYear-1) mod 100);
miladiYear2:=int((imiladiYear-1) mod 4);
miladiYear3:=int((imiladiYear-1) mod 100);
miladiYear4:=int((imiladiYear-1) mod 400);
if (((miladiYear1 <> 0 )and (miladiYear2 =0))or((miladiYear3=0)and (miladiYear4=0))) then
deyDayDiff := 11
else
deyDayDiff := 10;
if (dayCount > farvardinDayDiff) then
(
dayCount := dayCount - farvardinDayDiff;
if (dayCount <= 186) then
(
select int(dayCount mod 31)
case 0:(
shamsiMonth :=int( dayCount / 31);
shamsiDay := 31;
)
default:(
shamsiMonth := int(dayCount / 31) + 1;
shamsiDay :=int(dayCount mod 31);
);
shamsiYear := iMiladiYear - 621;
)
else
(
dayCount := dayCount - 186;
select dayCount mod 30
case 0:(
shamsiMonth := int(dayCount / 30) + 6;
shamsiDay := 30;
)
default:(
shamsiMonth := int(dayCount / 30) + 7;
shamsiDay := int(dayCount mod 30);
);
shamsiYear := iMiladiYear - 621;
)
)
else
(
dayCount := dayCount + deyDayDiff;
select int(dayCount mod 30)
case 0 :(
shamsiMonth := int(dayCount / 30) + 9;
shamsiDay := 30;
)
default:(
shamsiMonth := int(dayCount / 30) + 10;
shamsiDay := int(dayCount mod 30);
);
shamsiYear := iMiladiYear - 622;
);
stringvar exitmy:=totext(shamsiYear)+' / '+totext(shamsiMonth)+' / '+totext(shamsiDay);
exitmy;
hasan_esfahan
پنج شنبه 13 فروردین 1388, 23:21 عصر
راستی یادم رفت یک چیز دیگه بگم به جای فیلد مورد نظر تون باید یک فرمول فیلد ایجاد کرده و این کد را داخل ان بنویسید
hani_prog
جمعه 14 فروردین 1388, 00:16 صبح
من نمی دنم چگونه از این کد در Crystal استفاده کنم
hasan_esfahan
جمعه 14 فروردین 1388, 13:53 عصر
با این روش ایجاد فرمول است که ان را پس از ایجاد در قسمت دیتیل به جای فیلد تاریخ قرار بده
hani_prog
شنبه 15 فروردین 1388, 02:23 صبح
دوست عزیز از اینکه شما اینگونه با دقت جواب می دید ممنونم
لطف می کنید سورس برنامه رو تو سایت بذارین یا به ایمل ام بفرستید
hani_1261@yahoo.com
mom alone
سه شنبه 18 فروردین 1388, 23:29 عصر
بهتره روش کار رو عوض کنید
دات نت 2008 امکان تاریخ فارسی رو داره
و شما میتونید تاریخ رو به صورت حروف وارد دیتا بیس کنید
در جستجو ها هم بخوبی جواب میده
(من خیلی وقته که اینجوری کار می کنم و هیج مشکلی ندارم)
حتی در جستجوی بین دو تاریخ هم درست جواب میده
sh2007
چهارشنبه 19 فروردین 1388, 09:36 صبح
به نظر من هم بهترين روش استفاده از خود محيط برنامه نويسي توي دات نت مي باشه نه توي كريستال!!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.