اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

البحث مع اهمال الهمزات والحروف المتشابهة مثل (ه, ة ي,ى و,ؤ)


Yaool

الردود الموصى بها

عندي قاعدة بيانات كبيرة قمت بإنشاء نموذج بحث لها, ولكن كنت أرغب بجعل البحث يتجاهل التفريق بين الهمزات والهاء والتاء المربوطة وهكذا.

بحث في المنتدى عن مواضيع مشابهة ولكن المرفقات بها لا تعمل.

لكم جزيل الشكر.

رابط هذا التعليق
شارك

1 minute ago, SEMO.Pa3x said:

استخدم الدالة Like للبحث.

نعم انا استخدمها بالفعل عند البحث عن اسم معين بالشكل التالي 

Like ""[ءاآإأ]*"

ولكن سؤالي عن كيفية تطبيق نفس المبدأ بشكل عام في نموذج بحث مع بقية الحروف المتشابهة

رابط هذا التعليق
شارك

9 minutes ago, SEMO.Pa3x said:

Like "*" & Forms!frm_Main!txt_search & "*" 

هذا بالفعل ما استخدمه في الكويري, لكن عند البحث عن "ادهم" مثلا والإسم مسجل في القاعدة بالهمزة "أدهم" فإن البحث يفشل في العثور على الحقل

 

رابط هذا التعليق
شارك

حسنا جداً، بهذا الأمر يجب ان نستخدم العتاد الثقيل وهو الـ VBA

قم بإنشاء وحدة نمطية واعطها اي اسم مثلا ( Clear_Text )

 

وقم بألصاق هذا الفنكشن بداخلها

 

Public Function ReplaceString(tshkeel As String)
Dim i As Integer
Dim fld As String, wr As String, spa As String
wr = ""
fld = tshkeel
i = 1
Do While i <= Len(fld)
spa = Mid(fld, i, 1)
If Asc(spa) = 240 Or Asc(spa) = 241 Or Asc(spa) = 242 Or Asc(spa) = 243 Or Asc(spa) = 244 Or Asc(spa) = 245 Or Asc(spa) = 246 Or Asc(spa) = 247 Or Asc(spa) = 248 Or Asc(spa) = 249 Or Asc(spa) = 250 Then
Else
wr = wr & spa
End If
i = i + 1
Loop
ReplaceString = wr
End Function

 

ثانياُ: قم بعمل استعلام وضع بداخله الحقل الذي يتضمن الاسماء التي تحتوي على الحركات الهمزة والكسرة والضمة.. الخ

ثم قم بإنشاء حقل جديد في الاستعلام لكي نقوم بمناداة الوحدة النمطية كالاتي:

 

Clearing_Text: ReplaceString( [اسم الحقل الذي يتضمن الاسم] )

 

اذا واجهت مشكلة ارفق القاعدة, لكي نقوم بمساعدتك.

حسنين

تم تعديل بواسطه SEMO.Pa3x
رابط هذا التعليق
شارك

جميل, قمت بمعالجة مشكلة التشكيل باستخدام الدالة أعلاه.. شكرا لاهتمامك.

الآن تبقى ان نجد حل لمدخلات البحث التي تحتوي على همزات وحروف المد و الهاء والتاء المربوطة .. الخ

هل يمكن كتابة استعلام من خلال الفيجوال بيسك؟ اظن ان الحل سيكون سهلا لو وضعنا شرط يقوم بعمل فحص للنص المدخل ثم يعدل الاستعلام ليتناسب مع المدخلات. 

مثلا لو كان النص يحتوي على (ءاآإأ) مثل (ادهم) فيقوم بمناداة الاستعلام التالي:

SELECT * FROM employees WHERE (employees.title Like " *ءاآإأ]دهم]* ")

ولو ادخلنا "زهرة" يقوم بمناداة هذا الاستعلام:

 

SELECT * FROM employees WHERE (employees.title Like " *[زهر[ةه* ")

ولكنني لا ادري كيفية تنفيذ هذه الآلية فخلفيتي في الفيجوال بيسك ضعيفة.

تم تعديل بواسطه Yaool
رابط هذا التعليق
شارك

اقتباس

الآن تبقى ان نجد حل لمدخلات البحث التي تحتوي على همزات وحروف المد و الهاء والتاء المربوطة .. الخ

تقصد حل للحقل الذي ستكتب به عبارة البحث؟

 

حسنين

رابط هذا التعليق
شارك

33 minutes ago, SEMO.Pa3x said:

استخدم الدالة Replace عند الحدث After_Update لإستبدال الهمزة والتاء..الخ

