delphi4arab منتديات دلفي للعرب
كيف استعمال الـ threads لتحديث جدول - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيف استعمال الـ threads لتحديث جدول (/showthread.php?tid=4749)



كيف استعمال الـ threads لتحديث جدول - hmourad85 - 26-11-2012

السلام عليكم ورحمة الله وبركاته

لدي برنامج لمصلحة الخدمات الإجتماعية وأقوم مرة أو مرتين في الشهر بعملية تحديث جدول الموظفين من جدول أحضره من مصلحة الموظفين وهذا الجدول كبير نوعا ما، والمشكلة أنه أثناء عملية التحديث يتوقف كل شيء ولا أستطيع العمل على الجهاز فكيف يمكنني استعمال الـ threads من أجل حل هذه المشكلة.

وشكرا.


كيف استعمال الـ threads لتحديث جدول - m.rabee - 29-11-2012

وعليكم السلام ورحمة الله وبركاته

جرب استخدام

Application.ProcessMessages


كيف استعمال الـ threads لتحديث جدول - hmourad85 - 01-12-2012

شكرا أخي على الرد

لقد بحثت في المنتدى ووجدت أمثة كثيرة ومفيدة، ولكن لم أفهم كيف أسقطها على برنامجي.

هذا هو الكود:

كود :
procedure TF_MAJ_PESTAFF.Bt_MAJClick(Sender: TObject); var i:integer; var_date:TDateTime; y,m,d : word; begin Bt_MAJ.Enabled:=false; Bt_Import.Enabled:=false; DM.Q_Table_Import.Close; DM.Q_Table_Import.SQL.Clear; DM.Q_Table_Import.SQL.Add('select * from pe_staff'); DM.Q_Table_Import.SQL.Add('where quit_date is null'); DM.Q_Table_Import.Open; DM.DS_Table_Import.DataSet:=DM.Q_Table_Import; DM.Q_Table_Import.First; i:=0; ProgressBar1.Min:=0; ProgressBar1.Max:=DM.Q_Table_Import.RecordCount; while not DM.Q_Table_Import.Eof do begin // vérification de l'existance du matricule dans CPersonnel.dbf DM.Q_MAJ_PESTAFF.Close; DM.Q_MAJ_PESTAFF.SQL.Clear; DM.Q_MAJ_PESTAFF.SQL.Add('select matricule from CPersonnel'); DM.Q_MAJ_PESTAFF.SQL.Add('where matricule=:matricule'); DM.Q_MAJ_PESTAFF.ParamByName('matricule').AsString:=DM.Q_Table_Import.FieldByName('matricule').AsString; DM.Q_MAJ_PESTAFF.Open; if not DM.Q_MAJ_PESTAFF.IsEmpty then begin DM.Q_MAJ_PESTAFF.Close; DM.Q_MAJ_PESTAFF.SQL.Clear; DM.Q_MAJ_PESTAFF.SQL.Add('update cpersonnel set niveau=:niveau,cat=:cat,ech=:ech,poste=:poste,code_fonc=:code_fonc,classe=:classe,n_compte=:n_compte,'); DM.Q_MAJ_PESTAFF.SQL.Add('direction=:direction,dept_unit=:dept_unit,serv_atel=:serv_atel,collectif=:collectif,soc_sec=:soc_sec,mutuelle=:mutuelle,'); DM.Q_MAJ_PESTAFF.SQL.Add('banque=:banque,s_famill=:s_famill,nbr_enf=:nbr_enf,date_ent=:date_ent,date_sor=:date_sor,nomarabe=:nomarabe,'); DM.Q_MAJ_PESTAFF.SQL.Add('adresse_1=:adresse_1,adr_com=:adr_com,adr_wil=:adr_wil'); DM.Q_MAJ_PESTAFF.SQL.Add('where matricule=:matricule'); DM.Q_MAJ_PESTAFF.ParamByName('niveau').AsString := DM.Q_Table_Import.fieldbyname('niveau').AsString; DM.Q_MAJ_PESTAFF.ParamByName('cat').AsString := DM.Q_Table_Import.fieldbyname('cat').AsString; DM.Q_MAJ_PESTAFF.ParamByName('direction').AsString := DM.Q_Table_Import.fieldbyname('direction').AsString; DM.Q_MAJ_PESTAFF.ParamByName('dept_unit').AsString := DM.Q_Table_Import.fieldbyname('dept_unit').AsString; DM.Q_MAJ_PESTAFF.ParamByName('serv_atel').AsString := DM.Q_Table_Import.fieldbyname('serv_atel').AsString; DM.Q_MAJ_PESTAFF.ParamByName('soc_sec').AsString := DM.Q_Table_Import.fieldbyname('soc_sec').AsString; DM.Q_MAJ_PESTAFF.ParamByName('mutuelle').AsString := DM.Q_Table_Import.fieldbyname('mutuelle').AsString; DM.Q_MAJ_PESTAFF.ParamByName('ech').AsString := DM.Q_Table_Import.fieldbyname('ech').AsString; DM.Q_MAJ_PESTAFF.ParamByName('poste').AsString := DM.Q_Table_Import.fieldbyname('poste').AsString; DM.Q_MAJ_PESTAFF.ParamByName('code_fonc').AsString := DM.Q_Table_Import.fieldbyname('fonction').AsString; DM.Q_MAJ_PESTAFF.ParamByName('classe').AsString := DM.Q_Table_Import.fieldbyname('classe').AsString; DM.Q_MAJ_PESTAFF.ParamByName('n_compte').AsString := DM.Q_Table_Import.fieldbyname('account_nb').AsString; DM.Q_MAJ_PESTAFF.ParamByName('banque').AsString := DM.Q_Table_Import.fieldbyname('bank_code').AsString; DM.Q_MAJ_PESTAFF.ParamByName('s_famill').AsString := DM.Q_Table_Import.fieldbyname('m_status').AsString; DM.Q_MAJ_PESTAFF.ParamByName('collectif').AsString := DM.Q_Table_Import.fieldbyname('collectif').AsString; DM.Q_MAJ_PESTAFF.ParamByName('nbr_enf').AsFloat := DM.Q_Table_Import.fieldbyname('p_charge').AsFloat; DM.Q_MAJ_PESTAFF.ParamByName('adresse_1').AsString := DM.Q_Table_Import.fieldbyname('adress_1').AsString; DM.Q_MAJ_PESTAFF.ParamByName('adr_com').AsString := DM.Q_Table_Import.fieldbyname('adress_2').AsString; DM.Q_MAJ_PESTAFF.ParamByName('adr_wil').AsString := DM.Q_Table_Import.fieldbyname('adress_3').AsString; var_date:= DM.Q_Table_Import.fieldbyname('entry_date').AsDateTime; decodedate(var_date,y,m,d); if not IsValidDate(y,m,d) then begin DM.Q_MAJ_PESTAFF.ParamByName('date_ent').AsString :=''; end else begin DM.Q_MAJ_PESTAFF.ParamByName('date_ent').AsString := DM.Q_Table_Import.fieldbyname('entry_date').AsString; end; var_date:= DM.Q_Table_Import.fieldbyname('quit_date').AsDateTime; decodedate(var_date,y,m,d); if not IsValidDate(y,m,d) then begin DM.Q_MAJ_PESTAFF.ParamByName('date_sor').AsString :=''; end else begin DM.Q_MAJ_PESTAFF.ParamByName('date_sor').AsString := DM.Q_Table_Import.fieldbyname('quit_date').AsString; end; DM.Q_MAJ_PESTAFF.ParamByName('nomarabe').AsString := DM.Q_Table_Import.fieldbyname('nomarabe').AsString; DM.Q_MAJ_PESTAFF.ParamByName('matricule').AsString := DM.Q_Table_Import.fieldbyname('matricule').AsString; DM.Q_MAJ_PESTAFF.ExecSQL; DM.Q_MAJ_PESTAFF.Close; end else begin // L'insertion du nouveau matricule DM.Q_MAJ_PESTAFF.Close; DM.Q_MAJ_PESTAFF.SQL.Clear; DM.Q_MAJ_PESTAFF.SQL.Add('insert into CPersonnel(matricule,nom,prenom,sex,date_nais,com_nais,s_famill,'); DM.Q_MAJ_PESTAFF.SQL.Add('adresse_1,adr_com,adr_wil,banque,n_compte,soc_sec,mutuelle,code_fonc,niveau,cat,ech,'); DM.Q_MAJ_PESTAFF.SQL.Add('date_ent,date_sor,poste,direction,dept_unit,serv_atel,classe,nbr_enf,nomarabe,collectif)'); DM.Q_MAJ_PESTAFF.SQL.Add('values(:matricule,:nom_ss,:prenom_ss,:sex,:birth_date,:birth_plac,:m_status,'); DM.Q_MAJ_PESTAFF.SQL.Add(':adress_1,:adress_2,:adress_3,:bank_code,:account_nb,:soc_sec,:mutuelle,:fonction,:niveau,:cat,:ech,'); DM.Q_MAJ_PESTAFF.SQL.Add(':entry_date,:quit_date,:poste,:direction,:dept_unit,:serv_atel,:classe,:p_charge,:nomarabe,:collectif)'); DM.Q_MAJ_PESTAFF.ParamByName('matricule').AsString:=DM.Q_Table_Import.fieldbyname('matricule').AsString; DM.Q_MAJ_PESTAFF.ParamByName('niveau').AsString := DM.Q_Table_Import.fieldbyname('niveau').AsString; DM.Q_MAJ_PESTAFF.ParamByName('cat').AsString := DM.Q_Table_Import.fieldbyname('cat').AsString; DM.Q_MAJ_PESTAFF.ParamByName('direction').AsString := DM.Q_Table_Import.fieldbyname('direction').AsString; DM.Q_MAJ_PESTAFF.ParamByName('dept_unit').AsString := DM.Q_Table_Import.fieldbyname('dept_unit').AsString; DM.Q_MAJ_PESTAFF.ParamByName('serv_atel').AsString := DM.Q_Table_Import.fieldbyname('serv_atel').AsString; DM.Q_MAJ_PESTAFF.ParamByName('soc_sec').AsString := DM.Q_Table_Import.fieldbyname('soc_sec').AsString; DM.Q_MAJ_PESTAFF.ParamByName('mutuelle').AsString := DM.Q_Table_Import.fieldbyname('mutuelle').AsString; DM.Q_MAJ_PESTAFF.ParamByName('ech').AsString := DM.Q_Table_Import.fieldbyname('ech').AsString; DM.Q_MAJ_PESTAFF.ParamByName('poste').AsString := DM.Q_Table_Import.fieldbyname('poste').AsString; DM.Q_MAJ_PESTAFF.ParamByName('fonction').AsString := DM.Q_Table_Import.fieldbyname('fonction').AsString; DM.Q_MAJ_PESTAFF.ParamByName('classe').AsString := DM.Q_Table_Import.fieldbyname('classe').AsString; DM.Q_MAJ_PESTAFF.ParamByName('account_nb').AsString := DM.Q_Table_Import.fieldbyname('account_nb').AsString; DM.Q_MAJ_PESTAFF.ParamByName('bank_code').AsString := DM.Q_Table_Import.fieldbyname('bank_code').AsString; DM.Q_MAJ_PESTAFF.ParamByName('m_status').AsString := DM.Q_Table_Import.fieldbyname('m_status').AsString; DM.Q_MAJ_PESTAFF.ParamByName('collectif').AsString := DM.Q_Table_Import.fieldbyname('collectif').AsString; DM.Q_MAJ_PESTAFF.ParamByName('p_charge').AsFloat := DM.Q_Table_Import.fieldbyname('p_charge').AsFloat; var_date:= DM.Q_Table_Import.fieldbyname('entry_date').AsDateTime; decodedate(var_date,y,m,d); if not IsValidDate(y,m,d) then begin DM.Q_MAJ_PESTAFF.ParamByName('entry_date').AsString :=''; end else begin DM.Q_MAJ_PESTAFF.ParamByName('entry_date').AsString := DM.Q_Table_Import.fieldbyname('entry_date').AsString; end; var_date:= DM.Q_Table_Import.fieldbyname('quit_date').AsDateTime; decodedate(var_date,y,m,d); if not IsValidDate(y,m,d) then begin DM.Q_MAJ_PESTAFF.ParamByName('quit_date').AsString :=''; end else begin DM.Q_MAJ_PESTAFF.ParamByName('quit_date').AsString := DM.Q_Table_Import.fieldbyname('quit_date').AsString; end; DM.Q_MAJ_PESTAFF.ParamByName('nomarabe').AsString := DM.Q_Table_Import.fieldbyname('nomarabe').AsString; DM.Q_MAJ_PESTAFF.ParamByName('nom_ss').AsString := DM.Q_Table_Import.fieldbyname('nom_ss').AsString; DM.Q_MAJ_PESTAFF.ParamByName('prenom_ss').AsString := DM.Q_Table_Import.fieldbyname('prenom_ss').AsString; DM.Q_MAJ_PESTAFF.ParamByName('sex').AsString := DM.Q_Table_Import.fieldbyname('sex').AsString; DM.Q_MAJ_PESTAFF.ParamByName('birth_date').AsString := DM.Q_Table_Import.fieldbyname('birth_date').AsString; DM.Q_MAJ_PESTAFF.ParamByName('birth_plac').AsString := DM.Q_Table_Import.fieldbyname('birth_plac').AsString; DM.Q_MAJ_PESTAFF.ParamByName('m_status').AsString := DM.Q_Table_Import.fieldbyname('m_status').AsString; DM.Q_MAJ_PESTAFF.ParamByName('adress_1').AsString := DM.Q_Table_Import.fieldbyname('adress_1').AsString; DM.Q_MAJ_PESTAFF.ParamByName('adress_2').AsString := DM.Q_Table_Import.fieldbyname('adress_2').AsString; DM.Q_MAJ_PESTAFF.ParamByName('adress_3').AsString := DM.Q_Table_Import.fieldbyname('adress_3').AsString; DM.Q_MAJ_PESTAFF.ExecSQL; DM.Q_MAJ_PESTAFF.Close; end; ProgressBar1.Position:=i; DM.Q_Table_Import.Next; i:=i+1; end; end;