إشترك

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


بسم الله الرحمان الرحيم
السلام عليكم و رحمة الله تعالى  و بركاته .درس اليوم هو الجزء الثالث من سلسلة البحث في قواعد البيانات و هذا هو الجزء الأخير من هذه السلسلة و في هذا الدرس سنتعرف على أفضل طريقة للبحث في قواعد البيانات و هي الفلترة هذا مصلح باللغة الإنجليزية و معناه باللغة العربية التصفية أو الترشيح حيث أننا نرى هذا النوع من البحث في كل مكان " في محركات البحث في الهواتف النقالة " لذلك اخترت هذا النوع كأفضل طريقة للبحث و نبدأ على بركة الله
عملية الفرز في الدلفي
يجب أن تقوم بما كنا نفعله دائما ألا و هو ربط قاعدة البيانات أكسس مع الدلفي بالإضافة إلى : إضافة مكون 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;
الآن انتهينا بحمد الله من هذه السلسلة أتمنى أن تكون أفادتكم و ألقاكم في جديد الدروس و المقالات الحصرية فقط على مدونة تعلم دلفي و دمتم في رعاية الله
و السلام عليكم و رحمة الله تعالى و بركاته

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


بسم الله الرحمان الرحيم
السلام عليكم و رحمة الله تعالى و بركاته اليوم في درس اليوم سنتابع سلسلة دروس " البحث في قواعد البيانات " و اليوم سنتحدث  في الجزء الثاني أيضا عن أهم طرق البحث في قواعد البيانات و سنشرح الأكواد بالتفصيل و نبدأ على بركة الله  :
البحث باستخدام المنهج Lookup
 لا يقوم هذا المنهج بتغير مؤشر الفأرة عند إيجاد القيمة المطلوبة بل يحتفظ بها و يمكن استدعائها متى دعت الحاجة
مثال : قم بإضافة المكونات التالية adotable1 / datasource1 /adoconnection1 / dbgrid1/edit1 / button1   و بعدها قم بربط قاعدة البيانات كما شرحنا في درس سابق و الآن قم بكتابة الكود التالي في حدث onclic  للزر button1  
var LookupResult : Variant;
begin
lookupResult := adotable1.Lookup('N°',strtoint(edit1.Text ),'nom;prénom');
if Not VarIsnull( lookupResult) then
Showmessage(vartostr(lookupresult[0]) + '   ' + vartostr(lookupresult[1]));

شرح الكود :
  ·        أولا قمنا بالتصريح بالمتغير  LookupResult من النوع Variant
  ·        و بعدها قمنا بجعل قيمة المتغير تساوي قيمة البحث المطلوبة . 
  ·         و في هذا الكود يقوم المنهج Lookup بالبحث في adotable1 عن قيمة في حقل الرقم  N° " الرقم هو حقل من الجدول و هو الحقل "
  ·        و قيمة البحث هي النص الموجودة في edit1 
  ·         و قمنا بكتابة التابع strtoint لتحويل ما يوجد في الأداة من نص إلى رقم
  ·         أما الحقلان 'nom;prénom' فهما الحقلان اللذان سيظهر ما بداخلهما يعني إذا كان هناك خمسة أشخاص في الجدول و قمنا بالبحث عن صاحب الرقم 3 فلن يظهر لنا الرقم 3 بل سيظهر ما يقابله أي اسم و لقب الشخص في حالتنا هذه علمنا أنه يمكن تغير الحقلين 
  ·        و بعدها استخدمنا الجملة الشرطية if  not …then
  ·        و استخدمنا التابع VarIsnull لمعرفة هل المتحول يحتوي على قيمة أو لا
  ·        و إذا وجد القيمة ستظهر لنا في رسالة تحتوي على nom  و هو ذو القيمة 0  و prénom  ذو القيمة 1 
  ·        و استخدمنا أيضا التابع vartostr الذي يحول القيمة Variant إلى نص 
  ·        و أما ما يوجد بين هذين القيمتين  nom    و prénom  في الرسالة هو فراغ + '   ' +
·        الآن هذا هو البرنامج
 1-    صورة النموذج الأول  أثناء التصميم

 2-    صورة البرنامج أثناء التنفيذ

·        و لكن ماذا لو كنت تريد البحث عن الشخص عن طريق لقبه ...قم ببعض التغيرات على الكود السابق ليصبح هكذا
var LookupResult : Variant;
begin
lookupResult := adotable1.Lookup('nom',(edit1.Text ),'n°;prénom');
if Not VarIsnull( lookupResult) then
Showmessage(vartostr(lookupresult[0]) + '   ' + vartostr(lookupresult[1]));

