بسم الله الرحمان الرحيم
السلام عليكم و رحمة الله تعالى و
بركاته .درس اليوم هو الجزء الثالث من سلسلة البحث في قواعد البيانات و هذا هو
الجزء الأخير من هذه السلسلة و في هذا الدرس سنتعرف على أفضل طريقة للبحث في قواعد
البيانات و هي الفلترة هذا مصلح باللغة الإنجليزية و معناه باللغة العربية التصفية
أو الترشيح حيث أننا نرى هذا النوع من البحث في كل مكان " في محركات البحث في
الهواتف النقالة " لذلك اخترت هذا النوع كأفضل طريقة للبحث و نبدأ على بركة
الله
عملية الفرز في
الدلفي
|
يجب أن تقوم بما كنا نفعله دائما ألا و هو ربط قاعدة البيانات أكسس مع
الدلفي بالإضافة إلى : إضافة مكون 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;
|
الآن انتهينا بحمد الله من هذه السلسلة أتمنى أن تكون
أفادتكم و ألقاكم في جديد الدروس و المقالات الحصرية فقط على مدونة تعلم دلفي و
دمتم في رعاية الله
و السلام
عليكم و رحمة الله تعالى و بركاته
thanks
ردحذفلا thanks على واجب
حذفاخي رووف هل هناك طريقة لفلترة الاعداد والتوارريخ الان هذا كود خاص بكلمات فقط
ردحذف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;
غير نوع المتغيرات إلى ما تريد وسينجح
حذفاعطنا الكود
حذفmerci mon amis ...........courage ....et en avant
ردحذفشكرا على التشجيع
حذفشكرا سيد رؤوف، لكن السؤال المطروح ماذا لوكانت قاعدة المعطيات بالعربية في مكان Nom نجد الإسم نرجوا إفادتنا وشكرا مرة أخرى
ردحذفنعم هذا ممكن في الإصدارات الجديدة لكن الدلفي 7 لا
حذفهل هناك كود فلترة جدول من قاعدة بيانات فيها عدة جداول ، وبعد الفلترة يوضع هذا الجدول في dbgrid
ردحذفنعم اخي هذه الطريقة هي المشروحة و تطبق على الجدول اين المشكل لديك
حذفانا مظطر لاستخدام الربط fdconnection و كذلك الجدول fdtable و الطريقة لم تعمل معي الا في الربط من نوع adoconnection و adotable ما الحل كي تعملمع الربط الاول و شكرا
ردحذفاخي لدي مجموعة من خانات édit اضافة الى قفل ماهو الكود الذي يمكن وضعه للقفل في حالة onclik لاضهار بيانات اسم الشخص المكتوب في خانة البحث في بقية عناصر ال edit الاخرى
ردحذفاخي الكريم انا استخدم هذه الاكواد في البحث ولكن المشكلة انه لا يبحث عن جزء من الكلمة اي يجب كتابة الرقم كاملا (اقصد من بداية الكلمة)
ردحذفمثلا اذا كان لدي رقم 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;
tel :=quotesStr('*'+Edit1.text+'*')
حذف