PDA

View Full Version : خطای تقویم هنگام آپدیت



نسرین2000
دوشنبه 01 اردیبهشت 1393, 12:21 عصر
سلام
خیلی خسته شدم از این ارور ، هر کاری می کنم برطرف نمیشه
یه دستور آپدیت خیلی ساده نوشتم ولی مشکل کار اینجاست که اگر تاریخ ورود را که توسط کامپوننت Hm_Farsi_Calander ثبت میشه رو تغییر ندم ارور می گیرد یعنی حتما باید یک بار تاریخ ورود را پاک کنم و دوباره با تقویم تاریخ ورود رو ثبت کنم و بعد دکمه ویرایش را بزنم در حالی که گاهی اوقات من اطلاعات دیگری را می خوام ویرایش کنم و اصلا کاری با تاریخ ورود ندارم .
چی کار کنم ؟
Dim objsuite As New SqlCommand
objsuite.Connection = objconnection
objsuite.CommandText = " update suite set no_suite=@no_suite, date_vorood=@date_vorood , date_vorood1=@date_vorood1, date_khorooj=@date_khorooj ,modat_eghamat=@modat_eghamat, moaref=@moaref , pishpardakht=@pishpardakht , pay_night=@pay_night, takhfif=@takhfif ,darcad_takhfif=@darcad_takhfif, pardakht=@pardakht,nahve_pardakht=@nahve_pardakht where guest_id=@guest_id"
objsuite.Parameters.AddWithValue("@guest_id", txtguest_id.Text)
objsuite.Parameters.AddWithValue("@no_suite", DispSuit(lst))
objsuite.Parameters.AddWithValue("@date_vorood", HM_fcdate_v.Text)
objsuite.Parameters.AddWithValue("@date_vorood1", ShamsiToMiladi(CType(HM_fcdate_v.Text, String)))
objsuite.Parameters.AddWithValue("@date_khorooj", HM_fcdate_kh.Text)
objsuite.Parameters.AddWithValue("@modat_eghamat", txtmodat_eghamat.Text)
objsuite.Parameters.AddWithValue("@moaref", txtmoaref.Text)
objsuite.Parameters.AddWithValue("@pishpardakht", txtpishpardakht.Text)
objsuite.Parameters.AddWithValue("@pay_night", txtpay_night.Text)
objsuite.Parameters.AddWithValue("@takhfif", txttakhfif.Text)
objsuite.Parameters.AddWithValue("@darcad_takhfif", txtdarcad.Text)
objsuite.Parameters.AddWithValue("@pardakht", txtpishpardakht.Text)
objsuite.Parameters.AddWithValue("@nahve_pardakht", cbonahve_pardakht.Text)

objconnection.Open()
objsuite.ExecuteNonQuery()
objconnection.Close()
خطا هم اینه : Conversion failed when converting date and/or time from character string

ROSTAM2
چهارشنبه 03 اردیبهشت 1393, 06:05 صبح
date_vorood=@date_vorood , date_vorood1=@date_vorood1

وقتی که نمی خواید تاریخ ورود رو دوباره ثبت کنید چرا پارامتر دادید به دستور کوئریتون؟ حذفش کنید.

ROSTAM2
چهارشنبه 03 اردیبهشت 1393, 06:11 صبح
date_vorood=@date_vorood , date_vorood1=@date_vorood1وقتی که نمی خواید تاریخ ورود رو دوباره ثبت کنید چرا پارامتر اونو دادید به دستور کوئریتون؟ حذفش کنید.

نسرین2000
چهارشنبه 03 اردیبهشت 1393, 09:58 صبح
ببینید من یک سری تکس باکس ها دارم که کاربر ممکنه همه رو آپدیت کنه و یا ممکنه فقط بخواد یکی از اونها رو آپدیت کنه بنابراین دستور آپدیت رو برای تمامی تکس باکس ها نوشتم
حالا مشکل اینجاست که اگر کاربر نخواد تاریخ ورود را تغییر دهد و بخواهد فیلدهای دیگر را تغییر دهد ارور می گیرد .
در واقع به تغییر تاریخ ورود حساس است و در صورتی که تقویم را اتنتخاب نکند تا تاریخ جدید بدهد خطا می گیرد .

majidnazari65
چهارشنبه 03 اردیبهشت 1393, 10:47 صبح
چک کن که تابع ShamsiToMiladi با پارامتر ارسال شده خروجی استاندارد DateTime تولید میکنه. توی MsgBox نمایشش بده.

نسرین2000
شنبه 06 اردیبهشت 1393, 09:39 صبح
بله دقیقا حق با شماست
وقتی تاریخ ورود را با استفاده از تقویم اصلاح می کنم خروجی را درست تولید می کند ولی وقتی تاریخ ورود را دست نمیزنم خروجی 0 تولید می کند .
ولی نمی دونم دلیلش چیه ؟؟؟؟؟؟؟؟:متفکر:

majidnazari65
شنبه 06 اردیبهشت 1393, 10:36 صبح
ممکنه مشکل از کامپوننت باشه. هنگام پر کردن فرم، HM_fcdate_v.Text رو با چی پر میکنی؟

نسرین2000
شنبه 06 اردیبهشت 1393, 11:22 صبح
با کامپوننت تقویم HM_Farsi_Calander تاریخ مورد نظر را انتخاب می کنم و تکس باکس رو پر می کنم .
به نظر من اگر شرطی بذارم که " اگر کامپوننت تقویم انتخاب شد و تاریخ تکس باکس تغییر کرد دستور آپدیت اجرا شود و در غیر این صورت ( یعنی زمانی که کاربر تاریخ موجود را تغییر نداد ) اون قسمت از کد که مربوط به تاریخ شمسی است از کد آپدیت حذف شود ."
نظر شما چیه ؟
منتها نمی دونم چه طوری بهش بگم اگر مقدار تکس باکس تغییر کرد ؟

