مشاهدة النسخة كاملة : المساعدة في عملية البحث بثلاث حقول
السلام عليكم ورحمة الله
:dj_17:
ارجوا المساعدة في الموضوع الموجود بهذا الرابط
والمتعلق بطلب مساعدة في كود للبحث في قواعد البيانات
الموضوع بالتفصيل في المشاركة رقم 25 الموجودة بالرابط
http://www.djelfa.info/vb/showthread.php?t=26656&page=2
كيف تبحث في أكثر من حقل بإستخدام تعليمة Locate :
يمكن البحث بإستخدام تعليمة Locate في أكثر من حقل بحيث نبحث عن الموظف حسب حقل الإسم الأول و حقل الإسم الثاني . فإذا كان حقل الإسم الأول F_name والإسم الثاني L_name والقيم في Edit1 و Edit2 على التوالي أمكننا ببساطة كتابة الشفرة التالية :
SQL
if not ClientDataSet1.Locate( 'F_Name;L_Name',vararrayof([edit1.Text,Edit2.Text]),[]) then
showmessage( 'Filed Not Found');
ويتم ذلك بفصل الحقول المراد البحث فيها بفاصلة منقوطة , وفصل القيم بإستخدام الدالة VarArrayOf
كيف تبحث في أكثر من حقل بإستخدام تعليمة Locate :
يمكن البحث بإستخدام تعليمة Locate في أكثر من حقل بحيث نبحث عن الموظف حسب حقل الإسم الأول و حقل الإسم الثاني . فإذا كان حقل الإسم الأول F_name والإسم الثاني L_name والقيم في Edit1 و Edit2 على التوالي أمكننا ببساطة كتابة الشفرة التالية :
SQL
if not ClientDataSet1.Locate( 'F_Name;L_Name',vararrayof([edit1.Text,Edit2.Text]),[]) then
showmessage( 'Filed Not Found');
ويتم ذلك بفصل الحقول المراد البحث فيها بفاصلة منقوطة , وفصل القيم بإستخدام الدالة VarArrayOf
جزاكم الله عنا كل خير
وشكرًا على المساعدة
لكن ارجو وضع الكود بالكامل لو سمحت لأنني لم أتعامل قط بSQL
ارجو وضع الكود كاملاً من فضلك والبحث يتم بما هو موضح في هذا السطر
if not Query1.Locate( 'Chapitre;Groupe;Classe',vararrayof([edit1.Text,Edit2.Text,Edit3.Text]),[]) then
showmessage( 'Filed Not Found');
جزاكم الله عنا كل خير
وشكرًا على المساعدة
لكن ارجو وضع الكود بالكامل لو سمحت لأنني لم أتعامل قط بSQL
ارجو وضع الكود كاملاً من فضلك والبحث يتم بما هو موضح في هذا السطر
if not Query1.Locate( 'Chapitre;Groupe;Classe',vararrayof([edit1.Text,Edit2.Text,Edit3.Text]),[]) then
showmessage( 'Filed Not Found');
اذا كنت تستعمل قاعدة بيانات واحدة لماذا تستعمل query
استعمل dataset1
مثل
procedure TForm1.Button1Click(Sender: TObject);
begin
if not ABSdos1.Locate( 'nom;prenom;boitedos',vararrayof([edit1.Text,Edit2.Text,Edit3.Text]),[]) then
showmessage( 'Filed Not Found');
end;
كما يمكنك ان تبحث عن تطابق جزئي بإستخدام تعليمة Locate :
مثلا يمكنك البحث حسب بداية كلمة ما , حيث يكفي كتابة الأحرف الأولى من الإسم لإظهار نتيجة السجل . مثال يكفي كتابة "moh" لإظهار سجل اسم"mohamed"
if not DataSet1.Locate('F_Name',edit3.Text,[loPartialKey]) then
showmessage('Filed Not Found
اذا كنت تستعمل قاعدة بيانات واحدة لماذا تستعمل query
استعمل dataset1
مثل
procedure TForm1.Button1Click(Sender: TObject);
begin
if not ABSdos1.Locate( 'nom;prenom;boitedos',vararrayof([edit1.Text,Edit2.Text,Edit3.Text]),[]) then
showmessage( 'Filed Not Found');
end;
شكرًا جزيلاً لقد وضعت الكود كما اعطيتني اياه
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if not Table1.Locate( 'Chapitre;Groupe;Classe',vararrayof([edit1.Text,Edit2.Text,Edit3.Text]),[]) then
showmessage( 'Filed Not Found');
end;
لكن المقصود ليس انتقال المؤشر الى السجل
بل اقصد إظهار كل التسجيلات التي تحمل نفس القيم بمعنى
لنفرض انني وضعت في Edit1 = 01 و Edit2 = 01 و Edit3 =01
فاثناء البحث وجد أربع زبائن يحملون نفس القيم كهذا المثال :
الزبون المسمى محمد يحمل رقم الباب 01 ورقم الفصل 01 ورقم الصنف 01
الزبون المسمى علي يحمل رقم الباب 01 ورقم الفصل 01 ورقم الصنف 01
الزبون المسمى كرم يحمل رقم الباب 01 ورقم الفصل 01 ورقم الصنف 01
الزبون المسمى اسماعيل يحمل رقم الباب 01 ورقم الفصل 01 ورقم الصنف 01
إذا المطلوب هو إظهار هذه الزبائن الأربعة فقط في DBGrid وإخفاء الباقون
وعندما انتهي من الهدف يجب إظهار كل السجلات
هذا ما قصدته وجزاكم الله عنا كل خير
الحل هو:
procedure TForm1.Button1Click(Sender: TObject);
var s1,s2,s3:string;
begin
table1.open;
s1:='Code='+quotedstr(edit1.text);
s2:='Nom='+quotedstr(edit2.text);
s3:='Prenom='+quotedstr(edit3.text);
table1.filter:=trim(s1)+' and '+ trim(s2)+' and '+trim(s3);
table1.filtered:=true;
if table1.Eof then
begin
Showmessagebox('Not Fond');
edit1.SetFocus ;
exit;
end;
programmeur
2009-09-28, 15:10
اخي الكريم اذا كنت تريد استعمال البحث في قواعد البيانات فلا تستعمل تعليمات البرمجة بل استعمل تعليمات sql
أما بالنسبة للاخ بورملة فتلك الكتابة ليست ب sql
عندما نستعمل sql تبقى الامور سهلة وبسيطة لكن يجب ان تحسن التعامل مع تعليماتها
اخي كلنا يعرف sgbd ويعرف مادوره
عندما تقوم بكتابة تعليمة sql التالي
select * from table1ف sgbd يقوم بقراءة كل السطور في قاعدة البيانات
بعد ذلك يضعها في قائمة la liste في la ram
وبعد ذلك تستطيع قرائتها عن طريق query أو dataset
او غيرها من ادوات التي تتعامل مع قواعد البيانات
اما بخصوص مشكلتك
اذهب الى dataset
ثم conection
وقم بربط برنامجك مع قواعد البيانات واذا لم تكن تحسن الربط هناك دروس في الانترنت تساعدك على الربط وذلك حسب قواعد البياتاتك
(oracle . access . mysql) وغيرها
بعد ذلك اذهب الى command text
وقم بكتابة مايلي
select * from table where (:a=chapitre and :b=groupe and :c=classe);table هي اسم الجدول الموجود في قاعدة بياناتك
; :a :b :c
هي عبارة عن parametre
تحمل قيم اذهب الى fielddefs
او parametre
ستجد a, b,c اللتان كتبتهاما في la requette
بالاضافة الى القيم التي تريد اخراجها بتعليمة select
ومن اجل نقل اي كتابة الى هده القيم
استعمل مايلي
dataset.parametre.parbyname("a").value=Edite1->Text
هدا لايعني ان كلام الاخوة خطأ انه صحيح لكن اعلم لوكانت عندك قاعدة بيانات كبيرة ستجد مشاكل كثيرة
منها complixite
ارجو
انني اعطيتك فكرة حول ماتريد فهدا الامر صعب لكنك ستتعلم شيئ احترافي بدلا من كتابة خوارزمية
وتقوم بمقارنة كل tuple بمفرده فتخيل ان قاعدة البيانات ستكون كبيرة جدا
فهنا سيظهر لك المشكل وحله يكون بطريقة sql واترك sgbd هو الذي يقوم بالبحث بدلا عنك
فلما تم تصميمه ونحن لانستعمله ؟؟؟؟
فكلام الاخوة ليس ب sql بل هو استعمال مركبات لها علاقة بقواعد البيانات
واذا اردت ان تتعلم sql أكتب في قوقل langage sql
و اذا أردت ان تربطها ببرنامجك هناك امور اخرى يجب ان تستعملها كمكتبة ado
bde . interbase
وغيرها
وشكرا لك اخي
programmeur
2009-09-28, 15:16
وانصحك اخي ان ترتاد على منتديات الاعلام الالي الاجنبية لان مستواها عالي وانا شخصيا تعلمت هدا الامر بفضل الله وبفضلها و تانيك كيما نقولو حنا الجزائريين بفضل الخريب والتخنتيش
وانصحك اخي ان ترتاد على منتديات الاعلام الالي الاجنبية لان مستواها عالي وانا شخصيا تعلمت هدا الامر بفضل الله وبفضلها و تانيك كيما نقولو حنا الجزائريين بفضل الخريب والتخنتيش
جزاكم الله عنا كل خير
ولكنك جزائري محط فعلا
ولولا التخربيش والتخنتيش ما وصلنا
على خطرش اولاد الاحرام ماخلاوش لولاد الحلال حتى شيء
عاش خريبنا وتخنتيشنا يا ولد بلادي
تحي الجزائر والجزائريين اصحاب التخنتيش والتخربيش
صحيتو صحيتوا صحيتوا هكداك نحب الجزائريين ايكونوا
vBulletin® v3.8.10 Release Candidate 2, Copyright ©2000-2025, TranZ by Almuhajir