PDA

View Full Version : مبتدی: جمع زدن چند زمان و ذخیره در دیتابیس SQL



web_user
یک شنبه 19 خرداد 1392, 12:07 عصر
سلام به همه برنامه نویسای گرامی:

من کلی تو سابتا گشتم ولی نتونستم جواب سوالمو پیدا کنم.

سوالم چیه؟
خوب سوال من اینه 5 تکست باکس دارم که داخل 4تاشون زمان با این فرمت تایپ میشه "40:00" و تکست باکس بعدی جمع این زمان ها رو محاسبه می کنه به فرض اینکه هرکدوم از تکست باکس ها "40:00" باشن چطوری من میتونم جمع این زمانها رو حساب کنم و توی بانک اسکیول ذخیره کنم. که بشه بعداً گزارش هم گرفت ازش برای چاپ.
و فرمت ذخیره برایمن توی بانک چطوری باشه که جواب بده؟

من خیلی گشتم از TimeSpan هم استفاده کردم ولی اون لامصب فکر کنم با تکست باکس مشکل داره!
خیلی ممنون میشم بهم کمک کنید!

f.beigirad
یک شنبه 19 خرداد 1392, 14:50 عصر
چرا عصبی میشی دوست من؟

TimeSpan برا محاسبه فاصله ی دوتا تاریخه(DateTime) .تکس باکس string برمیگردونه که نمیدونم چطور به Time تبدیل میشه.تو سایتای زبان اصلی بگردی پیدا میکنی.

و اینکه چجور جمعشون کنی : کل این اعدادو بگیر و با split جداشون کن.دقیقه ها رو باهم .ثانیه هارو هم با هم جمع کن و ثانیه هارو هم تقسیم بر 60 کن وبه دقایقت اضافه کن و باقی مونده هم بذار تو ثانیه بمونه.

و این لینک رو ببین و مطالعه کن.و ببین کدوم نوع فیلد برای ذخیره ی داده هات به دردت میخوره
http://www.i-site.ir/sqlShow.aspx?code=8&title=%D8%A7%D9%86%D9%88%D8%A7%D8%B9%20%D8%AF%D8%A 7%D8%AF%D9%87%20%D8%AF%D8%B1%20SQL


موفق و موید باشی

alexmcse
دوشنبه 20 خرداد 1392, 12:08 عصر
سلام به همه برنامه نویسای گرامی:

من کلی تو سابتا گشتم ولی نتونستم جواب سوالمو پیدا کنم.

سوالم چیه؟
خوب سوال من اینه 5 تکست باکس دارم که داخل 4تاشون زمان با این فرمت تایپ میشه "40:00" و تکست باکس بعدی جمع این زمان ها رو محاسبه می کنه به فرض اینکه هرکدوم از تکست باکس ها "40:00" باشن چطوری من میتونم جمع این زمانها رو حساب کنم و توی بانک اسکیول ذخیره کنم. که بشه بعداً گزارش هم گرفت ازش برای چاپ.
و فرمت ذخیره برایمن توی بانک چطوری باشه که جواب بده؟

من خیلی گشتم از TimeSpan هم استفاده کردم ولی اون لامصب فکر کنم با تکست باکس مشکل داره!
خیلی ممنون میشم بهم کمک کنید!

این طور ی آسان است

int i = DateTime.Now.Hour+3;
int minute = DateTime.Now.Minute+20;

textBox1.Text = i + ":" + minute.ToString() ;
//فقط بایدشرط بگذاری که دقیقه به 60 رسید دقیقه صفر بشود وبه ساعت 1 ساعت اضافه شود

tooraj_azizi_1035
دوشنبه 20 خرداد 1392, 16:17 عصر
TimeSpan time1= TimeSpan.Parse("40:00");
TimeSpan time2= TimeSpan.Parse("20:00");
TimeSpan time3= time1.Add(time2);

web_user
سه شنبه 21 خرداد 1392, 08:14 صبح
TimeSpan time1= TimeSpan.Parse("40:00");
TimeSpan time2= TimeSpan.Parse("20:00");
TimeSpan time3= time1.Add(time2);


