PDA

View Full Version : سوال: اختلاف بین ساعات ورودی یک فیلد در دیتابیس



delphiprog3000
پنج شنبه 21 اردیبهشت 1391, 07:54 صبح
با سلام خدمت دوستان و اساتید محترم.

میخواستم در این باره با دوستان مشورت کنم.

ببینید ما یک سیستم حضور غیاب داریم که بر اساس.

1-تاریخ روز 2-ساعت(لحظه ای) 3- شیفت 4- نوع(ورود/خروج) 5- نام کاربر

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

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

من خودم چندتا راه به ذهنم رسیده اما میخوام با مشورت دوستان انجام بشه. تا کمی مطلب جدید دستگیرمون بشه....

منتظر پاسخ عزیزان هستم . با تشکر..........

crazy coder
پنج شنبه 21 اردیبهشت 1391, 08:16 صبح
سلام
خدا قوت
مهندس خوب شما باید ساختار دیتابیس رو به ما بگی... اگر همه رو تو یه جدول ذخیره میکنی که خیلی سادست با یک where و چند تا and کار شما حل میشه ...
ولی فکر کنم شما چند تا جدول داشته باشی...

delphiprog3000
پنج شنبه 21 اردیبهشت 1391, 08:24 صبح
با سلام.

ساختار خاصی نداره نوع ساعت رو Date/time این وسط فقط موری مهم که بیاد نتیجه رو بر اساس اختلاف ساعت بده.

یعنی هر اتفاق که می افته یعنی با ورود یا خروج یه تایم داره دیگه. حالا پس از جستجو تاریخ مورد نظر بیاد ساعات ورود رو جمع و ساعات خروج جمع و از هم کم کنه و به ما به ساعت نشون بده. سوال فقط برای اختلاف این دو ساعت

مثلا تو ماسک ادیت راحت ساعات رو از هم کم یا جمه میکنه و نشون میده اما میخواستم توی پایگاه داده رو محاسبه و نشون بده.

با تشکر....

Vahid.Shatery
پنج شنبه 21 اردیبهشت 1391, 14:08 عصر
سلام
یک adoQry استفادخ کن و یک فیلد جدید در qry با خاصیت Calc اضافه کنید. از تاریبع زیر به راحتی می تونید این کار را انجام بدین.


function TfrmReport.getDelay() : string ;
var s : string ;
h, m, c : Integer ;
sum : Integer ;
begin
Result := '' ;
with DBGridReport.DataSource.DataSet do
begin
First ;
h := 0 ;
m := 0 ;
while not Eof do
begin
s := fieldbyname('clDelay').AsString ;
h := h + StrToIntDef(Copy(s,1,Pos(':',s)-1),0) ;
m := m + StrToIntDef(Copy(s,Pos(':',s)+1,2),0) ;
Next ;
end;
sum := h + (m div 60) ;
c := m mod 60 ;
Result := IntToStr(sum) + ':' + IntToStr(c) ;
end;
end ;