إشترك

البحث في قواعد البيانات في الدلفي - الجزء الثالث -


بسم الله الرحمان الرحيم
السلام عليكم و رحمة الله تعالى  و بركاته .درس اليوم هو الجزء الثالث من سلسلة البحث في قواعد البيانات و هذا هو الجزء الأخير من هذه السلسلة و في هذا الدرس سنتعرف على أفضل طريقة للبحث في قواعد البيانات و هي الفلترة هذا مصلح باللغة الإنجليزية و معناه باللغة العربية التصفية أو الترشيح حيث أننا نرى هذا النوع من البحث في كل مكان " في محركات البحث في الهواتف النقالة " لذلك اخترت هذا النوع كأفضل طريقة للبحث و نبدأ على بركة الله
عملية الفرز في الدلفي
يجب أن تقوم بما كنا نفعله دائما ألا و هو ربط قاعدة البيانات أكسس مع الدلفي بالإضافة إلى : إضافة مكون edit  و كتابة الأمر التالي في حدث OnChange  المتعلق بهذا المكون :
var
nom:string;
begin
ADOTable1.Filter := '';
if (Edit1.Text) = '' then exit ;
try
nom    := QuotedStr (Edit1.Text + '*');
if (Edit1.Text <> '')  then
ADOTable1.Filter:= Format('(nom LIKE %s)', [nom])
else
ADOTable1.Filtered := Trim((Edit1.Text)) <> '' ;
except
abort;
end;
end;

 شرح مختصر للكود :
أولا قمنا بتعريف متغير nom  من نوع string  و بعدها بدأ الكود حيث أننا قمنا بجعل خاصية التصفية filter  تساوي نص فارغ و بعدها بدأت جملة الشرط و الشرط هو إذا كان النص في أداة edit1  فارغ سينقذ الأمر التالي حيث بدأ الأمر بجملة try  و هو ينتهي except  و هذه الجملة تقوم بحماية الكود أي لن يحدث الخطأ و الكود الذي بين هذه الجملة ينفذ و الكود المحمي هو المتغير nom  يساوي النص الموجود في الأداة + *  و بعدها تبدأ جملة شرط جديدة و هذه الجملة هي إذا كان  النص أقل أو أكبر من '' يعني فارغة سينقذ الأمر التالي و الذي يحدد لنا كيفية و صيغة  التصفية في الجدول adotable1  و نحن في هذا الكود سنبحث في الحقل nom  و بعدها يأتي الاستثناء الذي يحدث في حال لم يتحقق الشرط السابق و الاستثناء هو  إذا لم تجد أي نتائج مطابقة للبحث أجعل محتوى الجدول فارغ إذا كان هناك على الأقل حرف مكتوب و الآن سيكون شكل البرنامج أثناء التصميم هكذا :




و عند كتابتك للحرف y في الأداة أثناء التنفيذ سيكون البرنامج بالشكل التالي :

الآن سأقدم لكم الكود الذي يمكنكم من البحث في حقلين لكن دون شرح :
أكتب الكود التالي في حدث OnChange  للمكون edit1
var
nom, prénom:string;
begin
ADOTable1.Filter
if (Edit1.Text + edit2.Text) = '' then exit
try
nom    := QuotedStr (Edit1.Text+'*');
prenom := QuotedStr (edit2.Text+'*')
if (Edit1.Text <> '') AND (edit2.Text <> '') then
ADOTable1.Filter:= Format('(nom LIKE %s) and (prénom LIKE %s)', [nom, prénom])
else
if (Edit1.Text <> '') then
ADOTable1.Filter:= Format('(nom LIKE %s)', [nom])
else
ADOTable1.Filter:= Format('(prénom LIKE %s)', [prénom]);
ADOTable1.Filtered := Trim((Edit1.Text + edit2.Text))<>'';
except
abort;
end;
end;
و بعدها أكتب الكود التالي في حدث onEntrer  للمكون edit2
Edit2.OnChange:=edit1.OnChange;
الآن انتهينا بحمد الله من هذه السلسلة أتمنى أن تكون أفادتكم و ألقاكم في جديد الدروس و المقالات الحصرية فقط على مدونة تعلم دلفي و دمتم في رعاية الله
و السلام عليكم و رحمة الله تعالى و بركاته

