PDA

View Full Version : تکنیک شما چیه تو این مورد؟



hamed_bostan
دوشنبه 07 شهریور 1384, 12:26 عصر
سلام
مب خوام ببینم شما تو این مورد چه تکنیکی پیش می گیرید و کدوم مورد بهترینه .
من وقای می خوام تاریخ رو توی بانک ذخیره کنم فارسی کنم و فارسی شده به صورت رشته ذخیره کنم یا همون طور میلادی ذخیره کنم و بعد برای بازیابی بخونم و کانورت کنم یکی یکی به شمسی؟
اگه فارسی ذخیره کنم نمیشه روش عملیان کامل اانجام داد و دستمون بسته تره ولی گزارش گیره ساده تر و سرعت بالا تر اما اگه میلادی باشه سرعت بازیابی کمتر و گزارش گیره وحستناک ولی عملیات های ... روش ساده تره . من چی کنم یکی کامل راهنمایی کنه

Chabok
دوشنبه 07 شهریور 1384, 12:45 عصر
من خودم کاملا با تاریخ فارسی کار می کنم و مشکلی هم نداشتم
هم در ثبت هم در جستجو و هم در همه چیز

میشه بگین چه مشکلی با تاریخ شمسی دارین ؟

Hamedm
دوشنبه 07 شهریور 1384, 13:06 عصر
اگه فارسی ذخیره کنم نمیشه روش عملیان کامل اانجام داد و دستمون بسته تره
سلام

کی اینو گفته؟ برای انجام عملیات روی تاریخ شمسی کلی DLL و تابع موجود است که تمام عملیات رو روی تاریخ شمسی انجام میده.
کمی در این سایت و اینترنت جستجو کنی راحت میتونی پیدا کنی.

در پناه حق موفق باشید و پرتوان

مجتبی کریمی
دوشنبه 07 شهریور 1384, 13:45 عصر
سلام
تو این مورد فکر کنم بهتره از تاریخ میلادی استفاده کنی
آخه تو VB.NET بعضی از تاریخ ها رو نمیتونی بدی
مثل تاریخ ها 29/2/83 و 30/2/83 و 31/2/83 چون این تاریخ ها معادل میلادی ندارن یا بهتر بگم ماه دوم میلادی 28 روز بیشتر نیست
حتی اکسس هم این تارخ ها رو قبول نمی کنه
میتونی تاریخ ها رو به صورت میلادی ذخیره کنی و تو برنامت اونو به تاریخ رشته ای شمسی تبدیل کنی

mehrdotnet
سه شنبه 08 شهریور 1384, 17:49 عصر
سلام
من از همون Pcal که قبلاً معرفی کردم استفاده می کنم. تاریخ فارسی رو به صورت رشته ای ذخیره می کنم و وقتی بخوام روش عملیات انجام بدم اون رو تبدیل به میلادی می کنم و باهاش کار می کنم. تا حالا که مشکلی پیش نیومده

rezanew
سه شنبه 08 شهریور 1384, 22:53 عصر
من نمی دونم شما چه عملیات خاصی می خواهین روی تاریخ ها انجام بدین اگه بعد از استخراج از بانک می خواهین عملییات انجام بدین بهتره به صورت String ذخیره کنید و از کلاس های موجود در برنامه نویس هم استفاده کنید
ولی من خودم تاریخ رو به صورت 13840101 وبه حالت Int ذخیره می کنم تا بتونم عمل سرچ رو راحت تر انجام بدم!

Ehsan Zand
چهارشنبه 09 شهریور 1384, 01:11 صبح
سلام
اولا می خواستم بدونم که شمایی که می گید همه کار میشه با تاریخ شمسی کرد
مثلا تو SQL چطوری میشه برای تاریخ شمسی شرط گذاشت که مثلا اطلاعات بین دو
تا تاریخ رو بیاره؟

در ضمن پیشنهاد من برای اینکار اینه که برای هر کدام از مواردی که می خواهی تاریخ
ذخیره کنی دو فیلد تعریف کن که یکی از نوع Date و اون یکی از نوع کاراکتر باشه و موقع
ذخیره کردن با استفاده از توابع موجود یا DLL ها تاریخ شمسی رو به میلادی تبدیل
و بعد هر دو رو ذخیره می کنی. اونوقت موقع گزارش گیری راحت از فیلد کاراکتر استفاده می کنی ولی فیلتر هارو برای فیلد Date می نویسی.

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

راستی این کادر ارسال جواب سریع کجا رفته ؟

rezanew
چهارشنبه 09 شهریور 1384, 17:35 عصر
سلام
می شه همه کاری کرد کافیه از همون روشی که بالا به هش اشاره کردم استفاده کنید مثلا:


Select * from tb where SDate>13840101 AND SDate<13840201

و ....

یاشار
جمعه 11 شهریور 1384, 13:45 عصر
به نظر من بهتره تاریخ به صورت میلادی ذخیره بشه و موقع نمایش به کاربر، تبدیل به شمسی بشه.

