![]() |
|
التعليمة setkey و gotokey هل لها بديل على ADOTABLE - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : التعليمة setkey و gotokey هل لها بديل على ADOTABLE (/showthread.php?tid=9269) |
التعليمة setkey و gotokey هل لها بديل على ADOTABLE - Amennay - 27-03-2018 السلام عليكم إخوتي لدي كود لم أفهمه خاصة أني مبتدئ PHP كود : Table4.open ;شكرا لكم على المجهودات التي تقدمونها لنا RE: طلب شرح كود - ferrero - 27-03-2018 استعمل Locate أفضل وأئمن RE: طلب شرح كود - Amennay - 27-03-2018 (27-03-2018, 08:42 PM)ferrero كتب : استعمل Locate أفضل وأئمن RE: طلب شرح كود - ferrero - 27-03-2018 (27-03-2018, 09:28 PM)Amennay كتب :(27-03-2018, 08:42 PM)ferrero كتب : استعمل Locate أفضل وأئمن طرق البحث المفهرسة: EditKey - FindKey - FindNearest - GotoKey - GotoNearest - SetKey SetKey : تقوم بمسح محتويات المخزن المؤقت لمفتاح البحث وتمكين حالة dsSetKey للجدول بالسماح للتطبيق بتحديد معايير جديدة قبل إجراء البحث. GotoKey : البحث عن أول سجل لمجموعة بيانات تطابق تمامًا معايير البحث ويضع المؤشر عليها إذا عثر عليها. بالنسبة لمثالك مثلا: var ref: Integer; ... ref := Table3.FieldByName('ref_prod').AsInteger; With Table4 do Begin SetKey; FieldByName('reference').AsInteger := ref; // GotoKey البحث بواسطة If GotoKey then ... else ... // FindKey البحث بواسطة If FindKey([ref]) then ... else ... // GotoNearest/FindNearest البحث بواسطة FindNearest([ref]); GotoNearest; end; RE: التعليمة setkey و gotokey هل لها بديل على ADOTABLE - عبدالعزيز - 23-03-2020 السلام عليكم بارك الله فيك اريد مثال على قاعدة البيانات ل Locate
RE: التعليمة setkey و gotokey هل لها بديل على ADOTABLE - larbiparadox - 25-03-2020 وعليك السلام شرح الدالة Locate صيغة الدالة : كود : function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; virtual;![]() 1 - الدالة Locate : هذه الدالة تقوم بالبحث في حالة وجود ما تبحث تأخذ قيمة منطقية True و اذا لم تجد تأخذ False و تنقل المؤشر إلى السطر الذي تم ايجاد فيه القيمة ، إذا كانت القيمة مكررة في سطور تأخذك في السطر الاول فقط 2 - KeyFields : إسم الحقل في قاعدة البيانات 3 - KeyValues : القيمة المراد البحث عنها 4 - Options : و هي إختيارية يمكن إستغناء عنها تحتوي على شرطين هما loPartialKey إذا وضعنا هذا الشرط يقوم بالبحث بالتطابق سواء حرف من كلمة أو كلمة من جملة بإختسار بتقريب ، أما الشرط الثاني خاص بالحروف اللاتنية loCaseInsensitive يقوم هذا شرط بالبحث على الحروف سواء كانت كبيرة أوصغيرة 5 - Boolean : في حالة إجاد ما تبحث تأخذ قيمة منطقية True و اذا لم تجد تأخذ False و هذا نظرينا أمثلة : كود : Table1.Locate('Name',Edit1.Text,[])البحث بكلمة أو جزء من كلمة كود : Table1.Locate('Name',Edit1.Text,[loPartialKey])سوى كانت الحروف كبيرة أوصغيرة كود : Table1.Locate('Name',Edit1.Text,[loCaseInsensitive])البحث برقم واسم كود : Table1.Locate('id;Name', VarArrayOf([StrToInt(Edit1.Text), Edit2.Text]),[loCaseInsensitive,loPartialKey])في حالة حقلين أو أكثر هنا إستعملنا VarArrayOf هي عبارة عن مصفوفة تأخذ مجموعة من القيم ، اي الحقل الاول يأخذ القيمة في المصفوفة الاول نفس شيء للثاني الخ .... إستعمل شرط كود : if Table1.Locate('Name',Edit1.Text,[loPartialKey]) = true then
ShowMessage('موجود') else ShowMessage('غير موجود');
end;أما بالنسبة لـ FireDAC فالدالة Locate تطورت كثيرا وأصبحت تسمى LocateEx وتحتوي على أكثر من خيارين و ميزة المهمة إستعمال Expression ![]() الخيارات : ]lxoCaseInsensitive : يتجاهل تطابق حالة الاحرف ]lxoPartialKey: التطابق الجزئي الجديد ]lxoFromCurrent : البحث على السجل الموالي كلما نفذنا الدالة ]lxoBackward : العودة الى السجل الخلفي كما يوجد خياران اخران ]lxoCheckOnly و ]lxoNoFetchAll مثال كود : if not CustTable.LocateEx('COMPANY', 'AMCO', [lxoCaseInsensitive, lxoFromCurrent]) then
ShowMessage('The customer from AMCO company is not found');الدالة LocateEx لكن بإستعمال Expression ![]() مثال كود : if FDQuery1.LocateEx('Price >= 1000 and Price <= 2000', [lxoFromCurrent]) then
ShowMessage('Order is found')
else
ShowMessage('Order is not found');لكن بالنسبة لي أفضل Filter التي نستعملها كثيرا ، لكن مع FireDAC يمكن بالبحث بواسطها دون تطبيق شرط التصفية كمثال سأضع شرط التصفية كود : FDQuery1.Filter := 'Price >= 1000 and Price <= 2000';لان لاخذ المؤشر اول حقل للبحث كود : FDQuery1.FindFirstأخذ المؤشر الى السجل الثاني المبحوث عنه كود : FDQuery1.FindNextاو بواسطة شرط كود : if FDQuery1.FindFirst then
ShowMessage('Found !');
أو
if FDQuery1.FindNext then
ShowMessage('Found !');نفس الشيء بالنسبة FindPrior و FindLast وإذا قمنا بإظهار ما نبحث عنه فقط نطبق التصفية كود : FDQuery1.Filtered := True;بالتوفيق RE: التعليمة setkey و gotokey هل لها بديل على ADOTABLE - larbiparadox - 25-03-2020 # للاضافة البحث بواسطة Filter يعمل ايضا مع ADO وشكرا |