# مباحث متفرقه برنامه نویسی > گزارش سازی با Crystal Report >  تاریخ فارسی

## M.kavyani

با سلام خدمت دوستان
من در دیتابیس تاریخ ها را به صورت میلادی ذخیره کردم که این کمک خیلی زیادی به من کرده اما یه مشکلی دارم و اونم اینه که زمانی میخوام گزارش تهیه کنم تاریخ ها به صورت میلادی است. چگونه میتوان آنها را به شمسی تبدیل کنم؟
در پناه حق موفق و کامروا باشید

----------


## مطهر

من تاریخ را به صورت رشته ذخیره کردم.مشکلی هم تا حالا نداشته ام
توی بخش SQL یه Store procedure بود که تاریخ را تبدیل می کرد.
بگردی پیدا می کنی

----------


## M.kavyani

> من تاریخ را به صورت رشته ذخیره کردم.مشکلی هم تا حالا نداشته ام
> توی بخش SQL یه Store procedure بود که تاریخ را تبدیل می کرد.
> بگردی پیدا می کنی


البته من در این برنامه ها مبتدی هستم ولی همین قدر میدونم که استفاده از تاریخ میلادی در جستجو و مرتب سازی و گزارش گرفتن حسابی کمکم کرده. شاید بشود با رشته ها هم این کار را کرد ولی من بلد نیستم.

----------


## مطهر

البته می شود
شما مثل همان تاریخ عمل کنید(ولی فرمت باید اینجوری باشه 27/09/1384)
لااقل من تا حالا مشکل نداشته ام.آینده را نمی دونم . اگر هم دارم اشتباه می کنم امیدوارم زودتر به اشتباهم پی ببرم

----------


## ehsan_ansaripoor

همان طوری که جناب مطهر فرمودند برای استفاده از تاریخ با فرمت هجری شمسی راهی به جز استفاده از رشته نیست با اینکه استفاده از فیلد تاریخ برای دسترسی سریعتر مناسبتره ولی از فیلد تاریخ نمیشه برای تاریخ شمسی استفاده کرد.
در جواب دوست عزیزمون M.kavyani هم باید عرض کنم که ذخیره کردن تاریخ به صورت میلادی و نشون دادن اون به صورت هجری شمسی در گزارش کار عجیبی به نظر میرسه و اگر شما بخواهید این کار را انجام بدید باید از یک Function تبدیل تاریخ استفاده کنید که سرعت برنامه را در تهیه گزارش خیلی پایین میاره یعنی در هز رکورد که تاریخ به صورت میلادی ذخیره شده تبدیل کنه به تاریخ شمسی
به نظر بنده اگر شما به تاریخ میلادی احتیاج دارید و در گزارشات به تاریخ شمسی یک فیلد تاریخ شمسی نیز داخل جدول داشته باشید و موقع ورود تاریخ میلادی تاریخ شمسی نیز وارد شود

----------


## احمد رایان

> به نظر بنده اگر شما به تاریخ میلادی احتیاج دارید و در گزارشات به تاریخ شمسی یک فیلد تاریخ شمسی نیز داخل جدول داشته باشید و موقع ورود تاریخ میلادی تاریخ شمسی نیز وارد شود


من هم فکر میکنم این روش بهتری راه حل برای استفاده از هر دو تاریخ هست اما اگه از تاریخ شمسی به صورت رشته استفاده کنی مشکل خاصی پیش نخواهد آمد.

----------


## M.kavyani

بله با راهنمایی هایی آقای ثباتی تصمیم گرفتم که دو جدول داشته باشم که دریکی از آنها تاریخ شمسی به صورت رشته و در دیگر تاریخ میلادی را به صورت DateTime ذخیره کنم. روش جالبیه . از پاسختون ممنونم 
درپناه حق موفق و کامروا باشید

----------


## مطهر

ممنون . کار جالبیه
من هم تغییر می دهم

