كيف استعمال الـ threads لتحديث جدول
#1
السلام عليكم ورحمة الله وبركاته

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

وشكرا.
*** من حسن اسلام المرء تركه ما لا يعنيه ***
الرد
#2
وعليكم السلام ورحمة الله وبركاته

جرب استخدام

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

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

هذا هو الكود:

كود :
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;
*** من حسن اسلام المرء تركه ما لا يعنيه ***
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم