PDA

View Full Version : جمع زمانهای ثبت شده در دیتابیس SQL



mhmoein
یک شنبه 26 اردیبهشت 1389, 19:48 عصر
با سلام در بانک یک فیلد دارم به نام SUM_TIME که مجموع زمانهای مرخصی روزانه یک فرد را مشخص می کنه . حالا میخوم این مقدار رو با هم جمع کنم و در یک تکست باکس نشون بدم. دوستان عزیز می تونن کدی برای این موضوع به من بدن ممنون می شم.
نمی خوام تو Datagrideview این کار رو انجام بدم فقط می خوام اطلاعات از بانک خونده بشه و پس از محاسبه در یک تکست باکس نمایش داده بشه ؟

ricky22
یک شنبه 26 اردیبهشت 1389, 22:44 عصر
نوع داده ای date متد addminute داره
زمانا رو به دقیقه تبدیل کن و جمع کن

mhmoein
یک شنبه 26 اردیبهشت 1389, 22:54 عصر
دوست عزیز ممنون از جوابتون ولی میشه کدی در اختیار من بذاری . ممنون می شم

mhmoein
دوشنبه 27 اردیبهشت 1389, 10:26 صبح
ببخشید دوستان کسی نمی تونه کمک کنه

من یه فلید از نوع varchar دارم که اطلاعات زمان رو به صورت ( مثلا : 12:20) توش ذخیره کردم حالا می خوام تمام زمانهای این فیلد با هم جمع بشن. ممنون می شم راهنمایی بکنید منو .

sahele_sheni
دوشنبه 27 اردیبهشت 1389, 12:33 عصر
شما چیو ذخیره میکنید ؟ ساعت ورود خروج ؟ زمان مرخصی؟ فرمت ذخیره کردن ؟

mhmoein
دوشنبه 27 اردیبهشت 1389, 13:02 عصر
دوست عزیز من مدت زمان مرخصی رو ذخیره می کنم .

یعنی به عنوان مثال فرد به مدت : 02:45 به مرخصی رفته است.

ACorvinus
دوشنبه 27 اردیبهشت 1389, 14:19 عصر
سلام عزیزم. خوبی؟

یه بانک داریم که اسمش tst هست که یه جدول داره به اسم Table_1 که یه ستون داره به اسم tm و اینو به خاطر داشته باش که نوع داده ای varchar هستش و فرمت ساعتی که در اون نگه میدارین حتما اینجوری هستش----> hh:mm یا h:m

حالا داریم:



Dim strConnection As String = "Persist Security Info=False;User ID=sa;Initial Catalog=tst;Data Source=.;Password=12345"
Dim sqlConnection As SqlConnection
Try
sqlConnection = New SqlConnection(strConnection)
qlConnection.Open()
Dim command As String = "Select tm from Table_1"
Dim sqlcommand As SqlCommand = New SqlCommand(command, sqlConnection)
Dim sqlreader As SqlDataReader = sqlcommand.ExecuteReader()
Dim strSumHours As Integer = 0
Dim strSumMinutes As Integer = 0
While sqlreader.Read
Dim ar() As String = sqlreader.Item("tm").ToString.Split(":")
strSumHours += Integer.Parse(ar(0))
strSumMinutes += Integer.Parse(ar(1))
End While
TextBox1.Text = (strSumHours + (strSumMinutes \ 60)).ToString + ":" + (strSumMinutes Mod 60).ToString
sqlConnection.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
If sqlConnection.State = ConnectionState.Open Then
sqlConnection.Close()
End If
End Try



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

mhmoein
دوشنبه 27 اردیبهشت 1389, 14:45 عصر
دوست عزیز خیلی آقایی بخدا - امیدوارم به حق صاحب امروز تمامی عمرت موفق باشی.

فقط یه چیز این تاریخ زمان رو به صورت مثلا : 5:0 نشون می ده.

می شه کاری کرد که به صورت 05:00 نمایش بده ساعت رو.

خیلی ممنون.

ACorvinus
دوشنبه 27 اردیبهشت 1389, 14:57 عصر
بازم سلام.

داشتم پست هایی رو که زده بودین رو میدیدم، تو این تایپیک http://barnamenevis.org/forum/showthread.php?t=221253 یه بار جواب این سوالتونو (05:06) در مثال تاریخ گرفتین، چرا بازم سوال میپرسین؟!!!

