PDA

View Full Version : جمع ساعت



alia.n
پنج شنبه 01 اردیبهشت 1401, 11:08 صبح
سلام دوستان من از برنامه ای که در سایت هستش برای جمع کردن ساعت استفاده کردم
https://barnamenevis.org/showpost.php?p=438057&postcount=20

اما به دلیل این که من اطلاعات رو از یک کوئری میگیرم که دارای پارامتر هست و اون پارامترها دو تا تاریخ که با ورود دو تاریخ جمع ساعت را باید نشان بدهد(یعنی جمع ساعات بین دو تاریخ وارد شده را محاسبه کند) اما گیر به پارامتر ها میدهد و درصورت حذف کردن پارامتر ها برنامه کاملا درست عمل می کند
شرح خطا به این صورت است
run time error 3061
Too few parameters.expected2.

ممنون میشم راهنمایی بفرمایید

mazoolagh
شنبه 03 اردیبهشت 1401, 10:17 صبح
سلام و روز خوش

شرط رو ببرین در همون کد اعمال کنین؛
به این روش که اگر در کد اسم جدول اسفاده شده، اسم کوئری (یا کد کوئری) رو بجاش بگذارین.

یا این که کد رو جوری تغییر بدین که اسم جدول (یا کوئری) و اسم فیلد زمان و شرط انتخاب رو بعنوان پارامتر بگیره.

alia.n
یک شنبه 04 اردیبهشت 1401, 08:24 صبح
سلام و روز خوش

شرط رو ببرین در همون کد اعمال کنین؛
به این روش که اگر در کد اسم جدول اسفاده شده، اسم کوئری (یا کد کوئری) رو بجاش بگذارین.

یا این که کد رو جوری تغییر بدین که اسم جدول (یا کوئری) و اسم فیلد زمان و شرط انتخاب رو بعنوان پارامتر بگیره.


سلام دوست عزیز ممنونم از پاسخگویی شما
نگاه کنید کد من این هست






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

Function GetTimeRoozanehTotal()
Dim db As Database, rs As Recordset
Dim totalhours As Long, totalminutes As Long
Dim days As Long, Hours As Long, Minutes As Long
Dim interval As Variant, j As Integer

Set db = DBEngine.Workspaces(0).Databases(0)
Set rs = db.OpenRecordset("TimeRoozaneh")
interval = #12:00:00 AM#
'
While Not rs.EOF
interval = interval + rs![Roozaneh]
rs.MoveNext
Wend
totalhours = Int(CSng(interval * 24))
totalminutes = Int(CSng(interval * 1440))
Hours = totalhours Mod 24
Minutes = totalminutes Mod 60
' در صورتیکه مایل به استفاده عبارات ساعت و دقیقه هستید خط زیر رو فعال کنید
' GetTimeRoozanehTotal = totalhours & " ساعت و " & Minutes & " دقیقه"
GetTimeRoozanehTotal = totalhours & ":" & Minutes
End Function




اونجا ها که بزرگ کردم اولی نام کوئری من هست و دومی فیلد داخل کوئری


ببخشید منظور شما رو متوجه نشدم که باید چکار کنم
من تنها کاری که میکنم فقط فانکشن GetTimeRoozanehTotal رو توی یک تکتس باکس فراخوانی میکنم در صورتی که کوئری من پارامتر نداشته باشد مشکلی نیست و جمع همه رو حساب می کند اما زمانی که دو تاریخ به ان میدهم که بین دو تاریخ را جمع کند مشکل میشود
شما می فرمایید شرط رو ببرم کحا من اصلا شرطی ندارم برا تغییر کد هم چکار کنم من طبق برنامه‌ای که در سایت بود انجام دادم و باید یک فانکشن در ماژول مینوشتم

mazoolagh
دوشنبه 05 اردیبهشت 1401, 19:12 عصر
خب اون کدی که استفاده میکنین (تابع GetTimeRoozanehTotal) ، اصلا آرگومان (پارامتر) نمیگیره که شما بخواین براش بفرستین.



شرط رو ببرم کحا من اصلا شرطی ندارم
شرط شما همین هست که میخواین بین یک بازه براتون حساب کنه و نه کل جدول!

البته این کدی که استفاده کردین بی اشکال نیست ولی اگر برای شما کافی و جوابگو هست به شکل زیر عمل کنین:
1- کد زیر رو:
Set rs = db.OpenRecordset("TimeRoozaneh")
به شکل زیر تغییر بدین:
Set rs = db.OpenRecordset("SELECT Time_Field_Name FROM Table_Name WHERE Criteria")
که Table_Name اسم جدول شما و Time_Field_Name اسم فیلد زمان مورد نظر شما و Criteria هم شرطی هست که دارین.

2- کد زیر رو
interval = interval + rs![Roozaneh]
به صورت زیر تغییر بدین:
interval = interval + rs(0)

alia.n
دوشنبه 05 اردیبهشت 1401, 23:49 عصر
ممنون خیلی خوب بود
تشکر:تشویق:

mazoolagh
چهارشنبه 07 اردیبهشت 1401, 11:31 صبح
در واقع برای محاسبه جمع ساعت اصلا نیازی به پیمایش در رکوردست نیست (دست کم به این شکل)
و مستقیما قابل محاسبه است:
DIM Total_Minutes , Hours , Minutes AS LONG
Total_Minutes= DSUM("HOUR([Time_Field_Name])*60+MINUTE([Time_Field_Name])","Table_Name","Criteria")
Hours= Total_Minutes \ 60
Minutes= Total_Minutes MOD 60

mazoolagh
چهارشنبه 07 اردیبهشت 1401, 11:33 صبح
حتی میشه یک فیلد calculated به جدول اضافه کرد که همیشه مقدار یک فیلد از نوع ساعت رو برحسب دقیقه (یا ثانیه، بسته به کاربرد) نگه داره و به این ترتیب برای جمع از این فیلد استفاده کرد.