المشاركات : 5
المواضيع 4
:
: 1
الإنتساب : Jun 2016
04-03-2023, 03:40 PM
(آخر تعديل لهذه المشاركة: 13-03-2023, 10:18 AM بواسطة Admin.)
السلام عليكم و رحمة الله و بركاته
في الصورة المرفقة عملية فلترة بعدة حقول
لدينا تاريخين و لدينا كمبوبوكس به اسماء المستخدمين و كمبوبوكس به اسماء الحركات اريد عند اختيار التاريخين دون اختيار اسما للمستخذم او نوع حركة و الضغط على زر عرض التقرير يعطيني تقرير حركة المستخدمين .... ثم عند اختيار اسما للمستخدم و الضغط على نفس الزر يعطيني تقرير الحركة للمستخدم ما بين التاريخين المذكورين و في الاخير عند اضافة اسم الحركة و اسم المستخدم و تاريخين يعطيني النتيجة ممكن حل بارك الله فيكم حول هذه الفلترة اما باستعمال الكويري او اي اجراء اخر
المشاركات : 1,252
المواضيع 170
:
: 1,500
الإنتساب : Jul 2009
04-03-2023, 05:23 PM
(آخر تعديل لهذه المشاركة: 04-03-2023, 05:24 PM بواسطة أبو معاذ.)
و عليكم السلام ورحمة الله وبركاته،
لدينا الاحتمالات التالية:
1- بحث بالتاريخ فقط.
2- بحث بالتاريخ و المستخدمين فقط.
3- بحث بالتاريخ و الحركة فقط.
4- بحث بالتاريخ و المستخدمين و الحركة.
PHP كود :
if (Check_Boxdate.Checked = true) then
if (Checkbox_User.checked= False) then
if (Checkbox_Mouvement.checked= False) then
begin // only Date
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT *');
Query1.SQL.Add('FROM MyTable1');
Query1.SQL.Add('where MyDate BETWEEN :Dt1 and :Dt1');
Query1.ParamByName('Dt1').AsDate := picker1.Date;
Query1.ParamByName('Dt2').AsDate := picker2.Date;
Query1.Open;
end
else //filter with Date and comboboxMouvement only
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT *');
Query1.SQL.Add('FROM MyTable1');
Query1.SQL.Add('where (MyDate BETWEEN :Dt1 and :Dt1) and (Mouvement = :Mv)');
Query1.ParamByName('Dt1').AsDate := picker1.Date;
Query1.ParamByName('Dt2').AsDate := picker2.Date;
Query1.ParamByName('Mv').AsString := comboboxMouvement.Text;
Query1.Open;
end
else
if (Checkbox_Mouvement.checked= False) then
begin // Date and user Only
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT *');
Query1.SQL.Add('FROM MyTable1');
Query1.SQL.Add('where (MyDate BETWEEN :Dt1 and :Dt1) and (MyUser = :Usr)');
Query1.ParamByName('Dt1').AsDate := picker1.Date;
Query1.ParamByName('Dt2').AsDate := picker2.Date;
Query1.ParamByName('Usr').AsString := comboboxUser.Text;
Query1.Open;
end
else //filter with Date and user and comboboxMouvement
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT *');
Query1.SQL.Add('FROM MyTable1');
Query1.SQL.Add('where (MyDate BETWEEN :Dt1 and :Dt1) and (MyUser = :Usr) and (Mouvement = :Mv)');
Query1.ParamByName('Dt1').AsDate := picker1.Date;
Query1.ParamByName('Dt2').AsDate := picker2.Date;
Query1.ParamByName('Usr').AsString := comboboxUser.Text;
Query1.ParamByName('Mv').AsString := comboboxMouvement.Text;
Query1.Open;
end
Query1 هو اسم المكون الذي تتصل به لتجلب المعلومات مثل ADO Query1 .
و الله أعلم.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
المشاركات : 224
المواضيع 35
:
: 24
الإنتساب : Jan 2009
افض حل باستخدام هي التحقق من كل شرط وفي حال تحققه يضاف الكود الخاص به لانك لو عملت لكل الاحتمالات فسينتهي الامر بمئات الاسطر والتي لافائدة منها
مثلا لديك اسم المستخدم والتاريخ والحركة
قمت بالبحث عن طريق اسم المستخدم والحركة
تقوم اولاً باخذ اسم المستخدم وتقوم باضافة الشرط الى الاستعلام
كود :
var qu:string='select * from transaction where (1=1)';
if username.text<>''
qu:=qu+' and username='+quotedtostr( username.text );
if transdatechk.checked then//
qu:=qu+' and date between :a and :b';
if transtype.text<>'' then
qu:=qu+' and transtype ='+quotedtostr( transtype.text );
هذا كمثال بسيط لاحظ اني كل مااتحقق من شرط ويكون موجود يقوم باضافة نص الى متغير من نوع string في الاخير اقوم باسناد المتغير هذا الى مكون query واقوم بتنفيذه
ملاحظه: لتجنب injection استخدم البارامترات بدل الاسناد المباشر
بالتوفيق