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

ماهي فكرة برمجة فلتر لحقول في جدول ؟

مغلق
بدأه aymansoft في 24 مايو 2005 · 6 رد · 851 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الرجاء المساعدة في طريقة لعمل فلتر - مثال : لـ 9 حقول في الجدول ؟

بمعنى لو افترضنا أن هناك الحقول التالية:

الإسم

العمر

الجنس

الحالة الإجتماعية

....

..

..

.

في الفورم عندما ادخل البيانات مثل الإسم والعمر يعطيني الأشخاص الأسمائم كذا واعمارهما كذا

واذا قمت بإدخال العمر والجنس يعطيني الأشخاص التي اعمارهم كذا والجنس كذا

ووو ............

المشكلة هنا تعدد الإستعلام ؟ فكيف يمكن حل مثل هذه المشكلة ؟

الرجاء المساعدة

وشكرا

#2

أفضل طريقة إستخدام جملة SQl و Where ومن خلال مربعات النص المحتوية على قيم تقوم ببناء الجملة

لا تحزن:

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

لا تحزن:

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

#3

يا أخ محمد المشكلة مش في استخدام where والحقول المشكلة في كم استخدام الحقول

يعني احتاج أكثر من 200 جملة select ..where لأنه يوجد 9 حقول ولا تعرف المستخدم ماذا سوف يكتب في الحقول او يختار من listbox وإلخ هناك احتمالات إلى هذه الحقول بمعنى ممكن يختار ويكتب في حقول وممكن ما يكتب في حقل أخر لذلك جملة where بتختلف على حسب ملئ الحقول

الرجاء المساعدة في الفكرة ....

وشكرا

#4

شكرا لكم لقد حللت المشكلة وارجو من الجميع الإستفادة

procedure Tquerys.filter();

var

s,s1,s2,s3,s4,s5,s6,s7,s8,s9:string;

begin

s1:='';

s:='SELECT * FROM Patients INNER JOIN Cases ON Patients.File_no=Cases.File_no where ';

if (edit1.Text<>'')and(edit2.Text<>'') then

s1:='Admission_date>='+edit1.Text+' AND Admission_date<='+edit2.Text;

if (edit3.Text<>'')and(edit4.Text<>'') then

s2:=' dob>='+edit3.Text+' AND dob<='+edit4.Text;

if (co1.Text<>'')then

s3:=' Gender='+co1.Text;

if (co2.Text<>'')then

s4:=' Region='+co2.Text;

if (co3.Text<>'')then

s5:=' Referred_from='+co3.Text;

if (co4.Text<>'')then

s6:=' Dept='+co4.Text;

if (co5.Text<>'')then

s7:=' Case_discharge='+co5.Text;

if (co6.Text<>'')then

s8:=' Status='+co6.Text;

if (co7.Text<>'')then

s9:=' Percent_cover='+co7.Text;

////////////////////////////////////////////////// add string

if s1<>'' then

s:=s+s1;

/////////

if s2<>'' then

begin

if s1='' then

s:=s+s2

else

s:=s+' AND'+s2;

end;

////////

if s3<>'' then

begin

if (s1='')and (s2='') then

s:=s+s3

else

s:=s+' AND'+s3;

end;

///////

if s4<>'' then

begin

if (s1='') and (s2='') and (s3='')then

s:=s+s4

else if (s1='') or (s2='') or (s3='')then

s:=s+' AND'+s4;

end;

///////

if s5<>'' then

begin

if (s1='') and (s2='') and (s3='')and (s4='')then

s:=s+s5

else if (s1='') or (s2='') or (s3='')or (s4='')then

s:=s+' AND'+s5;

end;

//////

if s6<>'' then

begin

if (s1='') and (s2='') and (s3='')and (s4='') and (s5='')then

s:=s+s6

else if (s1='') or (s2='') or (s3='')or (s4='')or (s5='')then

s:=s+' AND'+s6;

end;

//////

if s7<>'' then

begin

if (s1='') and (s2='') and (s3='')and (s4='') and (s5='')and (s6='')then

s:=s+s7

else if (s1='') or (s2='') or (s3='')or (s4='')or (s5='')or (s6='')then

s:=s+' AND'+s7;

end;

//////

if s8<>'' then

begin

if (s1='') and (s2='') and (s3='')and (s4='') and (s5='')and (s6='')and (s7='')then

s:=s+s8

else if (s1='') or (s2='') or (s3='')or (s4='')or (s5='')or (s6='')or (s7='')then

s:=s+' AND'+s8;

end;

//////

if s9<>'' then

begin

if (s1='') and (s2='') and (s3='')and (s4='') and (s5='')and (s6='')and (s7='')and (s8='')then

s:=s+s9

else if (s1='') or (s2='') or (s3='')or (s4='')or (s5='')or (s6='')or (s7='')and (s8='')then

s:=s+' AND'+s9;

end;

//////

//ADODataSet1.close;

//adodataset1.CommandText:=s;

//ADODataSet1.open;

showmessage(s);

end;

#5

يمكنك تسهيل مهمتك والاختصار منها الكثير، لو وضعت شرط يتحقق دائما ومن ثم تضيف جزء and فقط لجملة ال Sql

مثلا

sql = "select * from employees where empId > 0 "
if textbox1.text <> '' then
  sql  = sql + ' and firstname = ' + quotedstr(textbox1.text);
if textbox2.text  <> '' then
  sql  = sql + ' and Lastname = ' + quotedstr(textbox2.Text);
' and so on

وهكذا

لم افهم صراحة ما كنت تقصد ب 200 جملة sql

لا تحزن:

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

لا تحزن:

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

#6

ايضا يمكنك الاختصار المزيد عند إستخدام between لفحص تاريخيين

  where mydate between date1 and date2

لا تحزن:

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

لا تحزن:

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

#7

شكرا لك يا محمد نسمان زبط الموضوع أكثر وتطورتها واصبحت ممتازة

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

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