التصفية حسب التحديد في dbgrid
#1
السلام عليكم اعضاء و مشرفي المنتدى الاعزاء
لدي سؤال و هو كيف يتم تصفية جدول حسب ما تم تحديده من dbgrid اي يقوم المستخدم بتحديد عدة سجلات من dbgrid ومن ثم عند الضغط على الزر يتم اخفاء جميع السجلات و ابقاء السجلات التي تم تحديدها فقط طبعا خاصية MultiSelect =true الموجودة في option
وشكرا
الرد
#2
(25-02-2020, 11:28 AM)احمد العراقي كتب : [size=small]السلام عليكم اعضاء و مشرفي المنتدى الاعزاء[/size]
[size=small]لدي سؤال و هو كيف يتم تصفية جدول حسب ما تم تحديده من dbgrid اي يقوم المستخدم بتحديد عدة سجلات من dbgrid ومن ثم عند الضغط على الزر يتم اخفاء جميع السجلات و ابقاء السجلات التي تم تحديدها فقط طبعا خاصية MultiSelect =true الموجودة في option[/size]
[size=small]وشكرا[/size]


وعليكم السلام ورحمة الله وبركاته ،
هذه العملية تسمى الفلترة ، هناك العديد من المواضيع حول الفلترة فقط قم بالبحث في المنتدى .
يمكنك أيضا استعمال تعليمات  ال SQL.
بالمناسبة لم تذكر نوع قاعدة  البيانات  التي تستعملها.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد
#3
(25-02-2020, 05:20 PM)أبو معاذ كتب : وعليكم السلام ورحمة الله وبركاته ،
هذه العملية تسمى الفلترة ، هناك العديد من المواضيع حول الفلترة فقط قم بالبحث في المنتدى .
يمكنك أيضا استعمال تعليمات  ال SQL.
بالمناسبة لم تذكر نوع قاعدة  البيانات  التي تستعملها.
شكرا اخي العزيز على الرد 
نعم اعلم بانها فلترة ولكن مشكلتي هي ليس الفلترة حسب حقل معين في الجدول وانما يقوم المستخدم بتحديد مجموعة سجلات يختارها بشكل عشوائي ومن ثم تتم الفلترة حسب ما تم اختياره من السجلات 
اما قاعدة البيانات فهي Absolute


الملفات المرفقة
.jpg   توضيح للسؤال.JPG (الحجم : 60.87 ك ب / التحميلات : 28)
الرد
#4
السلام عليكم حاول باستحدام bookmark
https://delphi4arab.net/forum/showthread.php?tid=2177
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
الرد
#5
(25-02-2020, 06:44 PM)S.FATEH كتب : السلام عليكم حاول باستحدام bookmark
https://delphi4arab.net/forum/showthread.php?tid=2177
وعليكم السلام و رحمة الله
شكرا اخي على الرد ولكن الموضوع الذي اقترحته لي يعطي طريقة للنسخ و الحذف فقط وليس التصفية اذا ممكن كود التصفية من فضلك واكون لك شاكرا
الرد
#6
السلام عليكم

محاولة تحتاج إلى تعديل :
كود :
str:=''; search:=''; for i := 0 to DBGrid1.SelectedRows.Count - 1 do begin   str := 'Field_Name' + ' LIKE '+ QuotedStr(DBGrid1.SelectedRows[i];+'%') ; if i=0 then search:= str else   search:= str +' OR '+ search; End;   DataModule.Table.Filtered := False;   DataModule.Table.Filter := search;   DataModule.Table.Filtered := True
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
[-] كل من 1 user says قال شكرا ل لؤي على المشاركة المفيدة
  • احمد العراقي
الرد
#7
(26-02-2020, 10:17 AM)لؤي كتب : السلام عليكم

