السلام عليكم
لدي مشروع متابعة توقيع العمال
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;