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

نسخة كاملة : كيف استعمال الـ threads لتحديث جدول
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته

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

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

جرب استخدام

Application.ProcessMessages
شكرا أخي على الرد

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

هذا هو الكود:

كود :
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;