delphi4arab منتديات دلفي للعرب
فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى (/showthread.php?tid=10429)

الصفحات: 1 2 3 4


فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى - samnaj00 - 03-09-2019

السلام عليكم ورحمة الله وبركاته
السادة الكرام

1- لدي جدول حسابات فرعية مرتبطة بجدول حسابات رئيسية
   عملت في حدث DBGrid1DrawColumnCell
                  وحدث Edit1Change
الفلترة تعمل . لكن عندما اتنقل بزر الكيبورد السهم للاسفل والسهم للاعلى لا تعمل الفلترة(جرب تنقل بالزرين بين السجل الاول والسجل الثاني مرة للاسفل ومرة للاعلى)

2- كيف يمكن نسخ قيمة اخر CELL للحقل  ID_R و NAME_F في DBGRID2 حسابات فرعية وذلك للسجل الجديد الذي افتحه بزر السهم للاسفل

جزاكم الله كل خير

(03-09-2019, 05:11 PM)samnaj00 كتب : 2- كيف يمكن نسخ قيمة اخر CELL للحقل  ID_R و NAME_F في DBGRID2 حسابات فرعية وذلك للسجل الجديد الذي افتحه بزر السهم للاسفل
بالاضافة الى نسخ قيمة CELL للحقل ID_F ويضاف للقيمة 1 في السجل الجديد


RE: فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى - Delphi4Us - 03-09-2019

وعليكم السلام ورحمة الله

اولا مالم افهمه وغير منطقي هو لماذا اداة الفلترة هي نفسها التي تضع فيها قيمة كالتالي بالحدث المذكور

كود :
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;   DataCol: Integer; Column: TColumn; State: TGridDrawState); begin form1.Edit1.Text:= form1.DBGrid1.DataSource.DataSet.FieldByName('id_r').asstring; form1.Label3.Caption:= form1.DBGrid1.DataSource.DataSet.FieldByName('id_r').asstring; end;



وفي حدث الاداة

كود :
procedure TForm1.Edit1Change(Sender: TObject); begin if form1.Edit1.Text<>'' then   begin       ABSTable2.Active:=true;       ABSTable2.Filtered:=false;       ABSTable2.Filter:='id_r='+''''+Edit1.Text+''''+'';       ABSTable2.Filtered:=true;   end   else   ABSTable2.Active:=false; end;

اذا اردت ان تضع قيمة حقل عندما تنتقل الى سجل جديد دائما استخدم الحدث التالي:

كود :
procedure TForm1.ADOTable1AfterScroll(DataSet: TDataSet); begin end;


بالنسبة الى جمع قيمة حقلين في حقل جديد استخدم الحقل التالي:

كود :
procedure TForm1.ADOTable1CalcFields(DataSet: TDataSet); begin end;

تحتاج الى اضافة حقل بالاداة DataSet من نوع Calculate واسناد القيمة البه بالحدث السابق
ليس لدي قاعدة البيانات التي تستخدمها والا لكنت عدلت المثال


RE: فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى - samnaj00 - 03-09-2019

3- عند فتح البرنامج ومع أن السجل الاول هو المحدد - في الحسابات الرئيسية بينما يظهر في الحسابات الفرعية سجلات ID_R اخر سجل ظاهر من DBGRID1 وهو 181


RE: فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى - Delphi4Us - 03-09-2019

اذا كان معك وقت اصنع مثال على قاعدة بيانات Access لنعمل فيه معا وسوف اراه عندما اتفرغ لذلك


RE: فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى - samnaj00 - 03-09-2019

(03-09-2019, 05:49 PM)Delphi4Us كتب : اولا مالم افهمه وغير منطقي هو لماذا اداة الفلترة هي نفسها التي تضع فيها قيمة كالتالي بالحدث المذكور

اذاً  كيف افلتر الحسابات الفرعية للحسبا الرئيسي؟؟

(03-09-2019, 05:49 PM)Delphi4Us كتب : اذا اردت ان تضع قيمة حقل عندما تنتقل الى سجل جديد دائما استخدم الحدث التالي:
[code]procedure TForm1.ADOTable1AfterScroll(DataSet: TDataSet);

ان شاء الله سأجرب

(03-09-2019, 05:49 PM)Delphi4Us كتب : بالنسبة الى جمع قيمة حقلين في حقل جديد استخدم الحقل التالي:
[code]procedure TForm1.ADOTable1CalcFields(DataSet: TDataSet);

