ايران ويج

نسخه‌ی کامل: اشکال کد - زمان اشتباه
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
این کد رو ببینید در آخر توضیحات رو می دم
کد:
Private Sub Command1_Click()
' Dim dd As Integer
    Dim lngSec As Long
Dim lngSum As Long
Dim i As Long
If Adodc1.Recordset.RecordCount = 0 Then
MsgBox "I?C I? ??C?ECE .???I ?C IC?? C?E", vbCritical + vbOKOnly + vbSystemModal, "I?C !"
Adodc1.Recordset.Close
Adodc1.Recordset.Open
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
Adodc1.Refresh

Else
Adodc1.Recordset.MoveFirst
For i = 1 To Adodc1.Recordset.RecordCount
  'On Error GoTo dd
    lngSec = Con_Time_To_Second(Adodc1.Recordset.Fields(4).Value)
    lngSum = lngSum + lngSec
    Adodc1.Recordset.MoveNext
Next

  
LSLabel7.Caption = Con_Secont_To_Time(lngSum)
Adodc1.Recordset.MoveFirst
End If
End Sub

Public Function Con_Time_To_Second(ByVal strTime As String) As Long
On Error Resume Next

    Dim strTemp() As String
    Dim i As Integer

    strTemp = Split(strTime, ":")
    Con_Time_To_Second = 0
    
    For i = 0 To UBound(strTemp)
        Con_Time_To_Second = Con_Time_To_Second + (Val(strTemp(i)) * (60 ^ (UBound(strTemp) - i)))
    Next

End Function
Public Function Con_Secont_To_Time(ByVal Second As Long) As String
On Error Resume Next

    Dim s As Long, M As Long, H As Long
    Dim Manfi As Boolean

    If Second < 0 Then
        Manfi = True
        Second = Second * (-1)
    End If

    H = Second \ 3600
    M = (Second Mod 3600) \ 60
    s = (Second Mod 3600) Mod 60
    
    Con_Secont_To_Time = H & ":" & IIf(M > 9, M, "0" & M) & ":" & IIf(s > 9, s, "0" & s)
    
    If Manfi = True Then
        Con_Secont_To_Time = Con_Secont_To_Time & "-"
    End If

End Function
خوب - اول با عرض خسته نباشید خدمت همه
این کد ها مربوط میشه به یک قسمت از برنامه که میاد یک فیلد از یک دیتا گرید رو جمعش رو که مقادیر اون ساعت هست مثلا 10:40:50 توی یک تکس باکس نشون می ده
حالا مشکل کجاست
زمان رو درست نشون نمی ده
[تصویر:  10y15bq.jpg]
یک فیلد هست به نام جمع کل ساعت که باید جمعش نشون داده بشه
بانک اطلاعاتی اکسس هست
این هم از قسمت لود
کد:
Private Sub Form_Load()
Skin1.ApplySkin frmkarkard.hWnd
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Data\DBE.mdb"
Adodc1.RecordSource = "Data"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select * from ekhtelaf"
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
'-----------------------
Adodc2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\data\DBE.mdb"
Adodc2.CommandType = adCmdText
Adodc2.RecordSource = "select * from dbsabt"
Adodc2.Refresh
Adodc1.Recordset.MoveFirst
ممنون اگه مورد دیگه ای هم بود بگین توضیح بدم
قبلا از راهنمایی شما متشکرم
دوست عزيز

كافيه 3 تا متغيير به شكل زير تعريف كنيد :

Dim TimeIn , TimeOut , TotalTime As Date

بعد براي هر ركورد از ديتابيس كه خواستيد ،زمان رو به صورت زير محاسبه كنيد :

TotalTime = TimeOut - TimeIn
Text1 = TotalTime

به همين شيرني! ديگه احتياجي به اون همه تابع و تبديل و محاسبه نيست!!Wink
کد:
Dim TimeIn , TimeOut , TotalTime As Date
با سلام
اول این که این کد می شه گفت اشتباه
چون فقط تابغ Totaltime رو از نوع Date قرار میده
درستش اینجوریه البته هر دو حالت رو می گم

کد:
Dim Timein as date,dim timeout as date,dim totaltime as date

یا هم که جدا جدا

کد:
dim timein as date
dim timeout as date
dime totaltime as tate

حالا جدا از این مسئله من منظور شما رو متوجه نشدم چیه
اگه میشه یک نمونه قرار بدین یا اگه امکان داره واضح تر بگین
ممنون
یه مطلب خارج از بحث:
چرا تو رکورد شماره 3 ساعت خروج کمتر از ساعت وروده ولی ساعت کل کاری مثبته؟
حالا وارد بحث بشیم:
هیچ مشکلی تو کد نبود. همه چی تمیز بود، جز اینکه با VB نوشتی. تنها مشکل این بود.
وقتی با VB کد نویسی می کنی یه اشکالات عجیبی پیش میاد که تا برنامه رو خط به خط اجرا نکنی و تو هر خط مقدار متغیرها رو چک نکنی حل نمیشه.
آخر سر هم یه خطا تو کدنویسی خودت پیدا می کنی و می بینی هیچکس تقصیری نداشته.

پیشنهاد می کنم گه با اجرای خط به خط و کنترل مقادیر متغیرها خطا رو متوجه نشدی اون قسمت از برنامه رو از پروژه جدا کن تو بانک هم اطلاعات غیرواقعی بذار یا ااصلا بانک رو خالی کن بعد آپلود کن تا روش کار بشه.
ولی امروز فرداست که بگی مشکل حل شد فلان جا ...
نقل قول: چرا تو رکورد شماره 3 ساعت خروج کمتر از ساعت وروده ولی ساعت کل کاری مثبته؟
عجب !! دقت نکرده بودم
بررسی می کنم - ممنون از توجهت

