السلام عليكم ورحمة الله وبركاته
السادة الكرام
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 في السجل الجديد
وعليكم السلام ورحمة الله
اولا مالم افهمه وغير منطقي هو لماذا اداة الفلترة هي نفسها التي تضع فيها قيمة كالتالي بالحدث المذكور
كود :
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 واسناد القيمة البه بالحدث السابق
ليس لدي قاعدة البيانات التي تستخدمها والا لكنت عدلت المثال
3- عند فتح البرنامج ومع أن السجل الاول هو المحدد - في الحسابات الرئيسية بينما يظهر في الحسابات الفرعية سجلات ID_R اخر سجل ظاهر من DBGRID1 وهو 181
اذا كان معك وقت اصنع مثال على قاعدة بيانات Access لنعمل فيه معا وسوف اراه عندما اتفرغ لذلك
إقتباس :اذاً كيف افلتر الحسابات الفرعية للحسبا الرئيسي؟؟
استخدم الربط المباشر عن طريق خصائص الجدول MasterSource
انت مع اسرع بيئة لصنع التطبيقات
(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 ارقام ..... فهل هذه العمل صحيحاً؟؟
حمل المثال من المرفقات ، ربما تجد الاجوبة التي تريدها
حمل المثال من المرفقات ، ربما تجد الاجوبة التي تريدها
(06-09-2019, 12:55 PM)larbiparadox كتب : [ -> ]حمل المثال من المرفقات ، ربما تجد الاجوبة التي تريدها
كل
(06-09-2019, 12:55 PM)larbiparadox كتب : [ -> ]حمل المثال من المرفقات ، ربما تجد الاجوبة التي تريدها
![[صورة: 118211179.png]](https://www2.0zz0.com/2019/09/06/14/118211179.png)
حمل المثال من المرفقات ، ربما تجد الاجوبة التي تريدها
الشكر لك اخي الكريم
لكن ألا يمكن ان تكون قيمة i ظاهرة في حقل id_f بدل ظهورها في dbedit وذلك في حدث beforInsert
كيف يمكن اظهار رسالة في حال كان الرقم المدخل في Id_f اذا كان اول 3 ارقام لا تطابق قيمة ID_R
فلو كان قيمة ID_R تساوي 112 وادخلت 125011 في ID_f فيعطيني رسالة الخطأ لانه يجب ان يكون اول 3ارقام هي 112 وما بعدها لا يهم
وكذلك شرط اخر فيما لوكان الرقم المدخل 112 فقط اي نفس رقم ID_R
* بالنسبة للسؤال الاول : لكن ألا يمكن ان تكون قيمة i ظاهرة في حقل id_f بدل ظهورها في dbedit وذلك في حدث beforInsert
- الجواب : بالنسبة لـ DbGrid1 إستبدل DBEdit1.Text := intTOstr(i) بـ DBGrid1.DataSource.DataSet.FieldByName('id_r').Value := intTOstr(i)
و باقي الاسئلة سأعدل على المثال
تم التعديل حسب طلبك