البحث في الـ dbgrid بناء على عدد صحيح وليس String
#1
السلام عليكم ورحمة الله وبركاته

لدي 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

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

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

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

كود :
Locate('Name;ID',VarArrayOf([Search1,Search12]),[loCaseInsensitive,loPartialKey]);
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
الرد
#3
منذ مدة لم أدخل المنتدى ونسيت هذا السؤال ولم أعود له إطلاقا.

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

ولكن بالمناسبة. لقد حللتها قبل شهر 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;
الرد


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


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