تحتاج الى اضافة حقل بالاداة DataSet من نوع Calculate واسناد القيمة البه بالحدث السابق
ليس لدي قاعدة البيانات التي تستخدمها والا لكنت عدلت المثال

لا اريد جمع حقلين بل اريد قيمة اخر قيمة للحقل ID_F مضافاً اليها 1 وتكون في خلية ID_F للسجل الجديد اي مثل AUTONUMER

(03-09-2019, 05:55 PM)Delphi4Us كتب : اذا كان معك وقت اصنع مثال على قاعدة بيانات Access لنعمل فيه معا وسوف اراه عندما اتفرغ لذلك
ان شاء الله غداً

جزاك الله كل خير



RE: فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى - Delphi4Us - 03-09-2019

إقتباس :اذاً  كيف افلتر الحسابات الفرعية للحسبا الرئيسي؟؟


استخدم الربط المباشر عن طريق خصائص الجدول MasterSource
انت مع اسرع بيئة لصنع التطبيقات


RE: فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى - samnaj00 - 05-09-2019

(03-09-2019, 06:21 PM)Delphi4Us كتب : استخدم الربط المباشر عن طريق خصائص الجدول MasterSource
انت مع اسرع بيئة لصنع التطبيقات

تم الحل باذن الله

(03-09-2019, 05:49 PM)Delphi4Us كتب : وعليكم السلام ورحمة اللهend;[/code]

اذا اردت ان تضع قيمة حقل عندما تنتقل الى سجل جديد دائما استخدم الحدث التالي:

كود :
procedure TForm1.ADOTable1AfterScroll(DataSet: TDataSet); begin end;

كيف يكون الكود؟
-------------------------------
عندما ارتبطت الحسابات الفرعية بالرئيسية اصبح عندما اضيف سطراً جديداً يتكرر قيمة id_R في الحسابات الفرعية وهذا جيد
لكن كيف يتكرر id_F مع زيادة 1

- كنت قد جعلت نوع الحقل id_R في الرئيسية هو من نوع char و 3 ارقام فقط لكي لا يضيف المستخدم سوى 3ارقام فقط وكذلك جعلت id_F في الفرعية لكن ب 6 ارقام ..... فهل هذه العمل صحيحاً؟؟


RE: فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى - larbiparadox - 06-09-2019

حمل المثال من المرفقات ، ربما تجد الاجوبة التي تريدها

[صورة: 118211179.png]

حمل المثال من المرفقات ، ربما تجد الاجوبة التي تريدها


RE: فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى - samnaj00 - 07-09-2019

(06-09-2019, 12:55 PM)larbiparadox كتب : حمل المثال من المرفقات ، ربما تجد الاجوبة التي تريدها
كل
(06-09-2019, 12:55 PM)larbiparadox كتب : حمل المثال من المرفقات ، ربما تجد الاجوبة التي تريدها

[صورة: 118211179.png]

حمل المثال من المرفقات ، ربما تجد الاجوبة التي تريدها

الشكر لك اخي الكريم
لكن ألا يمكن ان تكون قيمة i ظاهرة في حقل id_f بدل ظهورها في dbedit وذلك في حدث beforInsert

كيف يمكن اظهار رسالة في حال كان الرقم المدخل في Id_f اذا كان اول 3 ارقام لا تطابق قيمة ID_R
فلو كان قيمة ID_R تساوي 112 وادخلت 125011 في ID_f فيعطيني رسالة الخطأ لانه يجب ان يكون اول 3ارقام هي 112 وما بعدها لا يهم
وكذلك شرط اخر فيما لوكان الرقم المدخل 112 فقط اي نفس رقم ID_R


RE: فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى - larbiparadox - 07-09-2019

* بالنسبة للسؤال الاول : لكن ألا يمكن ان تكون قيمة i ظاهرة في حقل id_f بدل ظهورها في dbedit وذلك في حدث beforInsert
- الجواب : بالنسبة لـ DbGrid1 إستبدل DBEdit1.Text := intTOstr(i) بـ DBGrid1.DataSource.DataSet.FieldByName('id_r').Value := intTOstr(i)

و باقي الاسئلة سأعدل على المثال

تم التعديل حسب طلبك