PDA

View Full Version : مشکل در PersianDateSupport.dll



reham
شنبه 31 اردیبهشت 1384, 12:22 عصر
سلام.
من 3 تا برنامه داشتم که توشون از PersianDateSupport.dll استفاده کردم اونم برای تبدیل تاریخ سیستم به شمسی.



Dim PDC As New PersianDateSupport.PersianDate()
Dim dd As Date
dd = PDC.DateToPersian(Now)


حدود 4 ماه این برنامه ها درس کار میکرد.
از امروز هر 3 تا این پیغام رو میده.


cast from string "1384/02/31 " to type Date is invalid


با تغییر متغیر dd به string به جای date مشکل حل شد و dll دوباره درست کار کرد.
من این dll رو از همین سایت برداشتم.
نمیدونم الان مشکلش چیه .یعنی باید برم تمام جاها type رو عوض کنم.
اگه ممکنه من رو راهنمایی کنید/

linux
شنبه 31 اردیبهشت 1384, 17:34 عصر
این برنامه را من نوشتم برای استفاده در ویژوال بیسیک 6 و برای .نت هم بازنویسی کردم اگر برای .نت استفاده می کنید بهتر هست که از نسخه .نت استفاده کنید و آخرین نسخه را هم بزودی با تغیرات بسیار زیاد ارائه خواهم داد.
شما یک اشتباه در برنامه نویسی کردید کد را باید بصورت زیر بنویسید اگر دقت کردخ باشید خروجی DateToPersian یک string هست نه date پس برنامه خودتان را به دقت اصلاح کنید.




Dim PDC As New PersianDateSupport.PersianDate
Dim farsiDate As String
Dim miladiDate As Date
farsiDate = PDC.DateToPersian(Now)
miladiDate = PDC.PersianToDate(farsiDate)
MsgBox(farsiDate & " = " & miladiDate)

hadi2345
یک شنبه 01 خرداد 1384, 07:57 صبح
اگر از نوع date برای ذخیره تاریخ شمسی استفاده کنید این مشکل رو خواهید داشت و ایراد رو هم به روز 31 اون ماه میده و مثلا در تاریخ 84/06/31 و 84/04/31 هم این ایرادو خواهی دید . تمام نوع های date رو به string تبدیل کن . ولی اگه بخوای تو database ذخیره کنی و بعدا بخوای جستجو انجام بدی(بین دو تاریخ ) مشکل خواهی داشت . که اون مشکل هم راه حل داره ....

reham
یک شنبه 01 خرداد 1384, 07:59 صبح
از راهنماییتون ممنونم.من تاریخ رو از نوع date ذخیره نمیکنم.
از نوع nvarchar ذخیره میکنم.
این dll رو برای پاس کردن تاریخ شمسی به کریستال استفاده میکنم.یعنی برای تبدیل تاریخ سیستم به شمسی.
حسابی گیج شده بودم مشکل چیه.چون دقیقا روز 31 اردیبهشت از کار افتاد و امروز درست کار میکنه.
از راهنماییتون خیلی خیلی ممنونم. :flower: :flower: :flower:
:موفق:

linux
یک شنبه 01 خرداد 1384, 08:25 صبح
اگر این dll را من درست کردم! منظورم این بوده که تاریخ میلادی در متغیر date ذخیره بشه و هر وقت احتیاج بود به صورت تاریخ شمسی تبدیل شده و بصورت string نمایش داده بشه.
وقتی شما 1384/02/31 را در متغیر date قرار می دهید این تاریخ به عنوان تاریخ میلادی در نظر گرفته میشه
یعنی 1384 میلادی یعنی 700 سال پیش و دومین ماه میلادی 31 روز نیست. و این باعث بروز این اشکال میشه.
به هر حال منظور از این dll و توابع این بوده است که شما تاریخ میلادی را در متغیر date ذخیره کنید و هر وقت احتیاج شد تاریخ را بصورت شمسی بر گردونید یا تاریخ را از کاربر به صورت شمسی بگیرید و معادل میلادی اون تاریخ را در متغیر date ثبت کنید مثال زیر را نگاه کنید


