هل من طريقة ابسط لملأ حقل في جدول من جدول آخر بعد مقارنتهما
#1
لقد استعملت محاولة لكن باستعمال كثرة المتغيرات
وما اطلبه هو استعمال كود بسيط من دون استعمال كثرة المتغيرات ويقوم بنفس الوظيفة الموجودة بمحاولتي
اطلعو على المحاولة حتى تفهموا المقصود وجزاكم الله عنا كل خير
الرد
#2
السلام عليكم

جولة 1:
جعل التعليمات أكثر مقروئية:

PHP كود :
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  
s1,s2,s3,s4,s5,s6,s7,s8,s9,s10:string;
  
cde, LB: string;
  
Fld: TField;
begin
   s1
:='';s2:='';s3:='';s4:='';s5:='';s6:='';s7:='';s8:='';s9:='';s10:='';

  
with DataModule3 do
  
begin
    abstable2
.First;
    while 
not abstable2.Eof do begin
      
//abstable2.edit;
      
cde := abstable2.FieldByName('cde').asstring;
      
LB := abstable2.fieldbyname('LB').asstring;

      if 
cde = '01' then s1 := LB;
      if 
cde = '02' then s2 := LB;
      if 
cde = '03' then s3 := LB;
      if 
cde = '04' then s4 := LB;
      if 
cde = '05' then s5 := LB;
      if 
cde = '06' then s6 := LB;
      if 
cde = '07' then s7 := LB;
      if 
cde = '08' then s8 := LB;
      if 
cde = '09' then s9 := LB;
      if 
cde = '10' then s10 := LB;
      
//abstable2.Post;
      //abstable2.Next;
    
end;

    
Fld := abstable1.fieldbyname('libelle');
    
abstable1.First;
    while 
not abstable1.Eof do begin
      abstable1
.edit;

      
cde := abstable2.FieldByName('cde').asstring;

      if 
cde = '01' then Fld.asstring := s1;
      if 
cde = '02' then Fld.asstring := s2;
      if 
cde = '03' then Fld.asstring := s3;
      if 
cde = '04' then Fld.asstring := s4;
      if 
cde = '05' then Fld.asstring := s5;
      if 
cde = '06' then Fld.asstring := s6;
      if 
cde = '07' then Fld.asstring := s7;
      if 
cde = '08' then Fld.asstring := s8;
      if 
cde = '09' then Fld.asstring := s9;
      if 
cde = '10' then Fld.asstring := s10;
      
abstable1.Post;
      
abstable1.Next;
    
end;
  
end; // with
end; 
جولة 2:
ايجاد طرق أفضل
مثلا فكرت بأن أستبدل المتغيرات العشر بمصفوفة من 10 عناصر،
(مع افتراض أن الحقول بها قيم ذات دلالة رقمية):


PHP كود :
procedure TForm1.bt1Click(Sender: TObject);
var
  
cde, LB: string;
  
Fld: TField;
  
s: array [1..10] of string;
  
i: integer;
begin
  with DataModule3 
do
  
begin
    abstable2
.First;
    while 
not abstable2.Eof do begin
      cde 
:= abstable2.FieldByName('cde').asstring;
      
LB := abstable2.fieldbyname('LB').asstring;
      for 
i := 1 to 10 do
        if 
StrToInt(cde) = i then
          s
[i] := LB;
    
end;

    
Fld := abstable1.fieldbyname('libelle');
    
abstable1.First;
    while 
not abstable1.Eof do begin
      abstable1
.edit;
      
cde := abstable2.FieldByName('cde').asstring;
      
i := StrToInt(cde);
      
Fld.asstring := s[i];
      
abstable1.Post;
      
abstable1.Next;
    
end;
  
end; // with
end; 
الرد
#3
اشكرك اخي على المعلومة القيمة والمجهود المبذول
بالنسبو للطرقة الأولى فهي تشبه طريقي إلا انها اخف منها اي اقصر منها لكن ما ابحث عنه هو التقليص من المتغيرات بدلا من ان اكتب 01 و 02 و 03 و 04 و 05 و 06 و 07 و 08 و 09 و 10 اكتب x1 يأخذ قيمة cde
و x2 يأخذ قيمة LB
اما بالنسبة للطريقة الثانية فاليم ليس قيم رقمية متتالية
لأنه ربما تكون قيمة cde تساوي 060 و 111و010و116 الى اخره
أحتاج الى شيئ يشبه هذا
PHP كود :
var x,s: string
begin
x
:=abstable2Cde.asstring;
s:=abstable2LB.asstring:

if 
abstable1.fieldbyname('Cde').asstring=x then begin
abstable1
.edit;
abstable1.fieldbyname('Libelle').asstring:=s; 
وجزاكم الله عنا كل خير
الرد
#4
السلام عليكم ورحمة الله تغالى وبركاته
لقد افادني احد الأساتذة بهذا الكود
PHP كود :
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
    DataModule3
.abstable1.Open;
    
DataModule3.abstable1.First;
    while 
not DataModule3.abstable1.Eof do begin
      
if DataModule3.abstable2.Findkey([DataModule3.abstable1['Cde']]) then begin
      DataModule3
.abstable1.Edit;
      
DataModule3.abstable1['Libelle']:=DataModule3.abstable2['LB'];
      
DataModule3.abstable1.Post;
      
end;
    
DataModule3.abstable1.next;
    
end;
end; 
اتمنى ان يستفيد منه الآخرين
الرد


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


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