نرمافزار مایکروسافت اکسس (Microsoft Access) یکی از قدرتمندترین ابزارهای مدیریت پایگاه داده است که به ما اجازه میدهد اطلاعات حجیم را ساختاردهی و مدیریت کنیم. اما یکی از چالشهای همیشگی کاربران و طراحان دیتابیس در اکسس، کار با دادههای مربوط به زمان، محاسبه اختلاف ساعت ورود و خروج کارمندان، یا محاسبه طول عمر یک پروژه است.
در این مقاله کاربردی، یاد میگیریم که اکسس چگونه با زمان برخورد میکند و با چه فرمولها و توابعی میتوانیم محاسبات پیچیده زمانی را مثل یک حرفهای انجام دهیم.
مبنای علمی: اکسس چگونه زمان را درک میکند؟
پیش از آنکه به سراغ فرمولها برویم، باید بدانیم که سیستم داخلی اکسس زمان را چطور ذخیره میکند.
بر اساس مستندات رسمی مایکروسافت، نرمافزار اکسس دادههای نوع
Date/Timeرا به صورت اعداد اعشاری با دقت مضاعف (Double-precision floating-point) ذخیره میکند. در این سیستم، قسمت صحیح عدد نشاندهنده تاریخ (روزها) و بخش اعشاری آن نشاندهنده زمان (ساعت، دقیقه و ثانیه) است. به عنوان مثال، عدد0.5دقیقاً نشاندهنده ساعت ۱۲:۰۰ ظهر (نصف یک روز کامل) است.
ابزار اصلی: تابع جادویی DateDiff
برای محاسبه اختلاف بین دو زمان یا دو تاریخ در اکسس، اصلیترین و کاربردیترین ابزار ما تابع DateDiff است. ساختار (Syntax) این تابع به شکل زیر است:
$$\text{DateDiff}(\text{interval}, \text{date1}, \text{date2})$$
- interval: واحدی که میخواهید خروجی بر اساس آن محاسبه شود (مثلاً
"h"برای ساعت،"n"برای دقیقه،"s"برای ثانیه). - date1: زمان یا تاریخ شروع.
- date2: زمان یا تاریخ پایان.
پیادهسازی عملی: محاسبه کارکرد روزانه کارمندان
فرض کنید در شرکت یک جدول به نام AmoozeshTable داریم که ساعت ورود و خروج پرسنل در آن ثبت میشود. میخواهیم خالص ساعت کارکرد هر شخص را به دقیقه و سپس به فرمت ساعت استاندارد محاسبه کنیم.
گام اول: محاسبه اختلاف به دقیقه
برای اینکه دقیقترین محاسبات را داشته باشیم، ابتدا اختلاف دو زمان را به «دقیقه» تبدیل میکنیم تا در صورت رد شدن ساعت از نیمهشب یا دقایق ناقص، محاسبه به هم نریزد. عبارت زیر را در بخش Query یا کنترل فرم خود بنویسید:
-- Calculate the total duration in minutes between start and end time
TotalMinutes: DateDiff("n", [StartTime], [EndTime])
گام دوم: تبدیل دقیقه به فرمت نمایش ساعت:دقیقه
اگر بخواهید خروجی مثلاً به جای 150 دقیقه، به صورت 02:30 نمایش داده شود، باید از ترکیب عملگرهای ریاضی استفاده کنیم. کد زیر این کار را برای شما انجام میدهد:
-- Convert total minutes into HH:MM format for user display
FormattedTime: Format([TotalMinutes] \ 60, "00") & ":" & Format([TotalMinutes] Mod 60, "00")
نکته مهم: در کد بالا، از علامت بکاسلش (
\) برای تقسیم صحیح (بدون اعشار) جهت به دست آوردن ساعت، و از تابعModبرای به دست آوردن باقیمانده تقسیم جهت تعیین دقیقهها استفاده شده است.
استفاده از توابع زمانی دیگر در کنترل فرمها
اگر میخواهید در یک فرم یا گزارش، زمان فعلی سیستم را ثبت کنید یا محاسباتی روی زمان جاری انجام دهید، این دو تابع به کارتان میآیند:
- تابع
Time(): فقط ساعت فعلی سیستم را برمیگرداند. - تابع
Now(): تاریخ و ساعت فعلی سیستم را به طور همزمان ثبت میکند.
مثال برای محاسبه مدت زمان گذشته از شروع کار تا همین لحظه:
-- Calculate minutes elapsed from StartTime until the current system time
MinutesPassed: DateDiff("n", [StartTime], Time())
نتیجهگیری
محاسبه زمان در اکسس، برخلاف ظاهر ترسناکش، با درک منطق عددی زمان و تسلط بر تابع DateDiff بسیار ساده است. با روشی که در این مقاله آموختیم (تبدیل به کوچکترین واحد یعنی دقیقه و سپس فرمتبندی آن)، میتوانید هر نوع سیستم حضور و غیاب یا زمانبندی پروژهها را به راحتی در دیتابیس خود پیادهسازی کنید.
نظرات کاربران (0)