![]() |
|
كيف استعمال الـ 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; |