تشکر دوست عزیز, چطوری تایم اسپان رو با فرمت تکست باکس کانورت می کنی؟ این فرمت شمارو با استرینج قبول می کنه ولی اونطوری خطا میده!

tooraj_azizi_1035
سه شنبه 21 خرداد 1392, 10:57 صبح
داخل TextBox چطوری Time رو وارد می کنی؟
TextBox هم همونه به جای 4:00 می نویسی TextBox1.Text

web_user
سه شنبه 21 خرداد 1392, 12:59 عصر
داخل TextBox چطوری Time رو وارد می کنی؟
TextBox هم همونه به جای 4:00 می نویسی TextBox1.Text


دوست گلم خودت یبار چک می کنی برام! چون واسه من گیر به فرمتش میده میگه این فرمت واسه تایم اسپان درست نیست! البته زمانهای من 4تا هستن نه دوتا! اگه لطف کنی و مثالشو بصورت پروژه واسم بذاری لطف محشری کردی! ممنون

tooraj_azizi_1035
سه شنبه 21 خرداد 1392, 14:18 عصر
لطف کن چیزی که داخل TextBox تایپ می کنی رو برام بذار.

web_user
سه شنبه 21 خرداد 1392, 16:23 عصر
لطف کن چیزی که داخل TextBox تایپ می کنی رو برام بذار.

در اصل تکست باکس نیستن Masked Textbox هستن که یکیشون به اسم MSKEncourage و یکی MSKPunish و یکی MSKRest و یکی MSKNightWork و در آخر اونی که جمع همه رو ذخیره می کنه MSKTotal هست که خاصیت text شون رو داخلشون "40:00" پر میکنه و خاصیت Text change محاسبه انجام میشه. البته تو جدول های دیگه هم اطلاعاتی هست که با این اطلاعات باید جمع بشه مانند کارکرد در طول یک ماه که بصورت روزانه ثبت شده در بانک SQL SERVER 2008 که بعد برای گزارش گیری جمع همه اینارو میخایم و به کارمند میگیم که کل کارکرد شما با تشویقی و تنبیهی و حق شیفت و اضافه کار و اینا انقد شده که انقدش تشویقی بوده و .....

tooraj_azizi_1035
سه شنبه 21 خرداد 1392, 18:06 عصر
باید خطی که خطا رخ میده رو دیباگ کنی یعنی یه کلیک سمت چپ اون خط بکنی تا دایره قرمز رو قرار بده.
همینطور می تونی مقدار متغیری رو که فرمت مناسبی برای زمان نداره رو Add Watch کنی تا مقدار اون رو هنگام دیباگ ببینی.
ضمناً در رویداد TextChanged اگر محاسبه رو انجام میدی در صورتی که زمانی مثل 4:00 رو دستی وارد کنی خطا میده چون این رویداد در حین تایپ زمان Fire میشه یعنی یکبار به ازای 4، یکبار 4: و یکبار 4:0 و...

عکس از صفحه Visual Studio هم بگیری بزاری خوبه (همینطور کدها).

web_user
چهارشنبه 22 خرداد 1392, 10:27 صبح
TimeSpan dateTime = TimeSpan.Parse(MSKEncourage.Text);
TimeSpan dateTime1 = TimeSpan.Parse(MSKPunish.Text);
TimeSpan dateTime2 = TimeSpan.Parse(MSKRest.Text);
TimeSpan dateTime3 = TimeSpan.Parse(MSKNightWork.Text);
TimeSpan dateTime4 = dateTime.Add(dateTime1);
MSKTotal.Text = dateTime.Add(dateTime1)+"";


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

http://upload.tehran98.com/img1/21le6k4i0zx181xhi248_thumb.png (http://upload.tehran98.com/viewer.php?file=21le6k4i0zx181xhi248.png)

tooraj_azizi_1035
چهارشنبه 22 خرداد 1392, 12:00 عصر
دو تا کنترل قبلی مقدارشون رو Parse کرده با موفقیت اگر مشکلی بود روی اونها خطا می داد حتماً یه فرقی با دوتای قبلی تو وارد کردن اطلاعات داره. می تونی دقیقاً چیزی رو که وارد هر سه تا Box کردی رو بذاری.
در TextChange کدوم Box این کدها قرار داره؟

web_user
چهارشنبه 22 خرداد 1392, 12:28 عصر
دو تا کنترل قبلی مقدارشون رو Parse کرده با موفقیت اگر مشکلی بود روی اونها خطا می داد حتماً یه فرقی با دوتای قبلی تو وارد کردن اطلاعات داره. می تونی دقیقاً چیزی رو که وارد هر سه تا Box کردی رو بذاری.
در TextChange کدوم Box این کدها قرار داره؟

http://upload.tehran98.com/img1/82cmu2i8hkncomxdqxm1_thumb.png (http://upload.tehran98.com/viewer.php?file=82cmu2i8hkncomxdqxm1.png)


تورج جان مواقعی هست که ارور نمیده! که بنظر خودم اگه مقدارش کمتر از 24 باشه ارور نمیده اگه بیشتر باشه باز ارور میده یکیش همینی که الان گذاشتم!

tooraj_azizi_1035
چهارشنبه 22 خرداد 1392, 12:33 عصر
به عنوان یک جواب کلی:
در کل سه Exception برای TimeSpan.Parse وجود دارد:
ArgumentNullException وقتی که مقدار وارد شده null هست.
FormatException وقتی که زمان رو معتبر وارد کردید اما بین اعداد و علائم فاصله یا اشغال باشه...
OverflowException زمانی که زمان رو با فرمت رو درست وارد کردید اما رنج معتبر رو رعایت نکردید.


فرمت معتبر: [ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]

به قسمت های Bold شده توجه کن:

Element
Description
ws
Optional white space.
-
An optional minus sign, which indicates a negative TimeSpan.
d
Days, ranging from 0 to 10675199.
.
A culture-sensitive symbol that separates days from hours. The invariant format uses a period (".") character.
hh
Hours, ranging from 0 to 23.
:
The culture-sensitive time separator symbol. The invariant format uses a colon (":") character.
mm
Minutes, ranging from 0 to 59.
ss
Optional seconds, ranging from 0 to 59.
.
A culture-sensitive symbol that separates seconds from fractions of a second. The invariant format uses a period (".") character.
ff
Optional fractional seconds, consisting of one to seven decimal digits.


از اینجا به بعد با خدا مشورت کن.:چشمک:

web_user
چهارشنبه 22 خرداد 1392, 12:50 عصر
تورج جان پس راه حل برای زمان های زیاد چیه؟ چون من میخام 50 ساعت و 40 ساعت را باهم جمع کنم!

tooraj_azizi_1035
چهارشنبه 22 خرداد 1392, 15:37 عصر
آقا من تست کردم تو خونه جواب گرفتم:
MessageBox.Show(TimeSpan.Parse("00:40").Add(TimeSpan.Parse("00:50")).ToString());
//01:30

web_user
پنج شنبه 23 خرداد 1392, 10:19 صبح
آقا من تست کردم تو خونه جواب گرفتم:
MessageBox.Show(TimeSpan.Parse("00:40").Add(TimeSpan.Parse("00:50")).ToString());
//01:30

تورج جان شما دقیقشو محاسبه کردین مال من هم باید ساعت باشه هم دقیقه مثلا "50:30" +"80:00"

tooraj_azizi_1035
پنج شنبه 23 خرداد 1392, 11:09 صبح
رنج ساعت رو باید بین 0 و 23 وارد کنی. اینطوری خطا میده.

S.Reza
پنج شنبه 23 خرداد 1392, 12:09 عصر
اول باید ساعت رو تبدیل کنی به روز و . . . بعد جمع کنی

به روشی ساده همان 50 ساعت رو تبدیل میکنم


MessageBox.Show(TimeSpan.FromHours(50).ToString("d'd 'h'h 'm'm 's's'"));

web_user
پنج شنبه 23 خرداد 1392, 12:28 عصر
روش بهتری نبود؟