إشترك

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


مرحبا بجميع متابعي الموقع درس اليوم كتابي 
حيث سنشرح لكم اجراء بسيط جدا سيسهل عليكم عملية التصفية حيث عندما تريد التصفية في اي مكون 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 اي نستخدمها في الباراماتر مباشرة و هذا الاخير كله من اجل التأكد من ان الداتا سات موجود ثم التوجه للشروط السابقة
جميع الحقوق محفوظة لــ تعلم دلفي بالعربية 2015 ©