الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

مغلق
بدأه فهد الدوسري في 3 يونيو 2004 · 19 رد · 3,736 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

السؤال الأول : كيف أستطيع تغيير السجل الحالي في كل مرة أفتح فيها النموذج ؟

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

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

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

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

clarification.rar

#3

بالنسبة للسؤال الثاني فإن الFunction الذي كتبته فوق للسيد أبو هاجر غير صحيح ..

وهذا Function عملته لنفس الموضوع :

Function changesearch(Mytxt) As String
   Dim tempstr As String
   tempstr = Nz(Mytxt, "")
   tempstr = ReplaceChar(tempstr, "أإآا")
   tempstr = ReplaceChar(tempstr, "ةه")
   tempstr = ReplaceChar(tempstr, "ىي")
   changesearch = tempstr
End Function

Private Function ReplaceChar(W As String, C As String) As String
   Dim R As Byte
   Dim S As String, I As String
   For R = 1 To Len(W)
      I = Mid(W, R, 1)
      If InStr(C, I) > 0 Then
         S = S & "[" & C & "]"
      Else
         S = S + I
      End If
   Next R
   ReplaceChar = S
End Function

تم تعديل هذه المشاركة بواسطة مهند عبادي في 3 يونيو 2004 في 16:59

#4

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

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

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

ولك تحياتي ..

#6

أخي مهند شكرا لك

حاولت تجربة المثال الذي قمت أنت بتطبيق الدالة الثانية عليه وجدت ما يلي :-

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

ما أدري ما هو السبب .

تحياتي ..

#8

السلام عليكم

بعد اذن الاخ مهند

أخي فهد

راجع هذا الموضوع

http://www.officena.com/ib/index.php?showt...=1912&hl=الهمزة

#9

أخي فهد الدوسري ،،، لقد عمل معي المثال الذي وضعه الاستاذ / مهند

100 %

للمعلومية

المسلم من سلم الناس من لسانه ويده

#10

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

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

جهازي يعمل على ويندوز ملينيوم والأوفيس فيه هو أكس بي فهل لذلك تأثير أو أنه يريد إضافة مرجع معين أو ماذا يا ترى ؟؟؟!!!!!!!!!!!

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

تحياتي ..

تم تعديل هذه المشاركة بواسطة فهد الدوسري في 4 يونيو 2004 في 16:57

#11

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

#13

عموماً أستاذي مهند ( كفيت ووفيت وما حصل منك تقصير) وأنا أشكرك من كل أعماق قلبي على سعة صدرك وتقبل إزعاجي .

تحياتي ..

#15

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

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

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

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

#16

أيضا

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

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

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

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

أيضا توجد اضافة من الأخ أبو هادي هنا

http://www.officena.com/ib/index.php?act=S...st=0#entry16856

#17

أصبحت الوحدة النمطية تعمل على ما يرام بعد تعديل الأستاذ أبو هادي

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

If Arabic_word Like changesearch(Arabic1) Then

بهذا السطر :

If changesearch(Trim(Arabic_word)) = changesearch(Trim(Arabic1)) Then

تحياتي لكل من تعب معي .

تم تعديل هذه المشاركة بواسطة فهد الدوسري في 5 يونيو 2004 في 18:12

#18

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

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

f changesearch(Arabic_word) = changesearch(Arabic1) Then
#19

نبهني الأخ أبو هادي إلى أن Trim غير موجودة في الدالة changesearch وكنت أحسبها موجودة سهواً ..

لذلك إما أن تعود إلى سطر أخي أبو هادي أو أن تضيف هذا السطر في برمجة الدالة changesearch بعد سطر :

 Tempstr = Nz(Mytxt, "")
  Tempstr = Trim( tempstr )
#20

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

تحياتي ..

هذا الموضوع مغلق.

مواضيع مشابهة