السلام عليكم
هذا هو السؤال ... ارجو مساعدتي في فهم سطور البرنامج قدر المستطاع
Search_Departments_set.Active := False;
Search_Departments_set.CommandText := 'Select Distinct dept_id from rank_upgrading ';
Search_Departments_set.Active := True;
while not(Search_Departments_Source.DataSet.Eof) do
begin
Upgrade_rule_set.Active := False;
Upgrade_rule_set.CommandText := 'Select Distinct dept_id ,Job_ID,Qualify_ID from rank_upgrading where Dept_id ='''+Search_Departments_set.Fields[0].AsString+''' ';
Upgrade_rule_set.Active := True;
// Upgrade_rule_set.First;
Btn_UG_Search.Enabled := False;
//---------------------------------------------------------------------------------------------------
while not(Upgrade_rule_Source.DataSet.Eof) do
begin //and DateDiff(Day,Last_RankUpgrade,getDate()) between '''+SpinEdit1.Text+''' and '''+SpinEdit2.Text+'''
Ranks_set.Active := False;
Ranks_set.CommandText := 'select Qualify_ID ,Years,From_Rank_Id from Rank_upgrading where Dept_id ='''+Search_Departments_set.Fields[0].AsString+''' and Job_ID ='''+Upgrade_rule_set.Fields[1].AsString+''' and Qualify_ID='''+Upgrade_rule_set.Fields[2].AsString+''' ';
Ranks_set.Active := True;
// Ranks_set.Next;
while not(Ranks_Source.DataSet.Eof) do
begin
Matched_record_set.Active := False;
if RU_RadioButton1.Checked then //and DateDiff(day,Last_RankUpgrade,getDate()) <= 31 ---and Emp_rank ='''+Ranks_set.Fields[2].AsString+'''
Matched_record_set.CommandText := 'Select Job,Emp_ID ,emp_rank ,Department,ABS(datePart(dd,GetDate())- datePart(dd,Last_RankUpgrade)) As "Days remained",Qualify_ID ,'''+Ranks_set.Fields[
1].AsString+''' As Date_Match ,Last_RankUpgrade,Emp_name from Employees_Info where Department ='''+Search_Departments_set.Fields[0].AsString+''' and Job ='''+Upgrade_rule_set.Fields[
1].AsString+''' and Qualify_ID ='''+Ranks_set.Fields[0].AsString+''' and Emp_rank ='''+Ranks_set.Fields[2].AsString+''' and DateDiff(Year,Last_RankUpgrade,getDate()) = '''+Ranks_set.Fields[1].AsString+''' and datePart(dd,Last_RankUpgrade) - datePart(dd,GetDate()) between '''+IntToStr(RU_SpinEdit1.Value)+''' and '''+IntToStr(RU_SpinEdit2.Value)+''' and ABS(Cast(month(GetDate()) - month(Last_RankUpgrade)as int))=0 '
elseانظر الى التداخل الذي قمت به لحل المسالة وهي الآن تعمل كما يجب ولكن يعيبه البطء , لان مثل هكذا حلول للبرنامج قد تكون غير مناسبة عندما تعالج بيانات ضخمة
الذي اريده هو Creating dynamic cursor يستقبل امر البحث من البرنامج ثم تكون هنالك عدة كيرسورات متداخلة , كل واحد منهم يتم تفيذه في حلقة بعدد سجلات الكيرسور الخارجي وهكذا, ثمة شيئ آخر يجعل من حل المسألة عن طريق الـT-SQL اجدى ذلك لانه لايمكن امرار التاريخ من البرنامج عندما تستخدم الدالة DateDiff فقط يمكن ذلك عبر البراميترز الخاصة بالكيرسور او الاجراءات المخزنة
ارجو ان تكون الفكرة واضحة الطرح
..
..
بوركتم وجوزيتم خيرا
