إشترك

التصفية بطريقية دينمايكية للجداول


مرحبا بجميع متابعي الموقع درس اليوم كتابي 
حيث سنشرح لكم اجراء بسيط جدا سيسهل عليكم عملية التصفية حيث عندما تريد التصفية في اي مكون combobox او edit او اي مكون قابل للكتابة string هذا هو الاجراء
كود:
procedure filterr(Dataset: TDataSet; const FieldName, SearchTerm: string);
begin
  Assert(Assigned(Dataset), 'No dataset is assigned');

  if SearchTerm = '' then
    Dataset.Filtered := False
  else
  begin
    Dataset.Filter := FieldName + ' LIKE ' + QuotedStr(SearchTerm + '*');
    Dataset.Filtered := True;
  end;
end;
و الآن شرح الاجراء
اسم الجراء هو filterr و قابل للتغير كما نريد و يحتوي على 3 باراماتر و هي
Dataset من نوع TDataSet و هي حجمة البيانات او نعتبرها الجدول في الحالة العامة
FieldName : و هو من نوع نصي و هو الحقل الذي سنبحث فيه
SearchTerm : متغير من مون نصي و هو نص البحث او بالاحرى اداة البحث
في البداية عمل شرط للتأكد من ان اداة البحث غير فارغة
if SearchTerm = '' then
حيث اذا كانت فارغة يتم الغاء الفلترة
ثم نبدأ في الاستثناء else
نقول له Dataset.Filter و هذا ما يكافئه adotable.filter في حال استخدمنا مكون ado كمثال اي Dataset هي الحالة العامة لاي جدول نص التصفية و هو عبارة عن نص من نوع string
في حالة التصفية التي نكتب فيها دائما الكود كامل نكتب كمثال

كود:
adotable1.filter := 'name' + 'like' +QuotedStr(edit1.text + '*');
هذا هو نص التصفية في الحالة الخاصة باستخدام غبارى like التي مفادها يشابه او مثل
و هنا في الحالة العامة واضح فقط جعلنا التخصيص تعميم
ثم بعد كتابة نص التفية نفعلها Dataset.Filtered := True;
الآن اذا اردت التجربة
اذهب مثلا لمكون edit عادي و اكتب في حدث OnChange الكود التالي فقط

كود:
filterr(adotable1,'name',edit1.text)
بكل بساطة يمكنكم وضعه في مكتبة خاصة بكم لاستدعائه في اي وقت
اما بالنسبة للمن اردا فهم Assert
فهي عبارة عن دالة من براماترين منطقي و رسالة تقوم بالتأكد من الشرط الذي هو منطقي Boolen اي الباراماتر الاول و ثم اذا كان خاطئ يمر إلى الرسالة و يمكن التحكم في الدالة بحرية عبر شروط فقط و في هذا الكود الاخص بالتفية الشرط هو Assigned(Dataset) و الذي هو دالة اخرى ببرامتر وحيد للتأكد من القيم الخاصة بالداتا سات اي فارغة او لا و هناك من يسأل لمذا لم نستخدم الشرط العادي الجواب هو لانها تتعامل مع عدد محدد من الانواع مثلا الشرط يكون منطقي لكن Assigned يمكن ان يكون اما Pointer او TObject او Method و في النهاية اذا كانت Nul ترجع لنا قيمة false و اذا كانت ممتلئة ترجع لنا قيمة true اي نستخدمها في الباراماتر مباشرة و هذا الاخير كله من اجل التأكد من ان الداتا سات موجود ثم التوجه للشروط السابقة

هناك 6 تعليقات

  1. بارك الله فيكم ونطلب المزيد من السورسات

    ردحذف
  2. السلام عليكم
    اخي رؤوف
    ماذا لو ارضنا البحث باستعمال الكومبوبكس .إد لدينا 3 كومبوبوكس و نريد البحت على حسب الكلمة الموجودة في الكومبوبوكس .مثلا لدي مدرسة لكي نبحث عن تلميد يجب او قسم ما يجب ان يكون اولا السنة الدراسية في كومبوبوكس و القسم ايضا و هل كمبو ياضا فيه متابعة التلميد للدراسة هل ابع او يتابع
    السؤال هو كيفية الفلترة بالمثال الدي اعطيتك اياه
    اعتذر عن الاطالة اخي و شكرا

    ردحذف
  3. و عليكم السلام
    هذا نوع معقد من البحث و يجب عليك ان تتعب فيه كثيرا حيث تعمل عبارة sql خاصة بالبحث وفق 3 شروط و هي المدرسة و القسم و السنة و هكذا ستنتج لك 9 حالات و هي في حال وجود قسم و سنة و في حال وجود سنة فقط و في حال وجود قسم و تلميذ و هكذا جميع الاحتمالات يجب ان تكتبها

    ردحذف
  4. ممكن طباعة الكود بار في الفاست ريبورت ارجو الاجابة مستعجل
    0795982569

    ردحذف
  5. اين الجميع ممكن الرد

    ردحذف

جميع الحقوق محفوظة لــ تعلم دلفي بالعربية 2015 ©