delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف احسب الفارق الزمني بمشروع متابعة توقيع العمال
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم
لدي مشروع متابعة توقيع العمال
tpointage(id_point,id_empl,id_motif,diftime,entree_sortie,heur_point_entr,heur_point_sort,date_point,on)
employe(id_empl,nom_empl,pren_empl,dat_naiss,id_fonc,etat_empl,sex,on,life (

عندما اضغط على زر من الازرار و اختار عاملا ما ففي حالة دخوله الى العمل سيسجل date_entr و heur_entr و عندما يخرج من العمل سيسجل date_sort و heur_sort
فعند حساب الفارق الزمني لهدا العامل سيكون يحساب الفرق , لكن مشكلتي عندما يقوم بالدخول و الخروج لعدة مرات اي عند قيام العامل بالتوقيع عدة مرات في اليوم , فكيف احسب مجموع الفروق .
وعليكم السلام ورحمة الله وبركاته
لا أخي لا تطرح سؤال في مثل هذه الحالات
بل أرفق في مشروع جديد به الإشكال الذي حصل
استخدم أحد قواعد بيانات أمثلة دلفي DBDemos
بالتوفيق.
لم افهم بعد
إقتباس :عندما يقوم بالدخول و الخروج لعدة مرات
أولا: هل تصميمك لقاعدة البيانات يسمح لك بالحصول على هذه المعلومة؟
بعبارة أخرى: هل تسجل كل عملية دخول وخروج؟ وكيف أنشأت الجداول؟
عند الصغط مثلا علر زر button1 و الذي يمثل الدخول Entree
كود :
procedure Tfentreesortie.Button1Click(Sender: TObject); begin dmpointage.Query1.Active:=false; dmpointage.Query2.Active:=false; dmpointage.Query1.Active:=true; dmpointage.Query2.Active:=true; dmpointage.tpointage.Active:=false; dmpointage.tpointage.Active:=true; dmpointage.tamploye.Active:=false; dmpointage.tamploye.Active:=true; fpointage.DBLookupComboBox1.DataField:='Id_empl' ; fpointage.DBLookupComboBox1.DataSource:=dmpointage.dspointage; fpointage.DBLookupComboBox1.KeyField:='Id_empl'; fpointage.DBLookupComboBox1.ListField:='id_empl;Nom_empl;Pren_empl;id_fonction'; fpointage.DBLookupComboBox1.ListSource:=dmpointage.DataSource1 ; fpointage.Button5.Tag:=1; fpointage.DBLookupComboBox1.Tag:=1; fpointage.DBGrid1.Color:=clTeal; fentreesortie.Color:=clTeal; fpointage.Color:=clTeal; fpointage.Show; dmpointage.tpointage.Last ; end;
و تظهر الواجهة fpointage

عند الصغط مثلا علر زر button2 و الذي يمثل االخروج Sortie
كود :
dmpointage.Query1.Active:=false; dmpointage.Query2.Active:=false; dmpointage.Query1.Active:=true; dmpointage.Query2.Active:=true; dmpointage.tpointage.Active:=false; dmpointage.tpointage.Active:=true; dmpointage.tamploye.Active:=false; dmpointage.tamploye.Active:=true; fpointage.DBLookupComboBox1.DataField:='Id_empl' ; fpointage.DBLookupComboBox1.DataSource:=dmpointage.dspointage; fpointage.DBLookupComboBox1.KeyField:='Id_empl'; fpointage.DBLookupComboBox1.ListField:='id_empl;Nom_empl;Pren_empl;id_fonction'; fpointage.DBLookupComboBox1.ListSource:=dmpointage.DataSource2 ; fpointage.Button5.Tag:=2; fpointage.DBLookupComboBox1.Tag:=2; fpointage.DBGrid1.Color:=clFuchsia; fentreesortie.Color:=clFuchsia; fpointage.Color:=clFuchsia; fpointage.Show; dmpointage.tpointage.Last ; end;
و تظهر الواجهة fpointage أيضا

فعند الضغط علر الزر button1 من fpointage :
كود :
procedure Tfpointage.Button1Click(Sender: TObject); begin dmpointage.tpointage.Append ; DBLookupComboBox1.ReadOnly:=false; dmpointage.Query1.Active:=false; dmpointage.Query2.Active:=false; dmpointage.Query1.Active:=true; dmpointage.Query2.Active:=true; Button1.Enabled:=false ; dmpointage.tentree.Active:=false; dmpointage.tentree.Active:=true; end;
و للتأكيد و الإغلاق أقوم بالضغط على الزر button5
كود :
procedure Tfpointage.Button5Click(Sender: TObject); var i:Integer; begin TryStrToInt(fpointage.DBEdit1.Text,i); if Button5.Tag = 1 then begin dmpointage.tpointage.Edit; dmpointage.tpointage.FieldByName('Entree_Sortie').Value:='Entree'; dmpointage.tpointage.Post; dmpointage.query3.ParamByName('param9').AsString := 'prese'; dmpointage.query3.ParamByName('param10').AsInteger:=StrToInt(DBLookupComboBox1.Text); dmpointage.query3.ExecSQL; dmpointage.tamploye.Active:=false; dmpointage.tamploye.Active:=true; dmpointage.tentree.Append; dmpointage.tentree.Active:=false; dmpointage.tentree.Active:=true; DBEdit1.DataField:= DBEdit6.DataField ; close; end; close; if Button5.Tag=2 then begin dmpointage.tpointage.Edit; dmpointage.tpointage.FieldByName('Entree_Sortie').Value:='Sortie'; dmpointage.tpointage.Post; dmpointage.query3.ParamByName('param9').AsString := 'off'; dmpointage.query3.ParamByName('param10').AsInteger:=StrToInt(DBLookupComboBox1.Text); dmpointage.query3.ExecSQL; dmpointage.tamploye.Active:=false; dmpointage.tamploye.Active:=true; close ; end; close; end;