اذهب الي المحتوي
أوفيسنا

تجاهل الهمزة و إختيار سجل افتتاحي متغير


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

أعزائي .. السلام عليكم ورحمة الله

لدي سؤالين وأتمنى أن أجد لديكم أجوبة لها مع الشكر مقدما .

السؤال الأول : كيف أستطيع تغيير السجل الحالي في كل مرة أفتح فيها النموذج ؟عمل الاستاذ أبو حمود ( الله يذكره بالخير ) هذا الكود ولكن فيه عيب أنه يكرر سجل معين دائماً أجد النموذج يفتح عليه فهل يمكن أن أجد تعديل عليه ليعمل أفضل من ذلك

والكود ( يوضع في حدث عند التحميل ) للنموذج .

Dim رقم_السجل_المطلوب As Long
Dim عدد_سجلات_النموذج
عدد_سجلات_النموذج = DCount(Me.RecordsetClone.Fields(0).Name, Me.RecordSource)
 ' عمل حلقة تكرار لتحقيق شرط
Do
رقم_السجل_المطلوب = Int(Rnd * 15)
' أن يكون الرقم المتولد اكبر من الصفر وأن يكون أصغر أو يساوي عدد السجلات
Loop While رقم_السجل_المطلوب <= 0 Or رقم_السجل_المطلوب > عدد_سجلات_النموذج
DoCmd.GoToRecord acDataForm, Me.Name, acGoTo, رقم_السجل_المطلوب
السؤال الثاني : كيف أستطيع تجاهل الهمزة والتاء المربوطة عند البحث مثلاً .عمل الاستاذ أبو هاجر ( الله يذكره بالخير ) هذه الوحدة النمطية ولكني لم استطع التعامل معه في برنامجي المرفق لكم فهل أجد لديكم المساعدة ؟
Function changesearch(Mytxt) As String


 Dim tempstr As String
Dim tempend As String
tempstr = Nz(Mytxt, "")

       
       If tempstr Like "*[أاآإ]*" Then

           For b = 1 To Len(tempstr)
               If Mid(tempstr, b, 1) = "ا" Or Mid(tempstr, b, 1) = "إ" Or Mid(tempstr, b, 1) = "أ" Or Mid(tempstr, b, 1) = "آ" Then
                   tempend = tempend & "[أآاإ]"
               Else
                   tempend = tempend & Mid(tempstr, b, 1)
               End If
           Next
       tempstr = tempend
       End If

       If tempstr Like "*[ةه]*" Then
           For b = 1 To Len(tempstr)
               If Mid(tempstr, b, 1) = "ة" Or Mid(tempstr, b, 1) = "ه" Then
                   tempend = tempend & "[ةه]"
               Else
                   tempend = tempend & Mid(tempstr, b, 1)
               End If
           Next
       tempstr = tempend
       End If

      
       If tempstr Like "*[ىي]*" Then
           For b = 1 To Len(tempstr)
               If Mid(tempstr, b, 1) = "ى" Or Mid(tempstr, b, 1) = "ي" Then
                   tempend = tempend & "[ىي]"
               Else
                   tempend = tempend & Mid(tempstr, b, 1)
               End If
           Next
       tempstr = tempend
       End If

changesearch = tempstr

End Function

أرجو أن أجد الحل لديكم وللجميع تحياتي .

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

قام أخي مهند بحل جميع الأسئلة جزاه الله ألف خير وبارك فيه .

ولمن يريد الاطلاع .. فالحل على هذا الرابط ...

http://www.arabteam2000-forum.com/index.ph...=0entry201952

تحياتي ..

توضيح-مهند.rar

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

شكرا لمرورك أستاذي أبو هادي .

هل أطمع في كرمك بأن تقوم بتطبـيقها على البرنامج المرفق إذا كان وقتك يسمح بذلك ؟

تحياتي ..

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

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

http://www.officena.net/ib/index.php?showtopic=1912

http://www.officena.net/ib/index.php?showtopic=857

و الامثلة يتم فيها فعلا تجاهل موضوع الهمزة

ايضا المثال الذي أضافه الأخ مهند يعمل تماما

جرب اعادة ترتيب المراجع الموجودة فى المثال عندك

أيضا

جرب استبدال الحروف العربية فى الكود ، بال asci code المناظر كما فى الموضوع المشار اليه عاليا

فاحيانا مع بعض النسخ يحدث مشاكل مع وجود حروف عربية وسط الكود

احيانا يفي اعادة الترتيب للمراجع فى الاكسيس بحل بعض مشاكل شبيه

و لكن اذا كانت مشكلة مراجع ، فسيتوقف الكود عند الدالة المعنية اذا عملت Debug

فجرب عمل debug أولا ثم اعادة الترتيب

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

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

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

السلام عليكم

لقد جربت المثال وهو يعمل بدون مشاكل .

يمكنك احتياطا تبديل هذا السطر :

If Arabic_word Like changesearch(Arabic1) Then
بهذا السطر :
If changesearch(Trim(Arabic_word)) = changesearch(Trim(Arabic1)) Then

تحياتي .

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

السلام عليكم

هذا آخر رد للأخ مهند مخاطبا الأخ فهد بعد أن عرض اقتراحي الأخير :

أخي فهد .. استعمال الدالة Like هو أسرع من هذا الأسلوب إذا كان القصد البحث في قاعدة البيانات .. لذلك أرجع وأؤكد لك أنه توجد مشكلة في الأكسس في جهازك

الشيء الثاني لا داعي لاستعمال Trim .. لأن الدالة changesearch تحتوي على Trim وبالتالي السطر هذا يكفي :

f changesearch(Arabic_word) = changesearch(Arabic1) Then

وقد اقتضى رده دفعي على كتابة هذه الملاحظات :

1 – دالة changesearch() لا تحتوي على دالة Trim() والأصح أن لا تحتويها .

2 – العلة ليست في أداة/عامل Like ولو استبدل الأخ فهد أداة = بأداة Like فسيعمل الكود ولكنك للآن لم تدرك الحل بعد .

3 – لقد قارنت بين أداة Like و (الأسلوب)!!! بدلا من المقارنة بين أداة Like و أداة = معللا أن أداة Like أسرع ونحن نقبل منك إذا دعمته بدليل إن أمكن .

4 – يوجد بالدالة الثانية دالة InStr() وكان بالإمكان استخدام أداة Like إلا إذا كانت InStr() أسرع ؟ ، آمل التوضيح .

5 – لو أردنا أن ندخل في مقارنات ونناقش الأسلوب والسرعة فالدالة التي بموضوع القرآن الكريم أسرع بثلاث مرات ولن أقول لك لماذا ، حاول أن تعرفها بنفسك .

6 – كذلك الدالة الأولى بها خطأ وسيكتشفه لاحقا الأخ فهد بعد تكرار المحاولات ولن أقول لك ما هو أيضا .

7 – لولا طلب الأخ فهد مني التدخل لما تدخلت لما رأيت منك سابقا من حساسية زائدة من تداخلات الآخرين .

8 – آمل ردي هذا أن لا يمنعك من مواصلة المساهمة في برنامج مشروع القرآن الكريم .

تحياتي .

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

السلام عليكم

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

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

رد للأخ مهند :

في البداية أشكر أخي أبو هادي على متابعته الدؤوبة

1-

اقتباس

دالة changesearch() لا تحتوي على دالة Trim()

: كلامك صحيح .. وأنا كنت غلطان وكنت أظن أني قد وضعتها

2-

اقتباس

العلة ليست في أداة/عامل Like ولو استبدل الأخ فهد أداة = بأداة Like فسيعمل الكود ولكنك للآن لم تدرك الحل بعد .

أنا عندي عمل الكود بستعمال Like ... ولكن الأخ فهد أكد أن الكود باستعمال Like لم يعمل

3-

اقتباس

لقد قارنت بين أداة Like و (الأسلوب)!!! بدلا من المقارنة بين أداة Like و أداة = معللا أن أداة Like أسرع ونحن نقبل منك إذا دعمته بدليل إن أمكن

أظن أن الموضوع لا يحتاج إلى مناقشات .. أي واحد يجرّب في قاعدة تحتوي على أكثر من 1000 سجل يجرب البحث بالأسلوبين ويرى فرق التوقيت

4-

اقتباس

يوجد بالدالة الثانية دالة InStr() وكان بالإمكان استخدام أداة Like إلا إذا كانت InStr() أسرع ؟ ، آمل التوضيح .

التوضيح أني بالأساس مبرمج VB .. لذلك فإن ارتباطي بتعليمة InStr أكثر يعني متعوّد عليها ، كما أنه إذا سلّمنا بوجود مشكلة بعامل Like يغدو استعمال Instr أفضل في هذه الحالة

