delphi4arab منتديات دلفي للعرب

نسخة كاملة : تجاهل الفروق بین الهمزة و نظائرها فی بحث (Like)
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
سلام علیکم یا اخونی

هذا کد للبحث فی Database :

كود :
ADOQuery1.close; ADOQuery1.sql.clear; ADOQuery1.sql.add ('select * from mytable where Book); ADOQuery1.sql.add ('Like ''%' + Edit1.text + '%'''); ADOQuery1.open;


لکن هذا الکد لیس ینتج هذه الکلمات : أعلم / إنشاء / سریعة

اذا اورد : اعلم / انشاء / سریعه

لان (ا) یفارق ( آ أ إ ) و (ه) یفارق ( ة)

کیف تجاهل الفروق بین الهمزه و نظائرها فی عمل البحث فی Database ؟
وعليكم السلام.
هذا الكود لدالة تحول الحروف ä â ê ë ÿ û ü ô ö... الى الحروف A E Y U O ... وبنفس المبدأ حاول الاستفادة منه لتحويل آ ا ى ... إلى أ ي...
PHP كود :
function MajusculTou( const Texte: string ): string;
var 
x,y : integer;
begin
  Result
:= Texte;
  for 
x:= 1 to length(Texte) do begin
    y
:= Ord( Result[ x ]);
    case 
y of
      97..122    
: Result[ x ]:= Chr( y - 32 );
      
224..229    : Result[ x ]:= 'A';
      
231    : Result[ x ]:= 'C';
      
232..235    : Result[ x ]:= 'E';
      
236..239    : Result[ x ]:= 'I';
      
241    : Result[ x ]:= 'N';
      
242..246    : Result[ x ]:= 'O';
      
249..252    : Result[ x ]:= 'U';
      
253, 255    : Result[ x ]:= 'Y';
    
end;
  
end;
end; 
هذا الکود یحول کل الف ای ( آ ) او ( أ )

ای یتحول اانزل الی آآنزل او أأنزل او إإنزل لکن کیف یتحول الی أآنزل ..؟
عذرا أخي لم أفهم شيئا مما كتبت Smile
مشكلة حقيقية فعلا
إذا تم البحث عن كلمة انزل و هي في قاعدة البيانات آنزل فلا يمكن إيجادها إلا إذا كانت موجودة في قاعدة البيانات بالشكل انزل
سننتظر دخول أحد الأخوة الخبراء علهم يفيدونا بشيئ
السلام عليكم و رحمة الله إخوتي أنا الآن أعمل على برنامج لتسيير مكتبة و واجهتني مشكلة حول كيف أبحث في dbgrid مع تجاهل الهمزة و نضائرها
هل هناك ما يمنع من إستخدام
StringReplace
لدي فكرة لا اعلم اذا كانت ستفلح معك ما رأيك لو قمنا بالأتي :

PHP كود :
Var S : String;

S := Edit1.text ;
for 
I := 0 to 3 do Begin
If I = 0 Then S:= StringReplace(S, 'أ' , 'ا', [rfReplaceAll, rfIgnoreCase]);
If 
I = 1 Then S:= StringReplace(S, 'آ' , 'ا', [rfReplaceAll, rfIgnoreCase]);
If 
I = 2 Then S:= StringReplace(S, 'إ' , 'ا', [rfReplaceAll, rfIgnoreCase]);
If 
I = 3 Then S:= StringReplace(S, 'ا' , 'ا', [rfReplaceAll, rfIgnoreCase]);
// بأمكانك وضع الاحرف الذي تحتاج وبهذه العملية تكون قد بحثت عن كل الاحرف بشكل عام
if ADOQuery1.Active then  ADOQuery1.sql.clear ;
ADOQuery1.sql.add ('select * from mytable where Book);
ADOQuery1.sql.add ('
Like ''%' + S+ '%''');
if Not ADOQuery1.Active then ADOQuery1.open;
End; 

ان شاء الله تكون تجدي نفعاً معك
يتوجب انشاء تابع في قاعدة البيانات يعيد نفس نتيجة التابع الموجود أعلاه كي يتحقق الشرط
فتقول
where databasefunc(book) like '%'''+ delphiFunc(edtbook.text) + '%'''
السلام عليكم...

كلٌ من SQL Server و Access يدعمان استعمال المجموعات (Sets) و النطاقات (Ranges) مع العامل LIKE.

المجموعة (Set) هي مجموعة من الحروف أو الرموز ضمن قوسين مربعين، مثلاً [acegj] . أما النطاق (Range) فيتحد بتعيين بداية النطاق و نهاية النطاق و بينهما شرطة، أيضاً ضمن قوسين مربعين، مثلاً [A-M] للحروف من A إلى M.

يمكن تطبيق ذلك مع الهمزات و ذلك بتحويل أي ألف (بصرف النظر عن همزته) إلى مجموعة من الألفات. مثلاً كلمة أخرج تصبح [اأإآ]خرج، و كلمة جاء تصبح ج[اأإآ]ء، و كلمة أأنزل تصبح [اأإآ][اأإآ]نزل... إلخ.

الكود التالي يحتوي على دالة تقوم بذلك لتعيد string يمكن استعماله في جملة SELECT. مع افتراض أن نص البحث مكتوب في Edit1:

كود :
function ReplaceAlif(SrcStr: string): string; var Idx: Integer; begin if Trim(SrcStr) = '' then Result := SrcStr else begin Result := ''; Idx := 1; for Idx := 1 to Length(SrcStr) do begin if (SrcStr[Idx] = 'ا') or (SrcStr[Idx] = 'أ') or (SrcStr[Idx] = 'إ') or (SrcStr[Idx] = 'آ') then Result := Result + '[اأإآ]' //else if (SrcStr[Idx] = 'ه') or (SrcStr[Idx] = 'ة') then // Result := Result + '[هة]' else Result := Result + SrcStr[Idx]; end; end; end; ' ثم في زر البحث var SearchTxt, SqlStr: string; begin SearchTxt := Trim(Edit1.Text); if SearchTxt <> '' then begin SearchTxt := ReplaceAlif(SearchTxt); SqlStr := 'SELECT ... WHERE (field_name LIKE %' + SearchTxt + '%'; ebd; end;

نرجو الاستفادة و السلام.
الصفحات : 1 2