الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن عملية البحث

مغلق
بدأه فادي لطف في 4 يونيو 2002 · 4 رد · 906 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

صنعت برنامج صغير يقوم بعملية بحث عن سجل معين ولكن صادفتني مشكلتين وهما :

1- كيف يمكن أن أبحث بشكل غير مطابق (أي إذا كان الاسم الذي أبحث عنه يختلف في بعض الأحرف )

2- كيف يمكن أن أضع نتائج البحث في DBGride

ملاحظة :

علما بأني أستخدم الـ Table وأستخدم في عملية البحث الدالة Locate

#2

السلام عليكم

أخي العزيز فادي

1. بالنسبة للسؤال الاول يمكنك استخدام احد الخيارات الخاصة بمثود Locate وهي loPartialKey وبذلك يمكنك البحث ببعض الأحرف من الاسم وليس الاسم كاملا

Table1.Locate('First_name','Moh',[loPartialKey]);

2. أضف DataSource واجعل خاصية Dataset تشير الى الجدول الذي تبحث من خلاله، ثم اضف DBGrid واجعل خاصية DataSource له تشير الى DataSource1 وهكذا سوف ترى المحتويات فيه

هناك بعض الملاحظات على الطرق السابقة

Locate ترجع اول قيمة في الجدول ولذلك ان تشابهت عدة سجلات سوف تحصل على السجل الاول فقط

بالنسبة للبحث بالطريقة السابقةن يجب ان تعطي الدالة الحروف الاولى من الاسم وسوف تبحث عن السجل الذي اول بيانات الحقل به يساوي هذه الحروف اي انك لا تستطيع اعطاءه حروف ينتهي بها اسم ويبحث لك الاسم، فقط الحروف الاولى

ان اردت ارجاع اكثر من سجل في عملية البحث استخدم خاصية Filter

لكن بصفة عامة للحصول عن خيارات البحث بشكل افضل استخدام جمل SQL واستخدام مكون Query بدلا من Table

مع تحياتي

والسلام

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#3

شكرا لك أخي العزيز على سرعة إجابتك ولكن سؤالي :

لو أن الحاسب وجد الاسم الذي أبحث عنه ، أريده أن يضعه لي في DBGrid ثانية مع كل

السجلات الملحقة به فهل يمكن هذا باستخدام ال Table

وإذا كان لايمكن فأرجو أن توضح لي الطريقة باستخدام الـ Query فأنا لاأعرف كيفية التعامل معها

#4

السلام عليكم

اخي العزيز اسف على التأخير وهده محاولة لاجابة :

ان كنت تريد الفلترة فهي كتالي

table1.Filtered:=true;

table1.Filter:='name='''+edit1.text+'*''';

تلاحظ انه عند كتابة اي حرف يتم ترشيحه اي فلترته

في القاعدة وتم عرض النتيجة

اما ان كان الحقل مفهرس فالتعليمت التالية تكفي

table1.FindNearest([edit1.text+'*']);

اما عن وضع النتيجة في dbgrid فتستطيع دلك كما قلت عن طريق

الكويري

تكتب هدا في خاصية sql

select *

from animals.dbf

where name='Boa'

(f)

#5

هذا هو ما أريده شكرا لك

وأعتزر عن تأخري بالإجابة

هذا الموضوع مغلق.

مواضيع مشابهة