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

نسخة كاملة : في حالة ربط جدول بأخر
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
اولاً
السلام عليكم ورحمة الله تعالى وبركاته
اتقدم بأحر التهانيء بمناسبة الإحتفال بمولد سيد البشر سيدنا ونبينا وحبيبنا وقرة أعيننا محمد إبن عبدالله رسول الله صلى الله عليه وعلى آله وصحبه والرضى على من تبع ملتهم أجمع
اللهم صلي وسلم عليه وسلم
اللهم اجعلنا من الحار يصين التشبث بسنة هذا النبيء واجعلنا يا الله من السامعين القول واتباع احسنه

أما بعد
ندخل في الموضوع الدنيوي
لقد ربطت جدول بجدول أخر (قاعدة البيانات بارادوكس واحيانا استعمل ابسوليت)
الجدول الأول وهو Table2 هذا الجدول يحتوي على خمس حقول
RB_CD من نوع String
RB_BS من نوع Float
SP1 من نوع Float
SP2 من نوع Float
SP3 من نوع Float
SP4 من نوع Float
SP5 من نوع Float

والجدول الثاني هو Table1 هذا الجدول يحتوي على
PS_CD من نوع SMALLINT
PS_LB من نوع sTRING
RB_CD من نوع string
PS من نوع sTRING
RB_BS من نوع flOAT
MT_PS من نوع fLOAT
المشكل أو المطلوب هو ااني بمجرد ما اعطي القيمة للحقل RB_CD الموجود بالجدول Table1
تظهر قيمة RB_SB الموجودة في الجدول Table1 من الجدول Table2
يعني اذا كانت القيمة المعطات في الحقل Table1RB_CD.value تساوي 1/04 يبحث في الجدولTable2
على هذه القيمة ويعطيني قيمة الحقل RB_SB التابعة لها ويضعها في الحقل Table1RB_SB.value
ونفس الشيئ بالنسبة للحقل SP الموجود في Table1
إذا كانت قيمة الحقلtable1SP.value تساوي 1 يقوم بإظهار قيمة الحقل SP1 من Table2SP1.value
إذا كانت قيمة الحقلtable1SP.value تساوي 2 يقوم بإظهار قيمة الحقل SP2 من Table2SP1.value
وهكذا
من دون ان استعمل الكود في زر على ان يكون هذا الكود بعد الضغط على مفتاح Enter بالديبيقريد
وللتوضيح اكثر المثال بالمرفق
السلام عليكم
يا شباب 8مشاهدات للمرفق والموضوع من مجموع 12 زيارة للموضوع
ولا أحد يجيب على السؤال او الطلب
إن كان السؤال غير مفهوم فاخبروني ماه الغير مفهوه في السؤال واجيب عليه حتى تتضحة المسالة ونسهل عملية الرد على الموضوع
ومن اراد ان يناقشني في الموضوع من خلال السكيب فهذا عنواني على السكيب
medreg2009
ما هو المشكل هل تريد ربط جدول مع جدول
chehrour كتب :ما هو المشكل هل تريد ربط جدول مع جدول

مشكور على الرد
يا اخي المشكل ليس في ربط الجدول بجدول آخر
المشكل يكمن في
عندما اضع القيمة 1/04 في الحقل RB_CD في Table1 و أضغط على زر Enter في DBGrid2 التابع ل Table1
يأتي بقيمة الحقل RB_BS من Table2 الى الحقل RB_BS الموجودة في ال Table1
عندما اضع القيمة 2/04 في الحقل RB_CD في Table1 و أضغط على زر Enter في DBGrid2 التابع ل Table1
يأتي بقيمة الحقل RB_BS من Table2 الى الحقل RB_BS الموجودة في ال Table1

وعندما اضع القيمة 1 في الحقل SP في table1 وأضغط على الزر Enter في DBGrid2 التابع ل Table1
يأتي بقيمة الحقل SP1 من Table2 الى الحقل MT_SP الموجودة في ال Table1
وعندما اضع القيمة 2 في الحقل SP في table1 وأضغط على الزر Enter في DBGrid2 التابع ل Table1
يأتي بقيمة الحقل SP2 من Table2 الى الحقل MT_SP الموجودة في ال Table1

إن شاء الله اكون قد وفقت في التوضيح
للتوضيح أكثر
لقد عملت سابقًا قبل ان ارفق الملف هذا الكود
كود :
procedure TForm1.DBGrid2Enter(Sender: TObject); begin table1.Edit; table1RB_SB.Value:=Table2RB_SB.Value; if table1SP.Value=1 then Table1MT_SP.Value:=table2SP1.value; if table1SP.Value=2 then Table1MT_SP.Value:=table2SP2.value; if table1SP.Value=3 then Table1MT_SP.Value:=table2SP3.value; if table1SP.Value=4 then Table1MT_SP.Value:=table2SP4.value; if table1SP.Value=5 then Table1MT_SP.Value:=table2SP5.value; table1.Post; end; end.

لكن ما ابحث عنه هو كود يوفر علي تكرار العملية يعني من دون ان اكتب كل القيم كما ورد في الكود
مثلا ابحث عن كود الي هو يبحث على ما يساوي القيمة المراد استدعائها
medreg كتب :للتوضيح أكثر
لقد عملت سابقًا قبل ان ارفق الملف هذا الكود