عملیاتی که روی تاریخ انجام می‌شه محدود به مقایسه نیست و خیلی کارهای دیگه روی تاریخ انجام می‌شه که ممکنه در حال حاضر توی برنامتون نباشه ولی در آینده لازم بشه. مثلا اگر بخواهید به همه تاریخ‌ها 10 روز اضافه کنید ممکنه روز مورد نظرتون بیفته توی ماه بعد یا حتی سال بعد. سال کبیسه هم که باید مد نظر قرار بگیره. پیدا کردن اختلاف دو تاریخ براساس ماه و روز هم داستان خودش رو داره. برنامه‌های تحت وب که باید اختلاف ساعت رو هم توی نمایش تاریخ دخیل کنند، برای خودشون محاسبات و دردسرهایی داره که توابع دیتابیس توی برطرف کردنشون کمک می‌کنند.

درسته که می‌شه همه کاری کرد، ولی لزومی نداره کارهایی که قبلا به روش‌های امتحان شده انجام شدن رو دوباره بازسازی کرد. این کار فقط ممکنه به درد تمرین برنامه‌نویسی و تقویم‌شناسی (!) بخوره.

شما می‌تونید تاریخ رو به میلادی ذخیره کنید و تمام این کارها و خیلی کارهای دیگه که بنابر ضرورت پیش خواهد اومد رو به دیتابیس بسپارید و از دردسر تبدیلات و محاسبات خلاص بشید، یا اینکه به صورت عدد صحیح ذخیره کنید و کار خودتون رو سخت کنید و خودتون رو از کلی امکانات دیتابیس محروم کنید.

یا حتی یک روش دیگه، بسته به ضرورت برنامه‌تون، می‌تونه این باشه که یک Calculated Column به جدولتون اضافه کنید که مقدار معادل شمسی تاریخ رو نگه داره و هر وقت احتیاج به نمایش داشتید ازش استفاده کنید. هر کجای برنامه هم که احتیاج به محاسبه داشتید از ستون میلادی استفاده کنید.

Reza_K
جمعه 11 شهریور 1384, 14:07 عصر
آیا تاریخ با تاریخ فرق می‌کنه؟ مثلا در C sharp یا MFC تاریخ میلادی یا خورشیدی داریم؟ همه موارد نوع داده تاریخ متشکل از یک عدد اعشاری float هستند که به روشی زمان سپری شده از تاریخ مشخصی را در بر دارند. پس تنها یک را برای ذخیره زمان در DB وجود دارد. حال اگر به شکل یک string باشه برای انسان قابل خواندن است و اگر به فرمت استاندادر IEEE باشه ماشین بیشتر باهاش حال می‌کنه. من از روش دوم استفاده می‌کنم.

یاشار
جمعه 11 شهریور 1384, 15:36 عصر
درسته که کامپیوتر فقط یک راه برای ذخیره تاریخ داره، ولی مشکل ما اینجاست که هیچ DBMS ی تاریخ شمسی رو به استاندارد IEEE تبدیل نمی‌کنه [ یا من خبر ندارم ] بنابراین وقتی می‌خواهیم به DB بگیم که فلان تاریخ رو برای من ذخیره کن، پیش‌فرض اینه که این تاریخ میلادیه و این تاریخ میلادی به فرمت قابل فهم برای کامپیوتر در میاد. حالا اگر تاریخ شمسی رو وارد کنیم که بوسیله DBMS به فرمت IEEE تبدیل بشه، این زمان اشتباه خواهد بود. مسئله اصلی اینه که چطور تاریخ رو از کاربر بگیریم و چطور تبدیل کنیم. به هر حال از کاربر که نمی‌تونیم بخواهیم که به جای تاریخ یک عدد float وارد کنه.

دقیقا به همین دلیل هم هست که من می‌گم بهتره که تاریخ به صورت میلادی وارد بشه که عدد float ی که DBMS تولید می‌کنه به زمان درست اشاره داشته باشه.

استفاده از string و integer برای ذخیره تاریخ در حالت کلی اشتباهه. چون اولا استاندارد نیست و فقط خود برنامه نویس ازش سر در میاره و توی کار تیمی مشکل ایجاد می‌کنه و ثانیا خیلی از محاسبات رو با اشکال مواجه می‌کنه. حالا شاید یک برنامه خاص براش مفیدتر باشه که اطلاعات تاریخ به صورت string در DB ذخیره بشه. من در حالت کلی عرض کردم.

Ehsan Zand
شنبه 12 شهریور 1384, 01:08 صبح
بازم سلام
البته اینطور که من امتحان کردم تو SQL می شه برای تاریخ شمسی هم مثل میلادی شرط
محدوده گذاشت و براحتی اطلاعات لازم را لود کرد.
ولی بازهم بهترین راه همونیه که گفتم و دوستمون هم بهش اشاره کرد:


یا حتی یک روش دیگه، بسته به ضرورت برنامه‌تون، می‌تونه این باشه که یک Calculated Column به جدولتون اضافه کنید که مقدار معادل شمسی تاریخ رو نگه داره و هر وقت احتیاج به نمایش داشتید ازش استفاده کنید. هر کجای برنامه هم که احتیاج به محاسبه داشتید از ستون میلادی استفاده کنید.

چون اگر بخواهید توی برنامه مثلا با کریستال گزارش بگیرید دیگه از توابع یا DLL های تبدیل
تاریخ نمیشه استفاده کرد.
عزیزان این کادر ارسال جواب سریع کلا حذف شده یا فقط برای من نمیاد.