فلترة جدول ب ID جدول اخر - نسخ قيمة CELL لاخرى
#1
السلام عليكم ورحمة الله وبركاته
السادة الكرام

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 في السجل الجديد


الملفات المرفقة
.rar   o_test.rar (الحجم : 552.61 ك ب / التحميلات : 31)
الرد
#2
وعليكم السلام ورحمة الله

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

كود :
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 واسناد القيمة البه بالحدث السابق
ليس لدي قاعدة البيانات التي تستخدمها والا لكنت عدلت المثال
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
[-] كل من 1 user says قال شكرا ل Delphi4Us على المشاركة المفيدة
  • samnaj00
الرد
#3
3- عند فتح البرنامج ومع أن السجل الاول هو المحدد - في الحسابات الرئيسية بينما يظهر في الحسابات الفرعية سجلات ID_R اخر سجل ظاهر من DBGRID1 وهو 181
الرد
#4
اذا كان معك وقت اصنع مثال على قاعدة بيانات Access لنعمل فيه معا وسوف اراه عندما اتفرغ لذلك
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
الرد
#5
(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 لنعمل فيه معا وسوف اراه عندما اتفرغ لذلك
ان شاء الله غداً

جزاك الله كل خير
الرد
#6
إقتباس :اذاً  كيف افلتر الحسابات الفرعية للحسبا الرئيسي؟؟


استخدم الربط المباشر عن طريق خصائص الجدول MasterSource
انت مع اسرع بيئة لصنع التطبيقات
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
[-] كل من 1 user says قال شكرا ل Delphi4Us على المشاركة المفيدة
  • samnaj00
الرد
#7
(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 ارقام ..... فهل هذه العمل صحيحاً؟؟


الملفات المرفقة
.rar   o_test.rar (الحجم : 552.36 ك ب / التحميلات : 10)
الرد
#8
حمل المثال من المرفقات ، ربما تجد الاجوبة التي تريدها

[صورة: 118211179.png]

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


الملفات المرفقة
.rar   Prog Absolute Database.rar (الحجم : 554.04 ك ب / التحميلات : 5)
[-] كل من 1 user says قال شكرا ل larbiparadox على المشاركة المفيدة
  • samnaj00
الرد
#9
(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
الرد
#10
* بالنسبة للسؤال الاول : لكن ألا يمكن ان تكون قيمة i ظاهرة في حقل id_f بدل ظهورها في dbedit وذلك في حدث beforInsert
- الجواب : بالنسبة لـ DbGrid1 إستبدل DBEdit1.Text := intTOstr(i) بـ DBGrid1.DataSource.DataSet.FieldByName('id_r').Value := intTOstr(i)

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

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


الملفات المرفقة
.rar   Prog Absolute Database2.rar (الحجم : 555.71 ك ب / التحميلات : 14)
[-] كل من 1 user says قال شكرا ل larbiparadox على المشاركة المفيدة
  • samnaj00
الرد


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


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