با کمی تغییر میتونین به نتیجه برسین، موفق باشین. :تشویق:

mhmoein
دوشنبه 27 اردیبهشت 1389, 15:19 عصر
سلام - حق با شما بود

کدم رو به این صورت اصلاج کردم درست شد . ( در هر صورت ممنون از راهنمایی خوبتون )



Dim strConnection As String = "Persist Security Info=False;User ID=sa;Initial Catalog=tst;Data Source=.;Password=12345"
Dim sqlConnection As SqlConnection
Try
sqlConnection = New SqlConnection(strConnection)
qlConnection.Open()
Dim command As String = "Select tm from Table_1"
Dim sqlcommand As SqlCommand = New SqlCommand(command, sqlConnection)
Dim sqlreader As SqlDataReader = sqlcommand.ExecuteReader()
Dim strSumHours As Integer = 0
Dim strSumMinutes As Integer = 0
While sqlreader.Read
Dim ar() As String = sqlreader.Item("tm").ToString.Split(":")
strSumHours += Integer.Parse(ar(0))
strSumMinutes += Integer.Parse(ar(1))
End While

Dim strSumHours1 As String = (strSumHours + (strSumMinutes \ 60)).ToString()
Dim strSumMinutes1 As String = (strSumMinutes Mod 60).ToString()
If (strSumHours1.Length < 2) Then
strSumHours1 = "0" + strSumHours1
End If
If (strSumMinutes1.Length < 2) Then
strSumMinutes1 = "0" + strSumMinutes1
End If
TextBox1.Text = strSumHours1 + ":" + strSumMinutes1
sqlConnection.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
If sqlConnection.State = ConnectionState.Open Then
sqlConnection.Close()
End If
End Try

ACorvinus
دوشنبه 27 اردیبهشت 1389, 15:33 عصر
آفرین دوست خوبم. اینم بنویسی فرقی نداره فقط اینکه دوتا متغیر تعریف نمی کنی!!!



TextBox1.Text = IIf((strSumHours + (strSumMinutes \ 60)) < 10, "0" + (strSumHours + (strSumMinutes \ 60)).ToString, (strSumHours + (strSumMinutes \ 60)).ToString) _
+ ":" + IIf((strSumMinutes Mod 60) < 10, "0" + (strSumMinutes Mod 60).ToString, (strSumMinutes Mod 60).ToString)


سعی کن از Length برای فهمیدن طول یه عدد استفاده نکنی. یادت نره، یه عدد!

موفق باشی. :لبخندساده:

mhmoein
دوشنبه 27 اردیبهشت 1389, 15:58 عصر
ممنون دوست عزیز - خیلی اذیتت کردم اما یه سوال دیگه
من میخوام این زمان بدست آمده رو شما فرض کن : ( 9:20 )

ما روز کاری شرکت رو 7:20 در نظر می گیریم حالا می شه کاری کرد که این عدد رو در صورتی که به 7:20 برسه 1 یک روز نمایش بده یعنی سابقه مرخصی رو 1 روز و 2:30 در نظر بگیره برای این کار باید تابع خاصی رو تعریف کنم ؟

ACorvinus
دوشنبه 27 اردیبهشت 1389, 16:20 عصر
سلام!!!

اگه 7:20 طول ساعات کاری در یک روز رو در نظر گرفته باشی پس 440 میشه دقایق کارکرد در روز. با این توصیف داریم:



Dim intTotalMinutes As UInteger = 0
While sqlreader.Read
Dim ar() As String = sqlreader.Item("tm").ToString.Split(":")
intTotalMinutes += (Integer.Parse(ar(0)) * 60) + Integer.Parse(ar(1))
End While
TextBox1.Text = String.Format("{0} روز و {1} ساعت و {2} دقیقه", _
(intTotalMinutes \ 440).ToString, _
((intTotalMinutes Mod 440) \ 60).ToString, _
((intTotalMinutes Mod 440) Mod 60).ToString)



برای اینکه متن داخل Textbox رو بتونی درست بخونی ( به علت فارسی بودن خروجی)، RighttoLeft فرم رو Yes کن و RighttoLeftLayout رو هم True.

