![]() |
|
البحث في الـ 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 منذ مدة لم أدخل المنتدى ونسيت هذا السؤال ولم أعود له إطلاقا. شكرا لك أخي لؤي. للأسف طريقتك لن تعمل بإجراء واحد يجب عمل أكثر من إجراء لمكافئة الطريقة التي وضحتها. ولكن بالمناسبة. لقد حللتها قبل شهر ![]() كود : 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; |