----------


## M.kavyani

> ممنون . کار جالبیه
> من هم تغییر می دهم


موفق باشین

----------


## aliasghar

سلام
من هم همین مشکل را داشتم و دو تا راه حل پیدا کردم
یکی نوشتن تابع تبدیل تارخ در اشیا Com و فراخوانی با کریستال
یکی استفاده از تبدیل تاریخ در Sql Server

----------


## meh_secure

من از یه روش استفاده می کنم که خوب جوابمو داده
یه تابع تبدیل تاریخ در وی بی نوشتم که تاریخ شمسی رو میده به صورت یه عدد لانگ.
مثلا 13841225 تو کوری گیری هم هیچ مشکلی ندارم.
هنگام نمایش تو کریستال هم با استفاده از یک فرمول به رشته تبدیلش می کنم وبینشون علامت / رو قرار میدم.

----------


## M.kavyani

> من از یه روش استفاده می کنم که خوب جوابمو داده
> یه تابع تبدیل تاریخ در وی بی نوشتم که تاریخ شمسی رو میده به صورت یه عدد لانگ.
> مثلا 13841225 تو کوری گیری هم هیچ مشکلی ندارم.
> هنگام نمایش تو کریستال هم با استفاده از یک فرمول به رشته تبدیلش می کنم وبینشون علامت / رو قرار میدم.


 شیوه قشنگیه ولی چون تبدیل داره  من ترجیح میدم از دو رکورد استفاده کنم

----------


## meh_secure

منظورت از 2 رکورد چیه ؟ من متوجه نشدم.

----------


## مطهر

یکی تاریخ شمسی و به صورت رشته
دیگری تاریخ میلادی به صورت تاریخ
توی همین بخش در موردش بحث شده

----------


## meh_secure

پس منظورتون دو تا فیلد بود.
در هرصورت اینم روش خوبیه ولی دستتون تنگ نگه می داره.

----------


## M.kavyani

> پس منظورتون دو تا فیلد بود.
> در هرصورت اینم روش خوبیه ولی دستتون تنگ نگه می داره.


ببخشید من فیلد و رکورد را اشتباه گرفتم. بله حق با شماست. ولی از اینکه میگی دستتون رو تنگ نگه میداره چیه؟ 
 :متفکر:

----------


## meh_secure

با این روش که شما فرمودید کاربر می تونه هر تاریخی که دوست داشته باشه وارد کنه. طوری که با معادل میلادی اون صدق نکنه یا یه همچین چیزایی

----------


## M.kavyani

> با این روش که شما فرمودید کاربر می تونه هر تاریخی که دوست داشته باشه وارد کنه. طوری که با معادل میلادی اون صدق نکنه یا یه همچین چیزایی


نه این جوری هم که شما فکر میکنید نیست. چون ما هنگام وارد کردن اطلاعات فقط از کاربر تاریخ شمسی رو میگیریم و بعد قسمت شمسی رو در فیلد مربوط به تاریخ شمسی که از نوع رشته ای است ذخیره میکنیم و بعد اون تاریخ رو به میلادی تبدیل میکنیم و در فیلد تاریخ میلادی ذخیره میکنیم.  پس هرگز چنیین چیزی امکان نداره
در ضمن یکی از مزیت های این روش این است که ما فقط یه بار تبدیل انجام می دهیم و سرعت برنامه بالاتر میره.  :تشویق:  
بعد منظورتون از " یه همچین چیزهای" چیه؟  :متعجب:

----------


## sepelloo

دوستان میشه بگید چطور توی کریستال ریپورت میشه از یه کلاس یا dll که قبلا نوشته شده برای تبدیل تاریخ به شمسی استفاده کرد

----------


## sm

http://msdn2.microsoft.com/en-us/lib...58(vs.80).aspx

http://www.codeproject.com/dotnet/DecryptForCrystal.asp

موفق باشید

----------