همه این سوالات شما بازی با اعداد هستش. موفق باشی.

mhmoein
دوشنبه 27 اردیبهشت 1389, 16:47 عصر
دوست عزیز واقعا ببخش منو

اما من می خوام این همون اطلاعات تکست باکس 1 رو تبدیل کنه نمیخوام از دیتابس دوباره بخونه

من این کد رو نوشتم اما جواب نمی ده می شه اشکالش رو بگی :



Dim ss As String = TextBox1.Text
Dim intTotalMinutes As UInteger = 0
Dim ar2() As String = ss.ToString.Split("")
intTotalMinutes += (Integer.Parse(ar2(0)) * 60) + Integer.Parse(ar2(1))
TextBox10.Text = String.Format("{0} {1} {2} ", _
(intTotalMinutes \ 440).ToString, _
((intTotalMinutes Mod 440) \ 60).ToString, _
((intTotalMinutes Mod 440) Mod 60).ToString)

ACorvinus
دوشنبه 27 اردیبهشت 1389, 17:03 عصر
جواب نمیده چون تابع Split شما Spliter نداره. به من بگین فرمت اون چیزی که در Textbox شما است چجوریه تا راهنمایی کنم شمارو. ممنون.

mhmoein
دوشنبه 27 اردیبهشت 1389, 17:07 عصر
ببخش واقعا

مثلا به این صورت : ( 16:45 ) یا ( 120:30 )

hero4000
سه شنبه 28 اردیبهشت 1389, 08:41 صبح
دوست عزيز براي Split شما نياز به يک کاراکتر دارين که براي شما احتمالا : است پس اين خط رو به اين شکل اصلاح کنيد


Dim ar2() AsString = ss.ToString.Split(":")

mhmoein
سه شنبه 28 اردیبهشت 1389, 08:58 صبح
دوست گرامی من اینکار رو هم انجام دادم اما جواب نمی ده از دیتا بس که می خونه اگر مدت زمان 7:20 باشه می نویسه یک روز و اگر بیشتر بشه مثلا 9:20 دیگه روز رو نمی نویسه یک روز 2 ساعت می نویسه 2 ساعت .

از داخل تکست باکس هم که فعلا نتونستم کاری کنم که بخونه .

mhmoein
چهارشنبه 29 اردیبهشت 1389, 14:14 عصر
دوستان کسی راه حلی برای این مشکل ندارد ؟

ACorvinus
چهارشنبه 29 اردیبهشت 1389, 22:43 عصر
دوست گرامی من اینکار رو هم انجام دادم اما جواب نمی ده از دیتا بس که می خونه اگر مدت زمان 7:20 باشه می نویسه یک روز و اگر بیشتر بشه مثلا 9:20 دیگه روز رو نمی نویسه یک روز 2 ساعت می نویسه 2 ساعت .

از داخل تکست باکس هم که فعلا نتونستم کاری کنم که بخونه .


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

mhmoein
چهارشنبه 29 اردیبهشت 1389, 23:13 عصر
دوست عزیز سلام

کدی که شما لطف فرمودید می تونه اطلاعات رو بخونه اما می دونید چی هست اگر مدت زمان از 7:20 دقیقه بیشتر بشه مثلا 9:20 دقیقه دیگه نمی نویسه 1 روز و 2 ساعت بجاش فقط ساعت رو می زنه می نویسه 0 روز و 2 ساعت .

ممنون می شم کمکم کنید .

اینم کد تو برنامه



Dim strConnection As String = "server=192.168.5.1;user id=sa; pwd=h1m5d ;initial catalog=NAVA_SYS"
Dim sqlConnection As SqlConnection
Try
sqlConnection = New SqlConnection(strConnection)
sqlConnection.Open()
Dim command As String = "Select * from mor_sat where per_id = '" & TextBox1.Text & "'"
Dim sqlcommand As SqlCommand = New SqlCommand(command, sqlConnection)
Dim sqlreader As SqlDataReader = sqlcommand.ExecuteReader()
Dim strSumHours As Integer = 0
Dim strSumMinutes As Integer = 0
While sqlreader.Read
Dim ar() As String = sqlreader.Item("sum_m_time").ToString.Split(":")
strSumHours += Integer.Parse(ar(0))
strSumMinutes += Integer.Parse(ar(1))
Dim intTotalMinutes As UInteger = 0
intTotalMinutes += (Integer.Parse(ar(0)) * 60) + Integer.Parse(ar(1))
TextBox3.Text = String.Format("{0} {1} {2} ", _
(intTotalMinutes \ 440).ToString, _
((intTotalMinutes Mod 440) \ 60).ToString, _
((intTotalMinutes Mod 440) Mod 60).ToString)
End While

