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

عملية البحث في قواعد البيانات

مغلق
بدأه عوف في 23 فبراير 2003 · 13 رد · 2,692 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اريد معرفة كيفية البحث في قواعد البيانات فلو كان لدى كائن DBGrid1 مثلا

يحتوي علي اسماء ورواتب موظفين فما اريده هو عن طريق زر و edit البحث

عن موظف ما او راتب ما بحيث اكتب في الاداة edit اسم الموظف مثلا وبعد

الضغط علي الزر يتم ظهور اسم الموظف علي الكائن DBGrid1 ومعلومات عنه

ومثال ايضا علي اداتين edit و زر لاظهار الموظفين ذوى الرواتب المحصورة بين

ما ساضعه بالاداتين وشكرا للجميع.

#2

اخي الكريم

عملية البحث في الدلفي تخلتف عما هو موجود في الاكسس !

على العموم افضل طريقة للبحث هي استخدام عبارات الـ SQL

وكمثال على ذلك

SELECT * FROM MyTable 
WHERE MyField = 2000

وايضا توجد حلول كثيرة لعملية البحث قد تمت مناقشتها من قبل الاخوة الاعضاء ، ويمكنك استخدام خاصية البحث في المنتدى ، وستجد مبتغاك بان الله

ولك تحياتي

#3

السلام عليكم

بالنسبة للسؤالك الثاني

Table1.Filtered := True;

Table1.Filter := 'Salary>='+Chr(39)+Edit1.Text+Chr(39)+'And Salary<='+Chr(39)+Edit2.Text+Chr(39);

ربما يمكن ان تجد عملية اسهل عند احد خبراء الدلفي في هذا المنتدى

ولكنها الطريقة الوحيدة التي اعرفها ;)

تحياتي

محمد ربيع

#4

procedure TSearchForm.Button1Click(Sender: TObject);

begin

Query1.SQL.Clear;

Query1.SQL.Add(' select * from table1');

case RadioGroup1.ItemIndex of

0: Query1.SQL.Add(' where MembershipNo = ' + QuotedStr(edit1.Text));

1: Query1.SQL.Add(' where FirstName like "'+ edit1.text+'%"');

2: Query1.SQL.Add(' Where LastName like "'+ edit1.text+'%"');

3: Query1.SQL.Add(' where IDNO = ' + QuotedStr(edit1.Text));

4: Query1.SQL.Add(' where PaidFeesDate between ' + QuotedStr(maskedit1.Text)

+ ' and ' + QuotedStr(Maskedit2.Text));

end;

Query1.Open;

end;

end.

#5

شكرا للجميع

لقد استخدمت بعض الاكواد من هنا ومن المنتدى وقد نجحت بالاشارة على

اسم الموظف وفشلت في استخدام الاكواد والطرق الاخرى ولكنني اريد

الاستفسار عن عملية الترشيح فبعد كتابة اسم الموظف في edit وضغط الزر

يظهر هذا الموظف فقط في ال DBGrid1 علما انني استخدم ADOTable1

وشكرا مره اخرى

#6

استخدم التابع البسيط التالي

Table1.Locate('Name','Ali',[loCaseInsensitive])=true then

حيث البارامتر الأول هو اسم الحقل

الثاني هو القيمة التي تريد البحث عنها

الثالث هو بارامتر لتحديد حالة المفاتيح مثلا التدقيق على حالة الأحرف الكبيرة أو لا

#7

استخدم التابع البسيط التالي

Table1.Locate('Name','Ali',[loCaseInsensitive])=true then

حيث البارامتر الأول هو اسم الحقل

الثاني هو القيمة التي تريد البحث عنها

الثالث هو بارامتر لتحديد حالة المفاتيح مثلا التدقيق على حالة الأحرف الكبيرة أو لا

#8

الاخ ابوديلفي طبقت الكود الذى كتبتة فظهر لى الخطأ

[Error] Unit1.pas(100): Left side cannot be assigned to

شكرا جزيلا لتعاونك

اما بالنسبة لاستفساري الاول فلقد وجدت الاجابة وهي الكود

AdoTable1.Filter:='name='''+edit1.text+'''';

ADOTable1.Filtered:=True ;

وما ابحث عنه الان هو

1) اجابة السؤال الثاني

2) ترشيح عدة موظفين لهم نفس الاسم ولكن اسم الاب مختلف

بمعنى آخر عندما اكتب في edit1 محمد وضغط علي الزر يظهر في

الجدول DBGrid1 محمد حسن و محمد علي و محمد احمد مثلا

#9

1: Query1.SQL.Add(' where FirstName like "'+ edit1.text+'%"');

2: Query1.SQL.Add(' Where LastName like "'+ edit1.text+'%"');

3:

#10

الأخ الحبيب إن عملية البحث في قواعد البيانات في الدلفي هي ناحية من نواحي القوة

وتأخذ عدة أشكال ويبقى لك حرية الاختيار في الطريقة التي تناسب وضعك

1_المنهجية locate وهي منهجية معرف عنها في الدلفي ويتم البحث فيها من خلا الملف db

وفي هذه المنهجية إلى أول سجل في الجدول يطابق القيمة التي تبحث عنها

2_المنهجية find key وتستعمل ملف الفهرسة من النمط px وهي في الحيقة أسرع من سابقتها

المنهجية lookup

وهي على غرار المنهجية locate تبحث عن السجل الأول الذي يوافق معيار البحث دون الوصول إليه

وإن أردت أي مثال عن المنهجيات السابقة أنا جاهز لكنني لاأعمل على الaccsess بل على paradox

بإمكاني إرفاق لك أمثلة على برادوكس إذا أردت

(f)

#11

إذا سمحت أخي رضــــــــــــــــــــــــــا......

أرفق أمثلة ....عند وجود وقت ل;)فراغك.....

أخــــــوك...:cool:

#12

dbdemous

كما استعملت قاعدة البيانات

customer table

حسنا سنبد ب locate

Var LocateSuccess : Boolean;
    SearchOptions : TLocateOptions;
begin
CustomerTable.DisableControls; 
 SearchOptions := [loPartialKey];//نحدد خيار البحث ا(help)
 LocateSuccess := CustomerTable.Locate('custno', EditCustNo.text, SearchOptions);
 CustomerTable.EnableControls;

كما ترى أن custno هو الحقل الذي يحوي على قيمة الرقم التسلسلي

طبعا بإمكانك استبداله بالحقل الذي تريد من قاعدة البيانات

بالنسبة لlookup

أنظر كيف أننا حددنا الحقل الذي يجب أن يظهر في الlabel

وستلاحظ من خلال المثال كيف أن المؤشر لاينتقل إلى الحقل المطلوب وهذا مفيد عندما يكون لليك عدد هائل من الحقول

with CustomerTable do

Searchresult.caption := Lookup('custno', EditCustNo.text, 'Company'

);

طبعا لاتنسى disablecontrol قبل عملية البحث

والعكس بعدها

وهو إجراء مهم جد من شأنه تسريع عملية البحث حيث أنه يوقف العمليات الأخرى على الtable

والان نأتي إلى find key وهي أسرع المنهجيات على الإطلاق كما سبق وذكرت

وعليك من خلال الخاصية IndexfieldName

أن تحدد الحقل الذي تريد إتمام العملية به

وأسف على للفلسفة الزائدة لكن الموضوع متشعب

هكذا هي الدلفي دائما قوية في كل شيئ

searchlocatlookup.zip

#13

شكرا للجميع

#14

لديك العبارة findnirst قم بإستخدامها وسوف تصل لما تريده

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

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