تجاهل الفروق بین الهمزة و نظائرها فی بحث (Like)
#10
السلام عليكم...

كلٌ من 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;

نرجو الاستفادة و السلام.
الرد


الردود في هذا الموضوع
تجاهل الفروق بین الهمزة و نظائرها فی بحث (Like) - بواسطة Najy Ibraheem - 08-01-2014, 03:57 PM

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


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