Dim PDC As New PersianDateSupport.PersianDate
Dim miladiDate As Date
Dim shamsidate As String
shamsidate = InputBox("shamsi Date")
miladiDate = PDC.PersianToDate(shamsidate)
MsgBox(PDC.DateToPersian(miladiDate.AddDays(150)) & " تاریخ ورودی شما به اضافه 150 روز دیگر")

امیدوارم منظور من را متوجه شده باشی که برای چی این dll را درست کردم
گرفتن تاریخ بصورت شمسی تبدیل به معادل آن تاریخ بصورت میلادی برای ذخیره در دیتابیس ، محاسبات روی این مقدار مانند اضافه کردن روز و ماه و سال و ...
به هر حال تاریخ شمسی را در متغیر date ذخیره نکنید


Dim PDC As New PersianDateSupport.PersianDate
Dim miladiDate As Date
Dim shamsidate As String
shamsidate = InputBox("shamsi Date")
miladiDate = PDC.PersianToDate(shamsidate)
MsgBox(PDC.DateToPersian(miladiDate.AddDays(150)) & " تاریخ ورودی شما به اضافه 150 روز دیگر")

Dim d1 As String
Dim d2 As String
Dim d3 As Date
Dim d4 As Date

d1 = InputBox("shamsi Date1")
d2 = InputBox("shamsi Date2")
d3 = PDC.PersianToDate(d1)
d4 = PDC.PersianToDate(d2)
MsgBox(DateDiff(DateInterval.Day, d3, d4) & "اختلاف بین این دو تاریخ ")

این کد ها را خوب مطالعه کنید

reham
یک شنبه 01 خرداد 1384, 09:04 صبح
Dear linux
از کمکتون ممنونم.

Microsoft.net
یک شنبه 01 خرداد 1384, 23:24 عصر
اقا من به همه یه توصیه برادرانه می کنم و اون اینکه از این dll استفاده نکنین چون بد جوری پدر برنامه مارو دراورد به خاطرش مجبور شدیم روی 40-50 تا station برنامه رو تغییر بدیم . بعد از هر چند وقتی یه باگهای عجیبی از توش در میاد !!! من که از سایت یاهو تاریخ برگردان شمسی به روش علمی رو دان کردم به همراه سورس خیلی هم راضیم پیشنهاد می کنم شما هم همینکارو بکننین تا به سرنوشت من دچار نشین

linux
دوشنبه 02 خرداد 1384, 09:23 صبح
این dll را وقتی توی این فروم گذاشتم خواهش کردم از همه که اگر استفاده کردند و باگ داشت حتما اطلاع بدهند
اگر شما هم باگهایی پیدا کردید و خاطرتان هست به من هم اطلاع بدهید در ضمن این نسخه برای vb بود برای
.نت هم اصلاح کرده بودم که در سایت گذاشتم.
سورس برنامه هم در سایت بود می گشتید پیدا می کردید.
اگر زحمتی نیست این سورسی که از یاهم دانلود کردید اینجا بگذارید ما هم استفاده کنیم.

hadi2345
دوشنبه 02 خرداد 1384, 12:36 عصر
با سلام .
من هم دارم از این dll استفاده میکنم و از اون تو یکی از برنامه هام استفاده کردم ولی تا حالا ایرادی نداده .
اگه ممکنه توضیح بیشتری بدید. و اون سورس رو هم که download کردید لطفا اینجا بذارید تا همه استفاده کنند .
موفق باشید.

reham
دوشنبه 02 خرداد 1384, 21:20 عصر
من با این dll مشکل داشتم چون خروجی شمسی رو تو date میریختم .اگه مشکل دیگه ای داره به منم بگید .چون چند جا ازش استفاده کردم.

sh
دوشنبه 02 خرداد 1384, 22:05 عصر
آخرین نسخه را هم بزودی با تغیرات بسیار زیاد ارائه خواهم داد.

:flower: کی انشالله