ياعيني عليك بالفعل المشكلة انحلت 😀

هذا الكود الذي استعملته

Private Sub txt_title_AfterUpdate()
Dim searchtext As String
searchtext = Replace(txt_title.Text, "ا", "[ءاآإأ]")
txt_title.Value = searchtext
End Sub

التنسيق العربي ملخبط قليلا ولكنه يستبدل كل "ا" في النص ب ءاآإأ بين قوسين [] وبالتالي الاستعلام يعمل بالشكل المطلوب.

بقي ان اعيد استخدام دالة الاستبدال لعمل التغيير مع بقية الحروف

الحل اسهل بكثير مما تصورت الحقيقة.

لكن بقي تعديل صغير في كودي, وهي ان النص في مربع البحث يتم استبداله بالنص الجديد الذي يحتوي على التعديلات, هل هناك طريقة لجعل الدالة تعمل "خلف الكواليس" بشكل او بآخر؟

 

تم تعديل بواسطه Yaool
رابط هذا التعليق
شارك

@Yaool

اقتباس

لكن بقي تعديل صغير في كودي, وهي ان النص في مربع البحث يتم استبداله بالنص الجديد الذي يحتوي على التعديلات, هل هناك طريقة لجعل الدالة تعمل "خلف الكواليس" بشكل او بآخر؟

استخدم حقل ثاني, عند الكتابة في الحقل الاول تبقى الكتابة كما هي لا تتغير لكنها سوف تكتب في الحقل الثاني وتكون مفرغة من الحركات وو.الخ

وهذا الحقل سوف يكون مخفي Visible = False

ثم الاستعلام سوف يأخذ معيار البحث من الحقل الذي قمنا بأخفاءه وبالتالي سوف يكون لديك حقل يعمل في الكواليس.

 

حسنين

تم تعديل بواسطه SEMO.Pa3x
رابط هذا التعليق
شارك

لا أدري لماذا اعقد الحلول على نفسي😅

Like "*" & Forms!frm_Main!txt_search.Tag & "*" 

يعمل بالشكل المطلوب 

 

أشكرك جزيل الشكر اخي حسنين على مساعدتك

 

1 minute ago, SEMO.Pa3x said:

@Yaool

ولماذا تستخدم Tag ؟

اكتفي فقط بكتابة txt_title = searchtext

 

حسنين

بدلا من انشاء حقول اضافية واخفائها اقوم بتخزين النص في تاج مربع البحث الاصلي

لان نموذج البحث عندي فيه عدة حقول بحث وليس حقلا واخدا.

رابط هذا التعليق
شارك

الأخوين Yaool & SEMO.Pa3x السلام عليكم

في مثالي المرفق ونظراً إلي أن معلوماتي بهذا العلم للأسف ليست كبيرة ولا مكتملة فقد (غرقت في شبر ميه) عند محاولة تطبيق ما دار بينكم ولم أستطع الإكمال مع العلم أني أريد البحث في حقلي عنوان المرجع و اسم المؤلف فهل يمكنكما مساعدتي في ذلك تفضلاً وشكرا

البحث مع اهمال الهمزات والحروف المتشابهة مثل (ه, ة ي,ى و,ؤ)1.accdb

تم تعديل بواسطه وائل أبو عبد الرحمن
رابط هذا التعليق
شارك

 

6 دقائق مضت, SEMO.Pa3x said:

تفضل طلبك عزيزي

كل الشكر لك أخي حسنين لاستجابتك واهتمامك جواك الله خيرا

واسمح لي أن انهل بمزيد من علمكم نظراً لتعلق عملي بالتعامل مع كثرة النصوص لذا فلدي أهتمام بـ (سرعة وسهولة ودقة نتائج البحث) ونظرا إلي أهمية الاستعلامات باعتبارها العمود الفقري لقواعد البيانات فقد رأيت خلال رحلتي لإخراج عملي ثلاثة صور أو أشكال لعمل الاستعلام:

1- إنشاء الاستعلام النمطي من خلال معالج الاستعلامات

2- إنشاء استعلام من داخل النموذج.

3- إنشاء استعلام داخل الكود.

فهل لأحدهما أفضلية من حيث السرعة ودقة البيانات ؟ وجزاكم الله خيراً

رابط هذا التعليق
شارك

بالنهاية كلها استعلامات ولا فرق بينهما في السرعة.

اما دقة البيانات فهذا الامر راجع لك، اذا قمت ببناء الاستعلام بالشكل الصحيح مهما كان نوعه ستحصل على بيانات صحيحه والعكس.

 

حسنين

رابط هذا التعليق
شارك

زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information