5- الدالة في القرآن الكريم لم أطّلع عليها بعد

6- بدون تعليق

7-

اقتباس

لولا طلب الأخ فهد مني التدخل لما تدخلت لما رأيت منك سابقا من حساسية زائدة من تداخلات الآخرين .

أخي أبو هادي أنا آسف جداً إذا بدى من ردودي أنني متحسس من تدخلات الآخرين .. إذا كان هذا ما أحسست به فأرجو أن تقبل اعتذاري الشديد

لأني - والله على ما أقوله وكيل - ليس عندي أي مشكلة من تدخلات تالآخرين ولا وجود لأي تحسس عندي من أي كان بالعكس فأنا أفرح عند تدخل الآخرين .. لأن كثرة الحوار بها الفائدة

8-

اقتباس

آمل ردي هذا أن لا يمنعك من مواصلة المساهمة في برنامج مشروع القرآن الكريم

معاذ الله أخي أبو هادي أن أكون صغير التفكير .. وما كان أملي أن يكون ظنك فيّ هكذا !!

تحياتي للجميع

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

رد للأخ أبو هادي :

السلام عليكم

أشكر تفهمك وقبولك ملاحظاتي وأود أن أعقب بالتالي :

اقتباس

2 - أنا عندي عمل الكود بستعمال Like ... ولكن الأخ فهد أكد أن الكود باستعمال Like لم يعمل

المشكلة كانت تكمن في تجاهل الهمزة لأحد طرفي المقارنة مع ترك الآخر والذي من المحتمل أن يحتوي على همزات كذلك ، هذه المشكلة فقط .

اقتباس

3 - أظن أن الموضوع لا يحتاج إلى مناقشات .. أي واحد يجرّب في قاعدة تحتوي على أكثر من 1000 سجل يجرب البحث بالأسلوبين ويرى فرق التوقيت

يعني أن هذه النتيجة غير موثقة وإنما اكتسبتها من واقع التجربة ، فلذلك كان الموضوع يستحق المناقشة والتأكد ، فكم منا دعته الظروف أن يقوم بمقارنة بين العاملين لألف سجل .

اقتباس

6- بدون تعليق

الدالة تخرج القيمة صفر ومطلوب تفاديه .

اقتباس

8 - معاذ الله أخي أبو هادي أن أكون صغير التفكير .. وما كان أملي أن يكون ظنك فيّ هكذا !!

ظني بك خيرا إن شاء الله ولكن أنا أحتاط أن لا أخسرك وأن أبقي عليك معينا وعضيدا .

تحياتي .

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

رد للأخ مهند :

أشكر الأخ أبو هادي على تفهمه لنواياي ومقاصدي

اقتباس

الدالة تخرج القيمة صفر ومطلوب تفاديه .

Dim Rec2Go As Long
  DoCmd.GoToRecord , , acLast
  Randomize
  Rec2Go = Int(Rnd(-Timer) * Me.Recordset.RecordCount - 1) + 1
  DoCmd.GoToRecord , , acGoTo, Rec2Go
أنت ترى معي أخي أبو هادي أنني أجمع الرقم واحد إلى Rec2Go لكي أتفادى الصفر .. إلا إذا كان عدد السجلات بالأساس صفر .. وفي هذه الحالة لتلافي حدوث خطأ يجب أن نضع سطر
On Error Resume Next

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

رد للأخ فهد

بارك الله في الجميع .

أخي أبو هادي .. أخي مهند .. أظن أن الدالة لا تتعامل مع التاء المربوطة (ةه) فالرسالة تخرج ( الكلمة غير متطابقة ) إذا كتبت في الأعلى ( فاطمه) وفي الحقل الأسفل ( فاطمة) أما بالنسبة للياء ( ي ى ) فهي تعمل كما هو الحال مع الهمزة يعني مظبوطة .

تحياتي ..

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

السلام عليكم

أخي فهد .. لقد جربت المثال مرة أخرى ورأيت أن هناك فرق بين استخدام = و Like حيث اشتغل الكود مع عامل = ولكنه لم يعمل مع عامل Like !!!! .

ومع ذلك أضفت لك دالة ReStr الموجودة بمشروع القرآن الكريم . جرب الآن واخبرنا بالنتيجة .

تحياتي .

توضيح.rar

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Important Information