08-01-2014, 03:57 PM
السلام عليكم...
كلٌ من SQL Server و Access يدعمان استعمال المجموعات (Sets) و النطاقات (Ranges) مع العامل LIKE.
المجموعة (Set) هي مجموعة من الحروف أو الرموز ضمن قوسين مربعين، مثلاً [acegj] . أما النطاق (Range) فيتحد بتعيين بداية النطاق و نهاية النطاق و بينهما شرطة، أيضاً ضمن قوسين مربعين، مثلاً [A-M] للحروف من A إلى M.
يمكن تطبيق ذلك مع الهمزات و ذلك بتحويل أي ألف (بصرف النظر عن همزته) إلى مجموعة من الألفات. مثلاً كلمة أخرج تصبح [اأإآ]خرج، و كلمة جاء تصبح ج[اأإآ]ء، و كلمة أأنزل تصبح [اأإآ][اأإآ]نزل... إلخ.
الكود التالي يحتوي على دالة تقوم بذلك لتعيد string يمكن استعماله في جملة SELECT. مع افتراض أن نص البحث مكتوب في Edit1:
نرجو الاستفادة و السلام.
كلٌ من 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;نرجو الاستفادة و السلام.

