delphi4arab منتديات دلفي للعرب
البحث في الـ dbgrid بناء على عدد صحيح وليس String - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : البحث في الـ dbgrid بناء على عدد صحيح وليس String (/showthread.php?tid=4947)



البحث في الـ dbgrid بناء على عدد صحيح وليس String - Zinab - 25-02-2013

السلام عليكم ورحمة الله وبركاته

لدي dbgrid مربوط بـ adotable وقمت بتفعيل خاصية الـ Filter الخاصة بالـ table
وأضفت Edit من أجل البحث
كود :
procedure TForm1.SearchEditChange(Sender: TObject); var temp: String; begin temp := Stringreplace(SearchEdit.Text, '''', '''''', [rfReplaceAll, rfIgnoreCase]); if temp <> '' then begin ADOTable.Filter := '(Name LIKE ''%' + temp + '%'')' + ' OR ' +'(ID LIKE '+'%'+ temp + '%'+')'; end else ADOTable.Filter := ''; end;

الـ Edit يعمل جيدا مع القيم النصية وفي الأساس وظيفة الـ Filter لا تقبل إلا String فقط

حقل الـ ID في قاعدة بياناتي هو عبارة عن Auto number - Integer وهذا مايسبب تضارب وأخطاء عند المحاولة للبحث برقم الـ ID

قمت بمحاولة تحويل رقم الـ ID إلى VARCHAR وهي الوظيفة التي تحول إلى نصوص في لغة الـ SQL ولكنني فشلت.

يمكن حل المشكل بواسطة تغير نوع البيانات للحقل ID من Integer إلى String ولكنني سأخسر سرعة الفهرسة بالإضافة إلى وظيفة إدراج أرقام أوتوماتيكيا في حقل الـ ID

هل لديكم أية أفكار عن تخطي هذا المشكل دون تغيير نوع البيانات أو أية أفكار آخرى ؟

مقدرة لكم جهودكم وجزاكم الله خيرا ومتأسفه جدا على الإزعاج


البحث في الـ dbgrid بناء على عدد صحيح وليس String - لؤي - 25-02-2013

وعليكم اسلام

ممكن أن تستخدمي Locate بمتعدد حقول :

كود :
Locate('Name;ID',VarArrayOf([Search1,Search12]),[loCaseInsensitive,loPartialKey]);



البحث في الـ dbgrid بناء على عدد صحيح وليس String - Zinab - 07-03-2013

منذ مدة لم أدخل المنتدى ونسيت هذا السؤال ولم أعود له إطلاقا.

شكرا لك أخي لؤي. للأسف طريقتك لن تعمل بإجراء واحد يجب عمل أكثر من إجراء لمكافئة الطريقة التي وضحتها.

ولكن بالمناسبة. لقد حللتها قبل شهر Big Grin

كود :
procedure TForm.AdoTableFilterRecord(DataSet: TDataSet;var Accept: Boolean); var Value1, Value2, Text: String; begin Text := SearchEdit.Text; if Trim(Text) = '*' then Exit; Value1 := DataSet.FieldByName('ID').AsString; Value2 := DataSet.FieldByName('Name').AsString; Accept := Pos(Text, Value2) > 0; if not Accept then begin // Accept := Pos(Text, Value1) > 0; //if to use id as string Accept := StrToIntDef(Text, -1) = DataSet.FieldByName('ID').AsInteger; end; end;