السلام عليكم و رحمة الله و بركاته
كيف يتم التعامل مع امر فلتر بالحرف بحيث تتم عملية الفلتر جزئيا حسب القيم التي يتم ادخالها ؟؟ و كيف يستخدم امر filteroption ؟؟
و شكرا
السلام عليكم و رحمة الله و بركاته
كيف يتم التعامل مع امر فلتر بالحرف بحيث تتم عملية الفلتر جزئيا حسب القيم التي يتم ادخالها ؟؟ و كيف يستخدم امر filteroption ؟؟
و شكرا
يمكن أن أدلك كيف الفلترة عن طريق كل حرف على حدى
لكن هل لك أن توضح قليلا أخي
صباح الخير
بعد التحية
اشكرك اخ reda على الرد ,, اقصد طريقة الفلتر عند التعامل مع adotable و ليس مع Table عادي فعند عمل فلتر على جدول عادي بالحرف نضيف * في نهاية كل حرف او رقم يدخل المستخدم و نقوم بفلتر على الجدول للحصول على كل الاسماء التي تبدأ بهذا الحرف اما عند استخدام adotable فهذه الطريقة لم تصلح .
و بالنسبة للجدول العادي فيوجد مثال مع الدلفي لامر الفلتر بالجزء اما مع ado لم اعرف كيف استخدام الفلتر الجزئي ؟؟ يوجد دالة ثانية و هي locate الا انها تقف فقط على اقرب سجل اما انا فاريد عمل فلتر ؟؟
في انتظار الرد
في الحقيقة أني لم أتعامل مسبقا مع ado
لكن سأبحث لك
السلام عليكم ورحمة الله وبركاته
لفلترة الجدول ( ترشيح الجدول ) تستخدم الامر FILTER أما للبحث عن سجل معين تستخدم الامر locate أو findkey وغيرها
الفلترة مثل
ADOTable1.Filtered := true ;
ADOTable1.Filter:='name='''+edit1.text+'%''';
لكن مشكلة الأمر filter لا يعمل مع الجداول الفرعية لذلك أنصحك بأن تستخدم عبارات sql في ADOQuery1
له مميزات كثيرة جدا منها :
1- سرعة عالية في استخراج النتائج .
2- تستطيع أن تفلتر أكثر من حقل في أكثر من جدول .
3- تسطيع أن تظهر نتائج الفلترة على التقرير .
إذا أردت استخدامه فاخبرني وسأشرح لك طريقته .
شكرا على الرد اخ admin و ساجرب اقتراحك و ارد عليك
جزاك الله كل خير
اخ admin جربت امر فلتر و لكنه لم يفي بالغرض فارجوا ان توضح لي طريقة استخدام امر select مع sql في ADOQuery1
و لك جزيل الشكر
اعتذر عن التأخير سأحاول أن أضع شرح مبسط لها خلال هذا اليوم إن شاءالله
و انا في الانتظار و شكرا
السلام عليكم
1- تضع ADOConnection1 وتربطه بقاعدة البيانات بالضغط عليه مرتين ثم اختيار build ثم تختار microsoft jet 4 إذا كانات القاعدة لديك أكسس 2000 أو xp ثم تدخل اسم القاعدة التي أنشأتها .
2- تضع ADOTable1 وتربطه بـ ADOConnection1
3-تضع ADOQuery1 وتربطه أيضا بـ ADOConnection1
4- تضع DataSource1 وتربطه بـ ADOQuery1 ليس الجدول ADOTable1
5- تضع DBGrid1 وتربطه DataSource1
6- تضع Button1 على الفورم .
7- تضع edit1 على الفورم .
نصع في الجدول الحقول التالية name , id
لللفتلرة نستخدم الكود التالي
procedure TForm1.Button1Click(Sender: TObject);
begin
1.ADOQuery1.close ;
2.ADOQuery1.SQL.Clear ;
3.ADOQuery1.SQL.Add('select id,name from table1 ') ;
4.ADOQuery1.SQL.Add('Where id = ' + edit1.Text);
5.ADOQuery1.SQL.Add('order by id') ;
6.ADOQuery1.Open ;
end;
السطر الأول يغلق الاستفسار
السطر الثاني يحذف البيانات القديمة من الاستفسار
السطر الثالث يختار الاستفسار الحقول المراد البحث فيها وهذه الحقول تظهر أثناء عرض النتائج ومن الممكن اختيار اكثر من حقل من أكثر من جدول .
السطر الرابع يقوم بترشيح جميع البانات التي قيمة الحقل id فيها تساوي البيانات المدخلة في edit1
السطر الخامس يرتب البيانات باستخدام الحقل id
السطر السادس يفتح الاستفسار للعمل .
وقد أرفقت مثال يوضح ذلك .
مع تمنياتي للجميع بالتوفيق
من الممكن وجود أخطاء في الشرح أتمنى أن يصوبها لي ولمن سيستقيد منه .
إذا أردت إظهار كل الحقول التي تحتوي على حرف معين أو كلمة معين ضع الامر التالي بدلا من السطر الرابع
ADOQuery1.SQL.Add('Where ID LIKE ' + '"%'+Edit1.Text+'%"');
عذرا
هذا المثال المرفق
شكرا جزيلا اخ admin فهذا ما اريده تحديداً
جزاك الله كل خير
السلام عليكم و رحمة الله و بركاته
اخي admin اشكرك جدا على هذا الشرح و لكن للاسف بعد ان جربته بشكل عملي ليس هذا هو المطلوب فامر LIKE ياتي بجميع القيم التي تحتوي على الحرف او الرقم الذ يتم كتابته في ال edit
و لكن يهمني الترتيب , فمثلا اذا كان الجدول يحتوي على هذه الارقام
123
1258
25361
23519
555
444
و كتبت في ال edit هذه القيمة 1 فانه يرجع لي جميع القيم المحتوية على 1 فيكون الناتج
123
1258
25361
23519
و لكني لا اريد هذا فانا اريده ان يرجع فقط التي تبدأ بال 1 بمعني انه يهمني الترتيب فيجب ان يرجع
123
1258
و لتوضيح اكثر فانا عندي مجموعة اسماء و اريد عمل فلترة للتي تبدأ بحرف الالف و ليس لجميع الاسماء المحتوية على هذا الحرف ؟؟ فهل يوجد حل ؟؟
اعتذر لاني اتعبتك معي .
و شكرا
السلام عليكم
نعم تستطيع واستخدم الكود التالي
ADOQuery1.SQL.Add('Where ID LIKE ' + '"'+Edit1.Text+'%"');
الشرح :
عند إلغاء % الموضوعة قبل EDIT1.TEXT سيبحث في الجدول بكل المحارف التي تبدأ بـ EDIT1.TEXT .
أما إذا الغيت % الموضوعة بعد EDIT1.TEXT سيبحث في الجدول بكل المحارف التي تنتهي بـ EDIT1.TEXT .
أتمنى أن يكون واضحا .
اشكرك جدا اخ admin و الشرح واضح تماماً و سوف اجرب هذه الطريقة و ارد عليك
و بارك الله فيك
السلام عليكم ... شكراً على امر الفلترة ولكن عندما يكون جدولين مربوطين بعلاقة MASTER/DETIALS فهل يمكن ان نربط استعلامين بهذه العلاقة كون اوامر الاستعلام كثيرة وممتعة أتمنى ان احد يحل هذه المشكلة .. مع الشكر الجزيل
with ADOQurey1 do
begin
Filtered := false;
Filter := ' tcredit > ' + currtostr(10);
Filtered := True;
end;
حيث Tcredit field ascurrency and if Integer then
Filter := ' tcredit > ' + inttostr(10);
also if you want 10 to be var it can be currtostr(strtocurr(edit1.text);
you can change > to = or < or <>
لازم يكون هناك فرغات بين علامتى الاقتباس والبيانات
'tcredit >' خطا
' tcredit > ' صح
اخى frh
يعتقد البعض أن استفسارك حول فلترة حقول string باستخدام حرف واحد أنه بسيط ولكن أعتقد أنه يحتاج الى ذوى الخبرة للرد عليه .
وحسب مافهمت من سؤالك أنك تبحث عن كيفية حصر جميع الاسماء التى تبدا بحرف س فى قائمة الاسماء مثلا .
ولو تصفحت الموضوعات سوف تجد نفس السؤال مطروح من طرفى ولكن باسلوب أخر ولكن يتظمن نفس الاستفسار حيث لازلت لااعرف كيفية الفلتره بدون ادخال الحقل string كاملا.
اننى مستمر فى البحث واذا وصلت الى طريقة فسوف أخبرك وكذلك أنت اذا وصلت الى الحل نرجو ابلاغنا
عنوان موضعى هو كبفبة استخدام الامر format ............الخ