ACorvinus
چهارشنبه 29 اردیبهشت 1389, 23:29 عصر
کدی که من دادم درسته فقط شما نتونستین درست جاگذاری کنین:



Dim strConnection As String = "Persist Security Info=False;User ID=sa;Initial Catalog=tst;Data Source=.;Password=12345"
Dim sqlConnection As SqlConnection
Try
sqlConnection = New SqlConnection(strConnection)
sqlConnection.Open()
Dim command As String = "Select tm from Table_1"
Dim sqlcommand As SqlCommand = New SqlCommand(command, sqlConnection)
Dim sqlreader As SqlDataReader = sqlcommand.ExecuteReader()
Dim intTotalMinutes As UInteger = 0
While sqlreader.Read
Dim ar() As String = sqlreader.Item("tm").ToString.Split(":")
intTotalMinutes += (Integer.Parse(ar(0)) * 60) + Integer.Parse(ar(1))
End While
TextBox1.Text = String.Format("{0} روز و {1} ساعت و {2} دقیقه", _
(intTotalMinutes \ 440).ToString, _
((intTotalMinutes Mod 440) \ 60).ToString, _
((intTotalMinutes Mod 440) Mod 60).ToString)
sqlConnection.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
If sqlConnection.State = ConnectionState.Open Then
sqlConnection.Close()
End If
End Try



جواب گرفتین بهم خبر بدین. موفق باشین.

mhmoein
چهارشنبه 29 اردیبهشت 1389, 23:40 عصر
آقا حق با شما بود. واقعلا شرمنده، درست می گفتی مشکلم حل شد .

ببخشید بنده رو اما یه سوال دیگه اگر بخواهیم برای محاسبه سنوات پرسنل مثلا من تاریخ شروع کار رو بدم و بخوام تا تاریخ امروز بهم بگه چند سال و چند ماه و چند روز گذشته باید از همین روش استفاده کنم ؟

ACorvinus
چهارشنبه 29 اردیبهشت 1389, 23:53 عصر
سلام.

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


کل کار = تاریخ شروع خدمت - تاریخ امروز

mhmoein
چهارشنبه 29 اردیبهشت 1389, 23:59 عصر
ممنون - اما اگر سال کبیسه تو این مدت کارکرد باشه انوقت یک روز اختلاف نخواهیم داشت ؟

mhmoein
جمعه 31 اردیبهشت 1389, 12:07 عصر
با سلام - دوست عزیز من خیلی روی این موضوع کار کردم ؟
ولی نمی دونم چطوری باید دقیق روز و ماه و سال سابقه و حتی سن فرد درست محاسبه بشه ؟

مثلا الان یک نفر متولد سال 19/ 03 / 1361 هست تا تاریخ امروز ( 31/02/89 ) رو به من میده :

27 سال و 11 ماه و 24 روز

در صورتی که باید به این صورت بده :

27 سال و 11 ماه و 12 روز

انگار سالهای کبیسه و ماههای اسفند 29 روز ، رو نمی تونه درست محاسبه کنه ؟

mhmoein
جمعه 31 اردیبهشت 1389, 12:11 عصر
البته این کد من هست و باید هم اینجوری جواب بده اما می خواستم بدونم شما راه حلی برای این موضوع دارید ؟



Dim roz As UInteger = 0
Dim ar() As String = Label1.Text.ToString.Split
roz += (Integer.Parse(ar(0)))
TextBox1.Text = String.Format("{0} {1} {2} ", _
(roz \ 365).ToString, _
((roz Mod 365) \ 30).ToString, _
((roz Mod 365) Mod 30).ToString)


تشکر

سینا2010
یک شنبه 02 خرداد 1389, 20:39 عصر
آقا سلام

لطف کن اگر حواب این سوال رو پیدا کردی به ما هم بگو. من هم خیلی به چنین مسئله ای نیاز دارم . ممنون