majidnazari65
شنبه 06 اردیبهشت 1393, 13:00 عصر
خیر این روش خوبی نیست.
کامپوننتی که استفاده کردی رو بذار برای دانلود تا تست کنیم.

نسرین2000
شنبه 06 اردیبهشت 1393, 14:18 عصر
http://s5.picofile.com/file/8121347918/HM_FarsiCalendar.rar.html

majidnazari65
شنبه 06 اردیبهشت 1393, 14:57 عصر
تابع ShamsiToMiladi رو خودت نوشتی؟ حتما یه تابع MiladiToShamsi هم داری. مشکل از یکی از این دو تا باید باشه که خروجی استاندارد تولید نمیکنه. چون وقتی از کامپوننت استفاده میکنی خروجی درست تولید میشه.

niknam_mh
شنبه 06 اردیبهشت 1393, 18:01 عصر
سلام داداش
من قبلاً اين مشکل رو داشتم شما بايد قبل از اينکه فرم لود بشه تکس باکس رو با تاريخ پر کني اينجوري مشکلت حل مي شه.

نسرین2000
یک شنبه 07 اردیبهشت 1393, 07:28 صبح
من از این تابع shamsitomildi جای دیگه ای هم استفاده کردم و مشکلی نداره و خیلی خوب تاریخ شمسی رو به میلادی تبدیل می کنه .
ببینید مشکل اینجاست که وقتی فرم ویرایش را باز می کنم و تاریخ ورود در تکس باکس مربوط به کامپوننت hm_farsi_calander وجود داره و من نیازی به ویرایش تاریخ ندارم و مابقی اطلاعات رو ویرایش می کنم و دکمه ویرایش رو می زنم برنامه متوجه نمی شه که یک تاریخ درون تکس باکس تاریخ تقویم هست و فکر می کنه خالیه و بنابراین مقدار "" ( تهی ) رو به تابع شمسی تو میلادی می فرسته و در نتیجه ارور به وجود می آید و لی زمانی که کامپوننت تقویم رو باز می کنم و دوباره تاریخ رو وارد می کنم حالا متوجه میشه که تاریخی درون تکس باکس تاریخ تقویم هست و اون رو به تابع شمسی تو میلادی می فرسته و دیگه برنامه ارور نمی دهد .
به بیان ساده تر : تا زمانی که روی کامپوننت تقویم کلیک نکنم و تاریخی انتخاب نکنم برنامه نمی فهمد که از قبل و در هنگام لود شدن اطلاعات تاریخی درون آن بوده
با این اوصاف کسی می تونه کمک کنه ؟؟؟؟؟؟؟؟؟؟

نسرین2000
یک شنبه 07 اردیبهشت 1393, 07:30 صبح
سلام داداش
من قبلاً اين مشکل رو داشتم شما بايد قبل از اينکه فرم لود بشه تکس باکس رو با تاريخ پر کني اينجوري مشکلت حل مي شه.
داداش این تکس باکس تاریخ موقع لود شدن اطلاعات پر هست ولی کامپوننت قبول نمی کنه و میگه دوباره باید روی من کلیک کنی و تاریخ رو انتخاب کنی . :متفکر:

نسرین2000
یک شنبه 07 اردیبهشت 1393, 07:55 صبح
آقای مجید حق با شما بود تابع shamsitomiladi درست عمل نمی کنه خروجی هر دو رو چک کردم با کدهای زیر:

MessageBox.Show(HM_fcdate_v.Text)
MessageBox.Show(ShamsiToMiladi(CType(HM_fcdate_v.T ext, String)))
وقتی فرمم لود میشه تاریخ 1393/01/25 درون تکس باکس هست messageboxاولی همان تاریخ رو نمایش می دهد ولی خروجی تابع 0 هست .
حالا اگر تاریخ رو دوباره لود کنم ( توسط تقویم ) خروجی تابع درست می شود .
ولی آخه چرا ؟؟؟؟؟؟؟؟؟

majidnazari65
یک شنبه 07 اردیبهشت 1393, 09:04 صبح
تو خط دوم یه Breakpoint با کلید F9 بذار و وقتی برنامه در این خط متوقف شد با کلید F11 برنامه رو Trace کن تا وارد تابع تبدیل تاریخ بشه. خط به خط برنامه رو با کلید F11 اجرا کن تا ببینی مشکل از کجاس و چرا صفر برمیگردونه؟

نسرین2000
یک شنبه 07 اردیبهشت 1393, 09:06 صبح
دوستان مژده از شر این ارور راحت شدم :قهقهه:
می دونید مشکل کجا بود :متفکر:
مشکل اینجا بود که وقتی فرم لود میشد و تکس باکس تاریخ پر بود مقدرا تکس باکس این بود : " 1393/01/25" یعنی کاراکترهای فاصله درون تکس باکس بود که وقتی به تابع شمسی تو میلادی ارسال می شد خطا می داد .
با کد زیر کاراکترها یspace را حذف کردم و مشکل چندین و چند ماهم حل شد :لبخند:
objsuite.Parameters.AddWithValue("@date_vorood1", ShamsiToMiladi(CType(Replace(HM_fcdate_v.Text, " ", ""), String)))
از دوستان ممنونم چون راهنمایی های شما بود که ذهنم معطوف به این تابع شد :تشویق::تشویق::تشویق: