الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

العمليات على جدول

بدأه tahasit في 8 يناير 2010 · 24 رد · 2,419 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي جدول يحوي حقلين من نوع رقم الحقل الأول A والحقل الثاني B .

ونفرض أن الجدول يحوي 10 سجلات تكون القيم في الحقل A كلها أكبر من صفر

أما الحقل B فيمكن أن تكون أكبر من صفر أو فارغة أو قيمة سالبة

ما أريده هو إجراء يبدأ من السجل الأول فإن كانت القيمة في الحقل B أكبرأو أصغر من صفر

يقوم بإضافة هذه القيمة بداية من السجل الذي يليه وإلى نهاية الجدول للحقل A.

وإذا كانت قيمة الحقل B فارغة أو تساوي صفر فإنها تستثنى من العملية.

ثم ينتقل إلى السجل الذي يليه وتتكرر العملية إلى أن يصل إلى السجل الأخير.

كل هذا يتم عند الضغط على الزر Calculer وقد حاولت كثيرا غير أني لم أفلح

وهناك مثال مرفق لتسهيل الأمر عليكم

post-145519-12629755270119_thumb.png

aaaaa.rar

986902102.jpg
#2
tahasit كتب:

السلام عليكم ورحمة الله تعالى وبركاتهلدي جدول يحوي حقلين من نوع رقم الحقل الأول A والحقل الثاني B .ونفرض أن الجدول يحوي 10 سجلات تكون القيم في الحقل A كلها أكبر من صفر أما الحقل B فيمكن أن تكون أكبر من صفر أو فارغة أو قيمة سالبة ما أريده هو إجراء يبدأ من السجل الأول فإن كانت القيمة في الحقل B أكبرأو أصغر من صفر يقوم بإضافة هذه القيمة بداية من السجل الذي يليه وإلى نهاية الجدول للحقل A.وإذا كانت قيمة الحقل B فارغة أو تساوي صفر فإنها تستثنى من العملية.ثم ينتقل إلى السجل الذي يليه وتتكرر العملية إلى أن يصل إلى السجل الأخير.كل هذا يتم عند الضغط على الزر Calculer وقد حاولت كثيرا غير أني لم أفلح وهناك مثال مرفق لتسهيل الأمر عليكم post-145519-12629755270119_thumb.pngaaaaa.rar

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

أخي حسب ما فهمت من مشاركتك اليك هذا التعديل البسيط ربما يكون هذا هو المقصود

aaaaa(1).rar

تم تعديل هذه المشاركة بواسطة medreg في 9 يناير 2010 في 14:53

#3
medreg كتب:

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

أخي حسب ما فهمت من مشاركتك اليك هذا التعديل البسيط ربما يكون هذا هو المقصود

aaaaa(1).rar

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

بارك الله فيك أخي medreg

لقد وصلت إلى المرحلة التي توقفت عندها أنا وهذا دليل على أنك فهمت المطلوب .

سأطرح مثالا بسيطا ليفهم الجميع المطلوب

الجدول رقم 1 قبل إجراء العملية والجدول رقم 2 بعد إجراء العملية

post-145519-12630400986633_thumb.png

أرجو أن يكون المطلوب واضح .

986902102.jpg
#4

سؤال

حسب ما ارى في الجدول الثاني

انه اضيف 10 للصف الثاني واصبح 60 بدلا من 50

والصف الثالث اصبح 80 بدلا من 70

والرابع اصبح 95 بدلا من 90

لمذا اصبح الصف الرابع 95 بدلا من 90 ولم يصبح 100 مثلا بدلا من 95

ولماذ الصف الأو لم يتغير

ارجو الرد على السؤال حتى نتمكن من المطلوب

#5

بارك الله فيك أخي محمد الجواب ببساطة كما يلي :

بعد أن وجدنا القيمة B في السجل الأول مختلفة عن صفر إنتقلنا مباشرة إلى

السجل الذي يليه وقمنا بإضافة القيمة B والتي هي 10 إلى جميع السجلات بعدها في الحقل A

ومن ثم إنتقلنا إلى السجل الثاني فوجدنا قيمة B =0 فتم إستثنائها

ومن ثم إنتقلنا للسجل الذي يليه فوجدنا قيمة B= -5 فقمنا بإضافتها بداية من السجل الذي يليها إلى

الحقل A وهكذا دواليك إلى أن نصل إلى نهاية الجدول.

986902102.jpg
#6

أخي tahasit

بصراحة لم افهم جيدا

هل سيتم إضافة القيمة التي في الحقل B إلى جميع الحقول التالية ( في حال تحقق الشرط )

هل أصبت في ما قلت ؟؟

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#7
rober كتب:

أخي tahasit

بصراحة لم افهم جيدا

هل سيتم إضافة القيمة التي في الحقل B إلى جميع الحقول التالية ( في حال تحقق الشرط )

هل أصبت في ما قلت ؟؟

نعم أخي rober

نأخذ قيمة الحقل B في السجل الأول فإن توفرت الشروط سيتم إضافتها إلى الحقل A

في كل السجلات التي تلي .وبعد أن ننتهي من السجل الأول يأتي الدور على السجل الثاني لتعاد العملية من جديد

وهكذا دواليك

986902102.jpg
#8

هذا مثال الأخ Medreg بعد التعديل

وهو يعمل كالآتي :

أولا نختار السجل الأول ثم نضغط على الزر Calculer مرة واحدة

ثم نختار السجل الثاني ونضغط على الزر Calculer مرة واحدة

ثم نختار السجل الثالث ونضغط على الزر Calculer مرة واحدة

ثم .....

وبهذه الطريقة أحصل على المطلوب ولكن يدويا وما ينقص الآن هو آلية عمل ذلك دون الإنتقال يدويا بين السجلات .

أرجو أن يكون المطلوب واضح أخي rober

TAHA.rar

986902102.jpg
#9

حسب ما فهمت

أستخدمت الكود التالي

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i,bv : integer ;
begin
  table1.First ;
  while table1.Eof = false do
  begin
    if table1.FieldByName('b').AsInteger <> 0 then
    begin
      i := table1.RecNo ;
      bv := table1.fieldbyname('b').AsInteger ;
      table1.Next ;
      while table1.Eof = false do
      begin
        table1.Edit ;
        table1.FieldByName('a').AsInteger := table1.fieldbyname('a').AsInteger + bv ;
        table1.Post ;
        table1.Next ;
      end ;
      table1.RecNo := i + 1 ;
    end ;
    table1.Next ;
  end ;
end;

النتيجة كانت كالأتي

post-143282-12630647941005_thumb.jpg post-143282-12630648049272_thumb.jpg

إن كانت النتيجة صحيحة سأقوم بإرفاق المشروع

أرجو أن أكون قد أصبت :blush:

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#10

صحيحة 100/100 بارك الله لك وفيك أخي rober

والله أبهحت قلبي أخي rober :wub:

وين كنت مخبي أخي rober

جزاك الله عنا خير الجزاء

:blush: :blush:

986902102.jpg
#11

هل هناك داعي من إرفاق المشروع ؟؟

ملاحظة :

أخي الكريم لا تنسى عدم ترك خلايا فارغة في الحقول .. و إن لم يكن هناك قيمة ضع ( 0 ) كقيمة إفتراضية

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#12
rober كتب:

هل هناك داعي من إرفاق المشروع ؟؟

ملاحظة :

أخي الكريم لا تنسى عدم ترك خلايا فارغة في الحقول .. و إن لم يكن هناك قيمة ضع ( 0 ) كقيمة إفتراضية

لا داعي لرفع المثال فقد أظهرت مكمن الخطأ بارك الله فيك

ولا أنسى أخي محمد- mohfa (قلبي يحدثني أن له علاقة بالأمر )

بارك الله فيكم جميعا .

986902102.jpg
#13
tahasit كتب:

صحيحة 100/100 بارك الله لك وفيك أخي rober

والله أبهحت قلبي أخي rober :wub:

وين كنت مخبي أخي rober

جزاك الله عنا خير الجزاء

:blush: :blush:

الحمد لله ها قد طل الأخ روبر وأنقذنا

شكرًا جزيلاً على التعاون

ولم يبق إلا طلبنا المشار اليه في المشاركة

#14

لاشكر على واجب :blush:

medreg كتب:

ولم يبق إلا طلبنا المشار اليه في المشاركة

ما هو أخي medreg ؟؟

تم تعديل هذه المشاركة بواسطة rober في 9 يناير 2010 في 23:08

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#15

اه منك يا rober ....

يعني حلت المشكلة يا اخي طه

عزيزي :

لاتنسى ان تصلي على حبيبنا و شفيعنا يوم لا ينفع مال ولا بنون .

فاللهمّ صّل وسّلم على سيدي و شفيعي وحبيبي محمد عليك الف صلاة وازكى تسليم

*****

2_header.png

#16
mohfa كتب:

اه منك يا rober ....

هههههههه :lol:

أستكثرت علي هذه الأجابة .. و أنت تقوم بكل ما تقوم به .. حرام عليك :lol: :mad:

لم أكتب منذ فترة طويلة فقلت لعل هذه الإجابة تعيد العجلة للدوران :blush:

أستاذنا و أخونا محمد و الله أفتقدتك

كل الود و الإحترام لك و للجميع

بالنسبة للإجابة أتصور هناك شيء ناقص ( حسب الرد الأخير للأخ medreg )

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#17
اقتباس
كل الود و الإحترام لك و للجميع

وينك يارجل ....

المنتدى اصابته افلونزا ....؟ :hmm:

عزيزي :

لاتنسى ان تصلي على حبيبنا و شفيعنا يوم لا ينفع مال ولا بنون .

فاللهمّ صّل وسّلم على سيدي و شفيعي وحبيبي محمد عليك الف صلاة وازكى تسليم

*****

2_header.png

#18
rober كتب:

لاشكر على واجب :blush:

ما هو أخي medreg ؟؟

اقصد هذه المشاركة

/index.php?showtopic=211792

كل ما اطلبه هو انني بدلا من اضيف سجل في الجدول الثاني بواسطة DBNavigator أو بواسطة Button كلما اضفت سجل الجدول الأول

اريد ان يضفا عدد من السجلات وليكن 05 سجلات فارغة وملرقمة بداية من رقم 01 الى غاية رقم 05 وكل ما اضفت سجل في الجدول الأول اجد الجدول الثاني مهيء ب05 سجلات

هذا هو القصد

#19

حسب رأي المتواضع فإن الطريقة الأسرع والأفضل في تنفيذ مثل هذه الإجرائيات هي استعمال القوادح عند إدخال السجلات كحل اولي

والحل الذي أفضله أكثر هو استعمال الحقول ذات النمط المحسوب تلقائياً compit

لان الأسلوب الذي تفضل به الأعضاء جميل ولكن تخيل لو أن عندك قاعدة بيانات تحتوي على 100000 تأكد تماماً أن هذه الأسلوبين السابقين سيوصلونك إلى ماتريده بأقل استهلاك ممكن للذواكر والوقت

حكمت سراج الدين

#20
hikmat كتب:

حسب رأي المتواضع فإن الطريقة الأسرع والأفضل في تنفيذ مثل هذه الإجرائيات هي استعمال القوادح عند إدخال السجلات كحل اولي

والحل الذي أفضله أكثر هو استعمال الحقول ذات النمط المحسوب تلقائياً compit

لان الأسلوب الذي تفضل به الأعضاء جميل ولكن تخيل لو أن عندك قاعدة بيانات تحتوي على 100000 تأكد تماماً أن هذه الأسلوبين السابقين سيوصلونك إلى ماتريده بأقل استهلاك ممكن للذواكر والوقت

حكمت سراج الدين

أهلا وسهلا بك أخي الكريم

ياريت توضح لنا قصدك فيما يخص الحقول ذات النمط المحسوب تلقائيا

أما استعمال القوادح عند إدخال السجلات كحل اولي فهي لا تفيد في حالتي هنا

986902102.jpg
#21

أخي Tahasit

لقد حاولت مع المثال اياه

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

ولم اتمكن من الحل

ماذا عندكم وأين الأخ Rober هو الآخر

لم يظهر منذ الرد الأخير على الأخ Mohfa

#22

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

يبدوا أن مشاكلي مع الجدوال لم تنتهي بعد

على كل حال لدي جدول أجري عليه عملية للحصول على النتيجة التالية :

post-145519-12634095098342_thumb.png

يعني أن قيمة الحقل B = الحقل A مع إضافة قيمة الحقل B في السجل الذي يسبق السجل الحالي

أرجو أن يكون قصدي واضح

وقد حاولت ولكن لم أفلح أرجو مساعدتي في تجاوز الإشكال

aaaaa.rar

986902102.jpg
#23
medreg كتب:

ماذا عندكم وأين الأخ Rober هو الآخر

لم يظهر منذ الرد الأخير على الأخ Mohfa

أخي medreg أعتذر عن غيابي لكن بصراحة لم أجد حل للمشكلة حتى الأن و أعتذر مرة أخرى عن غيابي

أخي tahasit

عدل كود الزر calculer

على الشكل التالي

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  bv,i : integer ;
begin
  bv := 0 ;
  table1.First ;
  for i := 1 to table1.RecordCount -1 do
  begin
    bv := table1.fieldbyname('b').AsInteger ;
    if bv > 0 then
    begin
      table1.Next ;
      table1.Edit ;
      table1.FieldByName('b').AsInteger := table1.fieldbyname('a').AsInteger + bv ;
      table1.Post ;
    end ;
  end ;
end;

مع مراعات أن قيمة العامود B في الحقل الأول يجب أن لا تكون فارغة و أكبر من صفر

أرجو الإستفادة

تم تعديل هذه المشاركة بواسطة rober في 13 يناير 2010 في 23:04

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#24

بارك الله فيك أخي rober

وجزاك الله عنا خير الجزاء

وتأكد أن الكثير سيستفيد من الحلول التي وضعتها

986902102.jpg
#25
tahasit كتب:

صحيحة 100/100 بارك الله لك وفيك أخي rober

والله أبهحت قلبي أخي rober :wub:

وين كنت مخبي أخي rober

جزاك الله عنا خير الجزاء

:blush: :blush:

اخواني اسعد الله مسائكم

اعتقد بأن الأخ روبر لديه معلومات اكثر من هذا اللوب

فبأمكانه استخدام الكوري (sql) افضل من استخدام الدوار حتى نهايه الملف

ووضعه في ملف مثال واعرف بأن لديه القدره على ذلك وكل ما يقوم به يشكر عليه

تحياتي

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

مواضيع مشابهة