محاولة تحتاج إلى تعديل :
كود :
str:=''; search:=''; for i := 0 to DBGrid1.SelectedRows.Count - 1 do begin   str := 'Field_Name' + ' LIKE '+ QuotedStr(DBGrid1.SelectedRows[i];+'%') ; if i=0 then search:= str else   search:= str +' OR '+ search; End;   DataModule.Table.Filtered := False;   DataModule.Table.Filter := search;   DataModule.Table.Filtered := True
وعليكم السلام ورحمة الله
اخي العزيز ياحيذا لو تعطيني كود يعمل فالكود لا يعمل حتى مع بعض التعديلات التي اجريتها له طبعا خبرتي متواضعة لذلك لم انجح وشكرا
الرد
#8
السلام عليكم
رسالة الخطأ ؟؟
أرفق محاولتك.
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
الرد
#9
(25-02-2020, 11:28 AM)احمد العراقي كتب : السلام عليكم اعضاء و مشرفي المنتدى الاعزاء
لدي سؤال و هو كيف يتم تصفية جدول حسب ما تم تحديده من dbgrid اي يقوم المستخدم بتحديد عدة سجلات من dbgrid ومن ثم عند الضغط على الزر يتم اخفاء جميع السجلات و ابقاء السجلات التي تم تحديدها فقط طبعا خاصية MultiSelect =true الموجودة في option
وشكرا

جرب هذا الكود ، لكن عليك تغيير IndexFieldName حسب قاعدة بياناتك

PHP كود :
procedure TForm2.FilterBtnClick(Sender: TObject);
var
  I: Integer;
  Filter, IndexFieldName: string;
  Bookmark: TBookmark;
begin
  IndexFieldName
:= 'Id';
  Filter:= '';
  Query.DisableControls;
  try
    for I:= 0 to DBGrid1.SelectedRows.Count - 1 do
    begin
      Query
.GotoBookmark(DBGrid1.SelectedRows[I]);
      Filter:= Filter + '(' + IndexFieldName + '=' + Query.FieldByName(IndexFieldName).AsString + ') ';
      if I < (DBGrid1.SelectedRows.Count - 1) then
        Filter
:= Filter + ' OR ';
    end;
    Query.Filter:= Filter;
    Query.Filtered:= True;

  finally
    EmployeeQuery.EnableControls;
  end;
end; 
[-] كل من 1 user says قال شكرا ل ghostdz على المشاركة المفيدة
  • احمد العراقي
الرد
#10
السلام عليكم 
عدل عليها بما يناسبك
  • dmt.client هي الـ DataSet الخاصة بك.
  • dbgClients هي DBGrid الخاصة بك.
PHP كود :
procedure TfrmListClient.ToolButton1Click(Sender: TObject);
var
  I: Integer;
  FilterStr, FieldName: string;
begin
  FieldName 
:= dmt.Client.Fields[0].FieldName;
  FilterStr := FieldName + ' = -1';
  for I := 0 to dbgClients.SelectedRows.Count - 1 do
  begin
    dmt
.Client.GotoBookmark(dbgClients.SelectedRows[i]);
    FilterStr := FilterStr +' or '+ FieldName + ' = ' + dmt.Client.Fields[0].AsString;
  end;
  dmt.Client.Filter := FilterStr;
  dmt.Client.Filtered := True;
end; 

نسخة اخرى في حالة لم يكن هناك تحديد لا يفعل شيئ

PHP كود :
var
  I: Integer;
  FilterStr, FieldName: string;
begin
  FieldName 
:= dmt.Client.Fields[0].FieldName;
  FilterStr := FieldName + ' = -1';
  if dbgClients.SelectedRows.Count > 0 then
  begin
    
for I := 0 to dbgClients.SelectedRows.Count - 1 do
    begin
      dmt
.Client.GotoBookmark(dbgClients.SelectedRows[i]);
      FilterStr := FilterStr +' or '+ FieldName + ' = ' + dmt.Client.Fields[0].AsString
    end
;
  end else
    FilterStr := FilterStr + ' or ' + FieldName + ' like ' + QuotedStr('%');
  dmt.Client.Filter := FilterStr;
  dmt.Client.Filtered := True; 
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
[-] كل من 1 user says قال شكرا ل S.FATEH على المشاركة المفيدة
  • احمد العراقي
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 2 ) ضيف كريم