قمنا بحذف التابع strtoint لأنه يحول القيمة من نص إلى رقم و نحن في هذه المرة نريد البحث عن نص لذلك استغنينا عنه و قمنا بتغير أسماء الحقول و في هذا المثال سنكتب لقب الشخص و سيظهر لنا رقمه و اسمه في الرسالة كما تبين الصورة

·        يمكن البحث في حقلين من نفس الجدول باستخدام الكود التالي :
var LookupResult : Variant;
begin
lookupResult := adotable1.Lookup('N°;prénom',VarArrayof
; ([strtoint(edit1.Text),Edit2.text]),'nom;prénom')
if Not VarIsnull( lookupResult) then
Showmessage(vartostr(lookupresult[0])+ '   ' + vartostr(lookupresult[1]));
و هذه هي صورة البرنامج بعد تطبيق الكود عليه و البحث فيه :

ألقاكم في الجزء الثالث من سلسلة " البحث في قواعد البيانات " في الدرس القادم بإذن الله
و السلام عليكم و رحمة الله تعالى و بركاته
  

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


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

البحث باستخدام المنهج locate  
إبداء مشروع جديد و قم بربط قاعدة البيانات أكسس مع الدلفي و بعدها أضف  مكون edit1  للنموذج لكتابة الاسم الذي نريد البحث عنه و بعدها قم بكتابة الأمر التالي في حدث التغير الخاص ب :
adoTable1.Locate('prénom',Edit1.Text , [])
شرح الكود :
Adotable1  : هو الجدول الذي نريد البحث فيه ' اطلع على الموضوعالسابق لمعرفة المزيد'
Locate :  هذا هو المنهج الذي استعملناه في البحث داخل قاعدة البيانات و الذي سنشرحه الآن
Prénom  : هو اسم الحقل الذي سنبحث فيه في قاعدة البيانات و يمكن تغيره إلى اسم حقلكم
Edit1.text : هذا هو النص الذي سنبحث عنه وهو النص الموجودة في الأداة و يمكن استبداله
[]  : هنا سنضع خيارات البحث في قاعدة البيانات  و التي سنتطرق إليها بعد لحظات   
الآن قم بتجربة البرنامج و أكتب اسم ما أو قيمة ما موجودة في الحقل الذي سنبحث فيه و هو في حالتنا prénom  و يمكن تغيره إلى الحقل الموجود في قاعدة البيانات الخاصة بك و لن يتحرك مؤشر الفأرة من مكانه إلى إذا كانت القيمة الموجودة في الأداة هي نفسها الموجودة في قاعدة البيانات و إذا كنت تريد أن يتغير مكان مؤشر الفأرة عندما تكون الأحرف الأولى فقط متشابه فتابع معي :
خيار loPartialKey : يسمح لك هذا الخيار بالبحث عن جزء من الكلمة يعني إذا أردت البحث عن احمد تكتب " اح" و سيذهب مؤشر الفأرة نحوه لكن إذا كان هناك أحد إسمه يبدأ ب " اح " و هو قبل احمد فلن يتوجه المؤشر نحو احمد و لتجربة الخير عليك بإضافته إلى مابين  []  في الكود السابق هكذا :
adoTable1.Locate('prénom',Edit1.Text , [loPartialKey])
خيار loCaseInsensitive : هذا الخيار لعدم التميز بين الأحرف الكبيرة و الصغيرة " بالغة الأجنبية فقط " مثلا أضف إلى قاعدة البيانات اسمين باللغة الفرنسية mohammed  و Mohammed  و إذا كان Mohammed  هو الأقل في الترتيب فسيكون هو من يشير إليه المؤشر و لكن إذا كنت تريد البحث في حقلين من نفس قاعدة البيانات " نفس الجدول " تابع معي :
البحث باستخدام منهج  locate  في حقلين أو أكثر : يعتبر هذا الأمر مهما جدا حيث أن هناك جداول تحتوي على عدد كبير "مثلا "من المرضى الذين يحملون نفس الاسم و ربما أيضا نفس اللقب لذلك يصعب التفرقة بين المرضى و لكن لكل مريض ما يميزه  "مثلا" رقم هاتف’مدينة جاء منها ’’ لذلك فإن خاصية البحث في حقلين تكون مهمة جدا و للقيام بالبحث في حقلين ما عليك بتغير الكود السابق إلى :
adotable1.Locate('pname;Nationalty',vararrayof([ edit1.Text,Edit2.text]),[])
 ملاحظة : استعملنا التابع VarArrayOf للفصل بين القيم فقط
نلقاكم في التدوينة التالية و في الجزء التالي باستخدام أساليب جديدة و سنتعلم في الجزء الثالث أفضل أنواع البحث و هو البحث بالتصفية ' الفلترة '

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



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