نقل قول: هیچ مشکلی تو کد نبود. همه چی تمیز بود، جز اینکه با VB نوشتی. تنها مشکل این بود.
وقتی با VB کد نویسی می کنی یه اشکالات عجیبی پیش میاد که تا برنامه رو خط به خط اجرا نکنی و تو هر خط مقدار متغیرها رو چک نکنی حل نمیشه.
آخر سر هم یه خطا تو کدنویسی خودت پیدا می کنی و می بینی هیچکس تقصیری نداشته.

پیشنهاد می کنم گه با اجرای خط به خط و کنترل مقادیر متغیرها خطا رو متوجه نشدی اون قسمت از برنامه رو از پروژه جدا کن تو بانک هم اطلاعات غیرواقعی بذار یا ااصلا بانک رو خالی کن بعد آپلود کن تا روش کار بشه.
ولی امروز فرداست که بگی مشکل حل شد فلان جا ...
می دونه درد من چیه
اینه که این درست بود
قشنگ کار می کرد
یهو از کار افتاد و عدد های عجیب غریب نشون داد
من هم چون اون قسمت تکمیل بود اصلا کاری بهش نداشتم و هفته پیش یهو دیدم اینجوریه
حالا مثله ............... تو گل گیر کردم
الان اون قسمت رو دارم جدا می کنم بزارم ایشالا با کمک شما حل بشه
شرمنده که روی راپید شیر هست
چون اینجا من جایی رو برای آپلود پیدا نکردم
http://rapidshare.com/files/154070151/Ti...k.rar.html
کد:
lngSec = Con_Time_To_Second(FormatDateTime(Adodc1.Recordset.Fields(4).Value, vbLongTime))
شما اگه برنامه رو خط به خط اجرا می کردی متوجه میشدی که مقدار فیلد Expr1 یه عدد اعشاری عجیب غریبه که باید به فرمت عادی تبدیل بشه. برای پیدا کردن تابعی که این تبدیل رو انجام بده هم کافی بود تا توی ObjectBrowser خود VBعبارت Time رو جستجو کنی.
حالا این یه خط کد رو بجای اولین خط توی حلقه For جایگزین کن ببین درست میشه یا نه؟
موفق باشی
نقل قول: اینجا من جایی رو برای آپلود پیدا نکردم
توی پاسخ سریع امکان آپلود نیست ولی اگر دکمه «پاسخ جدید» رو از سمت راست پایین یا بالای صفحه بزنی میتونی آپلود هم بکنی.
بعدش هم ما که مشکلی با RapidShare نداریم. از RapidBaz برا دانلود استفاده می کنیم.
بعد از ارسال پاسخ یه نکته یادم اومد که خالی از لطف نیست. تو برنامه هات از آدرس کامل فایل ها که شامل اسم درایو باشه استفاده نکن.
کد:
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=DATA\DBE.mdb;Persist Security Info=False
بجای
کد:
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=E:\Personal Project\src\DATA\DBE.mdb;Persist Security Info=False
نقل قول: lngSec = Con_Time_To_Second(FormatDateTime(Adodc1.Recordset.Fields(4).Value, vbLongTime))
من واقعا نمی دونم چه جوری از شما تشکر کنم
وقعا ممنون
مشکلم حل شد
لطف بزرگی کردین ممنونم
با سلام مجدد
يه موردي براي همين قسمت از برنامه پيش اومد كه گفتم توي همين تاپيك بگم
به اين عكس دقت كنين
وقتي كه اون زمان توي گريد ساعت نداره مثلا 00:10:20 هستش مياد يك عدد 12 به اول ساعت اضافه مي كنه
چطوري مي تونم اين مشكل رو حل كنم
با تشكر
[تصویر:  2553rqg.jpg]
با سلام

فکر کنم این داره حالت نمایش رو عوض میکنه
مثلا چون شما از دیتابیس بصورت تاریخ زمان میخونین اونوهم با یک فورمت 24 ساعته نشون بدین اینشکلی :
کد:
Format(time, "HH:mm:ss")
من كد رو به اين حالت تغيير دادم ولي از من خطاي Type mismatch رو ميگيره
من راه ديگه اي پيدا نكردم به اون قسمت اينو اضافه كنم
کد:
lngSec = Con_Time_To_Second(Format(Time, "HH:mm:ss")(Adodc1.Recordset.Fields(4).Value, vbLongTime))
خطای نحوی داره چون بین دو تا پرانتز چیزی نیست "HH:mm:ss")(Adodc1.Reco
خطای منطقی داره چون بجای زمان ثبت شده تو دیتابیس از زمان فعلی سیستم استفاده شده Format(Time, "HH
طبق کد آقای ارفعی درستش اینه:
کد:
lngSec = Con_Time_To_Second(FormatDateTime(Adodc1.Recordset.Fields(4).Value, vbLongTime))
lngSec = Format(lngSec, "HH:mm:ss")
خیلی باحال بود آقا حامد با این قطعه کد تست کردم و جواب داد.
کد:
a = #9:18:01 AM#
    b = #9:19:06 AM#
    c = b - a
    MsgBox Format(FormatDateTime(c, vbLongTime), "HH:mm:ss")
صفحه‌ها: 1 2