هناك 15 تعليقًا

  1. اخي رووف هل هناك طريقة لفلترة الاعداد والتوارريخ الان هذا كود خاص بكلمات فقط

    nom, prénom:string;
    begin
    ADOTable1.Filter
    if (Edit1.Text + edit2.Text) = '' then exit
    try
    nom := QuotedStr (Edit1.Text+'*');
    prenom := QuotedStr (edit2.Text+'*')
    if (Edit1.Text <> '') AND (edit2.Text <> '') then
    ADOTable1.Filter:= Format('(nom LIKE %s) and (prénom LIKE %s)', [nom, prénom])
    else
    if (Edit1.Text <> '') then
    ADOTable1.Filter:= Format('(nom LIKE %s)', [nom])
    else
    ADOTable1.Filter:= Format('(prénom LIKE %s)', [prénom]);
    ADOTable1.Filtered := Trim((Edit1.Text + edit2.Text))<>'';
    except
    abort;
    end;
    end;

    ردحذف
    الردود
    1. غير نوع المتغيرات إلى ما تريد وسينجح

      حذف
    2. اعطنا الكود

      حذف
  2. merci mon amis ...........courage ....et en avant

    ردحذف
  3. شكرا سيد رؤوف، لكن السؤال المطروح ماذا لوكانت قاعدة المعطيات بالعربية في مكان Nom نجد الإسم نرجوا إفادتنا وشكرا مرة أخرى

    ردحذف
    الردود
    1. نعم هذا ممكن في الإصدارات الجديدة لكن الدلفي 7 لا

      حذف
  4. هل هناك كود فلترة جدول من قاعدة بيانات فيها عدة جداول ، وبعد الفلترة يوضع هذا الجدول في dbgrid

    ردحذف
    الردود
    1. نعم اخي هذه الطريقة هي المشروحة و تطبق على الجدول اين المشكل لديك

      حذف
  5. انا مظطر لاستخدام الربط fdconnection و كذلك الجدول fdtable و الطريقة لم تعمل معي الا في الربط من نوع adoconnection و adotable ما الحل كي تعملمع الربط الاول و شكرا

    ردحذف
  6. اخي لدي مجموعة من خانات édit اضافة الى قفل ماهو الكود الذي يمكن وضعه للقفل في حالة onclik لاضهار بيانات اسم الشخص المكتوب في خانة البحث في بقية عناصر ال edit الاخرى

    ردحذف
  7. اخي الكريم انا استخدم هذه الاكواد في البحث ولكن المشكلة انه لا يبحث عن جزء من الكلمة اي يجب كتابة الرقم كاملا (اقصد من بداية الكلمة)
    مثلا اذا كان لدي رقم 123456 وعند البحث كتبت 23456 لن يعيد نتيجة للبحث
    ارجو المساعدة
    الكود هو
    var
    fullname,lastname,father,tel:string;
    begin
    ADODataSet1.Filtered:=true;
    ADODataSet1.Filter := '';
    if (Edit1.Text) = '' then exit ;
    try
    tel := QuotedStr (Edit1.Text + '*');
    fullname := QuotedStr (Edit1.Text + '*');
    lastname := QuotedStr (Edit1.Text + '*');
    father := QuotedStr (Edit1.Text + '*');
    if (Edit1.Text <> '') then
    ADODataSet1.Filter:= Format('(tel LIKE %s)or (fullname LIKE %s) or (lastname LIKE %s) or (father LIKE %s)', [tel,fullname,lastname,father])
    else
    ADODataSet1.Filtered := Trim((Edit1.Text)) <> '' ;
    except
    abort;
    end;

    end;

    ردحذف

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