تم التعديل على المرفق
ولكن ما ابحث عنه هو كود يوفر علي تكرار العملية يعني من دون ان اكتب كل القيم كما ورد في الكود
مثلا ابحث عن كود الي هو يبحث على ما يساوي القيمة المراد استدعائها
تفضل أخي ..

ولكن انصحك بتغيير التعاريف الى اسماء واضحة و تنظيم ترتيبب الحقول في الجداول و ال DBGrid

المشروع المعدل مرفق ..
PHP كود :
procedure TForm1.DBGrid2KeyPress(Sender: TObject; var Key: Char);
Var
GetStr:String;
begin

If Key = #13 Then

       
Begin

        
Case DBGrid2.Columns.Grid.SelectedField.Index OF

          5
: Begin

                 With Query1 
Do Begin
                 Close
;

                 
ParamByName('A').Value :=DBGrid2.Columns.Grid.SelectedField.AsString;

                 
Open;

                 IF 
FieldValues['RB_SB_CurrValue'] = Null Then GetStr:=''

                 
Else GetStr:= FieldValues['RB_SB_CurrValue'];

                 
End;

                  
With Table1 Do Begin

                  Edit
;

                  
Fields[3].Value := GetStr;

                  
Post ;

                  
DBGrid2.Refresh;

                  
End;

             
End;

          
1: Begin

                 With Query2 
Do Begin

                 Close
;

                 
ParamByName('B').Value := DBGrid2.Columns.Grid.Fields[2].AsString;

                 
Open;

                 Case 
DBGrid2.Columns.Grid.Fields[3].Value Of

                 1
: GetStr := FieldValues['SP1'];
                 
2: GetStr := FieldValues['SP2'];
                 
3: GetStr := FieldValues['SP3'];
                 
4: GetStr := FieldValues['SP4'];
                 
5: GetStr := FieldValues['SP5'];
                 
End;

                 
End;

               
With Table1 Do Begin

                  Edit
;

                  
Fields[2].Value := GetStr;

                  
Post ;

                  
DBGrid2.Refresh;

                  
End;
             
End;

          
End;

       
End;
end; 

بالتوفيق ان شاء الله ..
rover كتب :تفضل أخي ..

ولكن انصحك بتغيير التعاريف الى اسماء واضحة و تنظيم ترتيبب الحقول في الجداول و ال dbgrid

المشروع المعدل مرفق ..
PHP كود :
procedure tform1.dbgrid2keypress(sender: Tobject; var key: Char);
var
getstr:string;
begin

if key = #13 then

       
begin

        
case dbgrid2.columns.grid.selectedfield.index of

          5
: Begin

                 with query1 
do begin
                 close
;

                 
parambyname('a').value :=dbgrid2.columns.grid.selectedfield.asstring;

                 
open;

                 if 
fieldvalues['rb_sb_currvalue'] = null then getstr:=''

                 
else getstr:= fieldvalues['rb_sb_currvalue'];

                 
end;

                  
with table1 do begin

                  edit
;

                  
fields[3].value := getstr;

                  
post ;

                  
dbgrid2.refresh;

                  
end;

             
end;

          
1: Begin

                 with query2 
do begin

                 close
;

                 
parambyname('b').value := dbgrid2.columns.grid.fields[2].asstring;

                 
open;

                 case 
dbgrid2.columns.grid.fields[3].value of

                 1
: Getstr := fieldvalues['sp1'];
                 
2: Getstr := fieldvalues['sp2'];
                 
3: Getstr := fieldvalues['sp3'];
                 
4: Getstr := fieldvalues['sp4'];
                 
5: Getstr := fieldvalues['sp5'];
                 
end;

                 
end;

               
with table1 do begin

                  edit
;

                  
fields[2].value := getstr;

                  
post ;

                  
dbgrid2.refresh;

                  
end;
             
end;

          
end;

       
end;
end; 

بالتوفيق ان شاء الله ..

مشكور هذا هو الغرض المطلوب
حولت
البرنامج وفمت بما يلي :

احذف كل كود BitBtn1Click ماعدا table1.Post;
تصبح كمايلي:

كود :
procedure TForm1.BitBtn1Click(Sender: TObject); begin table1.Post; end;
واضافة Table1BeforePost تصبح كمايلي

كود :
procedure TForm1.Table1BeforePost(DataSet: TDataSet); VAR a:string[3]; begin table2.Locate('RB_CD',table1RB_CD.Value,[loCaseInsensitive]); table1RB_SB.Value:=table2RB_SB.Value; a:='SP'+FloatToStr(table1SP.Value); table1MT_SP.Value:=table2.FieldValues[a]; end;
بالتوفيق
حولت في البرنامج وقمت بما يلي :

احذف كل كود BitBtn1Click ماعدا table1.Post; ]تصبح كمايلي:

PHP كود :
procedure TForm1.BitBtn1Click(Sender: TObject);
begin

    table1
.Post;

end; 

واضقت Table1BeforePost تصبح كمايلي

PHP كود :
procedure TForm1.Table1BeforePost(DataSet: TDataSet);
VAR 
a:string[3];
begin          
table2
.Locate('RB_CD',table1RB_CD.Value,[loCaseInsensitive]);
table1RB_SB.Value:=table2RB_SB.Value;
a:='SP'+FloatToStr(table1SP.Value);
table1MT_SP.Value:=table2.FieldValues[a];
end; 
الصفحات : 1 2