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

*فورم* اكتب وابحث مباشرة

مغلق
بدأه ابوحمود في 3 أكتوبر 2001 · 40 رد · 7,599 مشاهدة · في قسم الأرشيف و المواضيع المميزه
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لإنشاء مربع نص عندما تكتب فيه يقوم بالبحث في حقل آخر موجود على النموذج بعد كتابة كل حرف فإذا وجد ما يطابق القيمة ينتقل إليه مباشرة ، في حدث عند مفتاح للأعلى ضع الكود التالي مع تغيير الأسماء :

' اسم مربع النص الذي يكتب فيه ابحث_عن واسم الحقل المبحوث فيه الاسم .

If Shift <> 0 Then Exit Sub
If Len(ابحث_عن.Text & "") = 0 Then
DoCmd.GoToRecord , , acFirst
Exit Sub
End If
If KeyCode = 35 Or KeyCode = 32 Then Exit Sub

DoCmd.GoToControl "الاسم"
DoCmd.FindRecord ابحث_عن, acStart, , acSearchAll, , acCurrent, True
DoCmd.GoToControl "ابحث_عن"

SendKeys "{END}"
If Shift <> 0 Then Exit Sub

ملاحظة هامة : يجب أن يكون اختيارك في مربع الحوار خيارات في لوحة التبويب لوحة المفاتيح انتقال بعد الإدخال إلى الانتقال الى بداية (أو نهاية) الحقل ليعمل الكود بشكل صحيح (انظر موضوع تغير خيارات مربع الحوار خيارات برمجيا لتعرف كيفية تغييره بالكود) .

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

#2

أخي / أبو حمود

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

لماذا حقل "ابحث_عن" لا يسمح بكتابة أكثر من حرف ؟

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

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

ولك تحياتي.

ibnmusqat.gif
#3

الأخ ابن مسقط

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

الأخ ابو حمود :

بارك الله فيك ولكن ملاحظتي على عملية البحث هذه أنها جيدا جدا فى حالة الحقل المنفرد أي الذي لا يتكرر . ولا ما رأيك .

أشرف خليل

#4

الأخ حمود

كم أنت رائع رائع رائع

وصدقني لقد ساعدت الكثير و الأجر لك إن شاء الله من العلي القدير

سير على هذا التهج وفقك الله و رعاك في طاعته

لقد جربت الكود و كان رائع شكرا شكرا

#5

الأخ أشرف

شكراً على التوضيح وبالفعل أصبح الآن الكود يعمل بشكل رائع.

وأنا أتفق معك في ملاحظتك حول الحقل الفريد والحل البديل في رأي يمكنك أن تجعل عملية البحث تستند

إلى حقل أخر فريد ومميز كرقم أو ما شابه ذلك.

والله الموفق ...

ibnmusqat.gif
#6

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

#7

الأخوان ابن مسقط أشرف طلال

حياكم الله وأشكركم على تجاوبكم مع الموضوع .

الأخ أشرف

ملاحظة جيدة منك جعلتني أعدل الكود ليبحث في حقل تتكرر فيه البيانات .

اجعل اختيار لوحة المفاتيح سلوك إدخال الحقول بدون تحريك .

 
Private Sub ابحث_عن_KeyUp(KeyCode As Integer, Shift As Integer)
If Shift <> 0 Then Exit Sub
If Len(ابحث_عن.Text & "") = 0 Then
DoCmd.GoToRecord , , acFirst
Exit Sub
End If
' عند ضغط Enter
If KeyCode = 13 And Shift = 0 Then
DoCmd.GoToControl "الاسم"
DoCmd.FindRecord ابحث_عن, acStart, , acSearchAll, , acCurrent, False
DoCmd.GoToControl "ابحث_عن"
Exit Sub
End If

If KeyCode = 35 Or KeyCode = 32 Then Exit Sub

DoCmd.GoToControl "الاسم"
DoCmd.FindRecord ابحث_عن, acStart, , acSearchAll, , acCurrent, True
DoCmd.GoToControl "ابحث_عن"
SendKeys "{END}"
If Shift <> 0 Then Exit Sub
If ابحث_عن <> Left(الاسم, Len(ابحث_عن)) Then
If KeyCode = 8 And Shift = 0 Then Exit Sub
MsgBox "لا يوجد أحد بهذا الاسم ."
If Len(ابحث_عن) = 1 Then ابحث_عن = ""
End If
End Sub

اضغط Enter للبحث عن التالي .

لكن مازال يوجد فيه عيب أو سمه نقص كبير وسأترك ذلك للمجتهد منكم أن يعرفه وبانتظار ردودكم .

ولكم تحياتي

#8

أخي أبو حمود : كيف حالك

طلعت عيني فى الكود الجديد ولكن وصلت لما يلي :

تقف عمل السطر التالي

If ابحث_عن <> Left(الاسم, Len(ابحث_عن)) Then

مع end if يعمل الكود

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

وقد جربت ذلك على أكسيس 97 و 2000 وكلاهما أعطى نفس النتيجة .

أشرف خليل

#9

أخي أبو حمود :

سهران والله علشان الكود هذا فقررت أنا أو هو

المهم أوقفت عمل الأسطر التالية

If ابحث_عن <> Left(الاسم, Len(ابحث_عن)) Then 
If KeyCode = 8 And Shift = 0 Then Exit Sub 
MsgBox "لا يوجد أحد بهذا الاسم ." 
If Len(ابحث_عن) = 1 Then ابحث_عن = "" 
End If

وبعدها اشتغل الكود زي أبو حمود أقصد زي العسل

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

أتمنى أكون تلميذك

أشرف خليل

#10

الاخ ابو حمود الاخ اشرف الاخوة الافاضل

فعلا انتم مكسب لكل عضو او زائر لهذا المنتدي الرائع

والذي اتحفتموه بوجودكم عاجزين عن الشكر علي هذا الكود الرائع

هناك ايضا ملاحظة علي الكود هل يمكن ان يعمل هذا الكود علي

مربع القائمة خاصة اذا كان هذا المربع يأخذ قيمه من جدول

يعتمد علي رقم واسم فاذا وضعنا الاسم في مربع النص الموجود به الكود لا يذهب الي السجل ولكن اذا وضعنا رقم يذهب الي السجل

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

ومرة اخري نشكركم علي جهودكم الرائعة في رفع مستوي هذا المنتدي وجزاكم الله عنا كل خير

#11

أخي أبو حمود

لقد قمت بتجربة الكود الثاني

ووجدته يعمل ويلبي كل مطالبي ولم أستطع أن أوجد ثغرة أو نقطة ضعف بل أنه بالنسبة لي رائع وعظيم.

فإذا كان به عيب فإرحنا من ذلك العيب فالعين لا تطلع عن الحاجب.

ibnmusqat.gif
#12

الأخوة

حياكم الله .

الأخ طالب علم

مازالت أحاول في طلبك وقد نجح ولكن مازل فيه بعض النقص .

الأخ ابن مسقط

عيب الكود أنني لم أستطع أن أجعله يظهر رسالة إذا لم يجد اسم بعد ضغط Enter بل يظل صامتا .

هل لديك حل لذلك .

سأكتب لكم طريقة للبحث ببداية الاسم أو بجزء منه أو بنهايته عن طريق التصفيه .

ولكم تحياتي

#13

الأخ أشرف

لقد راجعت الكود مرة أخرى ولم أجد ما قلت اعتقادي أنك لم تنتنبه لملاحظتي في الأعلى :"اجعل اختيار لوحة المفاتيح سلوك إدخال الحقول بدون تحريك ." وما قمت أنت بإلغائه هو خاص بإظهار رسالة عندما لا يجد الشخص المطلوب فمثلا إذا كان جميع الأسماء لا يوجد فيها اسم يبدأ بحرف سين ثم كتبت في مربع النص ابحث_عن س فسوف تظهر لك الرسالة مباشرة هذا هو الهدف منه حتى لا يستمر المستخدم في الكتابة دون أن ينتبه أنه لا يوجد أحد بهذا الاسم .

وللفائد غير acStart الموجودة في العبارة :

DoCmd.FindRecord ابحث_عن, acStart, , acSearchAll, , acCurrent, False

بأحد الثوابت التالية :

acAnywhere ليبحث في أي جزء من الاسم يعني لو كتب حم فسوف يظهر لك محمد ومحمود وأحمد وحمد وحماد وكذلك أي اسم ينتهي بهذين الحرفين .

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

وبإمكانك وضع الجميع كخيار للمستخدم إما في مجموعة أزرار خيار أو أزرار تبديل أو غيرها .

طريقة جديدة بواسطة تطبيق تصفية على نموذج :

هذه الطريقة تقوم بتصفية على جميع السجلات على الحقل المسمى اسم الطالب ونوع بياناته نص حسب النص الموجود في مربع النص ابحث_عن_التالي انظر الخطوات :

1- أنشئ زر أمر باسم بحث_عن وضع له الكود التالي في حدث عند النقر :

Dim الاسم As String
If Me!بحث_عن.Caption = "بحث عن" Then
Select Case خيار_البحث
Case 1
الاسم = "Like '" & ابحث_عن_التالي & "*'"
Case 2
الاسم = "Like '*" & ابحث_عن_التالي & "*'"
Case 3
الاسم = "Like '*" & ابحث_عن_التالي & "'"
End Select
Me.Filter = "[اسم الطالب] " & الاسم
Me.FilterOn = True
Me!بحث_عن.Caption = "إلغاء البحث"
If Me.RecordsetClone.RecordCount = 0 Then
MsgBox "لايوجد أحد حسب التحديد ."
Me.FilterOn = False
Me!بحث_عن.Caption = "بحث عن"
End If
Else
Me.FilterOn = False
Me!بحث_عن.Caption = "بحث عن"
End If

2- أنشئ مجموعة أزرار خيار باسم خيار_البحث وضع فيها ثلاثة أزرار خيار الأولى عنوان مربع العنوان له يبدأ والثاني يتضمن والثالث ينتهي .

3- أنشئ مربع نص باسم ابحث_عن_التالي .

ضع أي نص في مربع النص المسمى ابحث_عن_التالي ثم اضغط زر الأمر ولإلغاء التصفية اضغط الزر مرة أخرى .

الأخ طالب علم

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

لو بحثت عن من يبدأ اسمه بحرف الألف وكان رقم أول واحد قرأه الكود من القائمة هو 1 فإنه سينتقل إلى :

أحمد عبدالله رقم 1

ثم يقفز التالي

أحمد فهد رقم 10

أحمد عبدالله رقم 1

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

Dim I As Byte
Dim الاسم As String
Dim رقم_البحث As Long

If Shift <> 0 Then Exit Sub
If Len(ابحث_عن.Text & "") = 0 Then
DoCmd.GoToRecord , , acFirst
Exit Sub
End If

الاسم = ابحث_عن.Text
' الاسم الحالي يبدأ بنفس المطلوب
' عند ضغط Enter
If KeyCode = 13 And Shift = 0 Then
    'DoCmd.GoToRecord , , acNext
    I = القائمة_المبحوث_فيها.ListIndex + 1
    For I = I To القائمة_المبحوث_فيها.ListCount - 1
            رقم_البحث = القائمة_المبحوث_فيها.Column(0, I)

            If الاسم = Left(القائمة_المبحوث_فيها.Column(1, I), Len(الاسم)) Then
            DoCmd.GoToControl "القائمة_المبحوث_فيها"
            If رقم_البحث = Left(القائمة_المبحوث_فيها.Column(0, القائمة_المبحوث_فيها.ListIndex), Len(الاسم)) Then
            DoCmd.FindRecord رقم_البحث, acEntire, , acDown, , acCurrent, False
            Else
            DoCmd.FindRecord رقم_البحث, acEntire, , acDown, , acCurrent, True
            End If
            DoCmd.GoToControl "ابحث_عن"
            Exit Sub
            End If
      Next I
End If
If KeyCode = 35 Or KeyCode = 32 Then Exit Sub

'=======================

' الاسم الحالي لا يبدأ بالمطلوب

'=======================

    For I = I To القائمة_المبحوث_فيها.ListCount - 1
    ' إذا وجدت بداية اسم تطابق فانتقل للرقم
        If الاسم = Left(القائمة_المبحوث_فيها.Column(1, I), Len(الاسم)) Then
        رقم_البحث = القائمة_المبحوث_فيها.Column(0, I)
        DoCmd.GoToControl "القائمة_المبحوث_فيها"
        DoCmd.FindRecord رقم_البحث, acStart, , acSearchAll, , acCurrent, True
        DoCmd.GoToControl "ابحث_عن"
        Exit Sub
        End If
    Next I

SendKeys "{END}"
If Shift <> 0 Then Exit Sub
If ابحث_عن <> Left(الاسم, Len(ابحث_عن)) Then
If KeyCode = 8 And Shift = 0 Then Exit Sub
MsgBox "لا يوجد أحد بهذا الاسم ."
If Len(ابحث_عن) = 1 Then ابحث_عن = ""
End If

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

أما باستخدام قائمة يتم اختيار اسم منها فيتم الإنتقال مباشرة فالأمر سهل جداً :

أنشئ قائمة أخرى تماثل القائمة التي يتم البحث فيها مع وضع قيم فريدة إلى لا حتى لا تتكرر البيانات ثم في حدث بعد التحديث ضع الكود التالي :

Dim Num As String
Num = قائمة_البحث.Column(0, قائمة_البحث.ListIndex)

DoCmd.GoToControl "القائمة_المبحوث_فيها"
DoCmd.FindRecord Num, acEntire, , acSearchAll, , acCurrent, False
DoCmd.GoToControl "قائمة_البحث"

وللإنتقال للشخص التالي بنفس الاسم اختر نفس الاسم من القائمة مرة أخرى .
أو ضع السطر التالي في حدث عند مفتاح للأعلى لقائمة البحث :
[code]If KeyCode = 13 And Shift = 0 Then Call قائمة_البحث_AfterUpdate

للإنتقال بواسطة ضغط Enter .

وهذه طريقة للبحث بواسطة DAO

أنشئ مربع نص للكتابة فيه باسم بحث_جديد وفي حدث عند مفتاح للأعلى ضع الكود التالي لكن لا حظ أنه يلزمك تغيير عبارة SQL الموجودة في الكود وكذلك يلزم وجود حقل في الجدول ترقيم تلقائي ووجود هذا الحقل على النموذج .

أنشئ استعلام جديد وطبق الكلام التالي :

في عبارة SQL افترضت أنه يوجد لديك جدولين بينهما علاقة رأس بأطراف الجدول الأول الرأس (اسمه في العبارة التي كتبتها جدول أسماء الطلاب) يحوي الأسماء والجدول الثاني المبني عليه النموذج (اسمه في عبارتي جدول البيانات الشخصية للطلاب) وحقلي الربط في الجدولين رقم الطالب ، وضعت في شبكة الاستعلام حقل تسلسل (ترقيم تلقائي) من الجدول الثاني وحقل رقم الطالب واسم الطالب من الجدول الأول وفي معيار لحقل اسم الطالب وضعت العبارة Like [Forms]![بحث في قائمة منسدلة]![بحث_جديد] & "*" لاحظ أن النموذج عندي اسمه بحث في قائمة منسدلة وحقل الكتابة اسمه بحث_جديد ، انسخ عبارة SQL من الاستعلام وألصقها في الوحدة النمطية لاحظ أنها ستكون على عدة اسطر اجعلها على سطر واحد مع الانتباه لكيفية وضعي لعبارة الاسناد السابقة Like [Forms]![بحث في قائمة منسدلة]![بحث_جديد] & "*" انظر الكود وطبق مثله .

Dim db As Database
Dim rst As Recordset

If KeyCode = 35 Or KeyCode = 32 Then Exit Sub
If Shift <> 0 Then Exit Sub
If Len(بحث_جديد.Text & "") = 0 Then
DoCmd.GoToRecord , , acFirst
Exit Sub
End If

Set db = Application.CurrentDb
Set rst = db.OpenRecordset("SELECT [جدول البيانات الشخصية للطلاب].تسلسل, [جدول أسماء الطلاب].[رقم الطالب], [جدول أسماء الطلاب].[اسم الطالب] FROM [جدول أسماء الطلاب] INNER JOIN [جدول البيانات الشخصية للطلاب] ON [جدول أسماء الطلاب].[رقم الطالب] = [جدول البيانات الشخصية للطلاب].[رقم الطالب] " _
& "WHERE ((([جدول أسماء الطلاب].[اسم الطالب]) Like " & "'" & [Forms]![بحث في قائمة منسدلة]![بحث_جديد].Text & "*')) " _
& " ORDER BY [جدول البيانات الشخصية للطلاب].تسلسل; ")

If rst.RecordCount = 0 Then
MsgBox "لا يوجد أحد بهذا الاسم ."
rst.Close
بحث_جديد = ""
Exit Sub
End If

If KeyCode = 13 And Shift = 0 Then
rst.FindFirst "تسلسل> " & [Forms]![بحث في قائمة منسدلة]![تسلسل]
End If

DoCmd.GoToControl "تسلسل"
DoCmd.FindRecord rst![تسلسل], acEntire, , acSearchAll, , acCurrent, True
DoCmd.GoToControl "بحث_جديد"
rst.Close

SendKeys "{END}"

ولك تحياتي

#14

الأخ أبو حمود :

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

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

معلش تحملنا شوية وأنت الكبير .

أشرف خليل

#15

الأخ أشرف

ما فهمت ما هي المعلمة التي تظهر لك ؟

لاحظ أنني في الكود جعلت التصفية على حقل اسم الطالب ويجب أن تغيره أنت لحقل نصي ترغب التصفية عليه .

والطريقة أن تكتب في مربع النص اسم أو حرف ثم تضغط زر الأمر فيتم تصفية السجلات على حسب اختياراتك .

اعتقد المشكلة عندك في اسم الحقل تأكد من تغييره .

ولك تحياتي

#16

الأخ أبو حمود :

عذرا فالمشكلة كانت بجهاز المنزل وقد جربت الكود الجديد على جهاز العمل بكان جيد وإليك الملاحظات :

1- لا يتم تحريك علامة الإدخال إلا بزر tab وليس الإنتر

2- إذا كان من ضمن الحقول حقل رقمي فإن علامة الإدخال تأتي بجانب الصفر وهو رمز الحقل الرقمي مما يؤدي إلى كتابة صفر زيادة مع الرقم لو أردت كتابة رقم 10 فسوف يظهر 100 فلابد من حذف الصفر أولا لكتابة الرقم صحيح .

3- فى عملية البحث الجديدة كتبت بمعيار البحث حرف (م) واخترت يبدأ بـ فكانت النتيجة أنه عرض الحقول التي تبدأ بحرف م في جميع الحقول وليس الحقل المحدد فقط بمعنى

لدي حقل الاسم به اسم محمودواسم اشرف وحقل المهنة ( مهنة محمود = دكتور ومهنة اشرف محاسب) فعند عرض البيانات ظهر محمود واسم اشرف باعتبار أن اشرف محاسب يبدأ بحرف ميم .

والله المعين .

أشرف خليل

#17

الأخ أشرف

قلت الكود الجديد أي واحد فالموضوع فيه أكثر من كود .

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

الأمر الثاني لم أعمل أي تحريك بعد التصفية وإن رغبت عملت المطلوب حسب المفتاح الذي ترغب فيه .

فقرة (2) لا أدري ماهو الكود الذي طبقته لأنظر سبب المشكلة .

وفقك الله .

ولك تحياتي

#18

الأخ العزيز أبو حمود

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

على اكسيس 2000

http://mypage.ayna.com/ashrafk/search.mdb

أشرف خليل

#19

الأخ أشرف

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

بقية الكود سليم بعد تعديلي لعنوان الزر اشتغل .

انتظر منك ملاحظة أو فكرة إضافية .

أعانك الله .

ولك تحياتي

#20

أخي أبو حمود :

تغيير عنوان زر البحث لم يؤثر فى شيئ ولكن ما توصلت إليه ما يلي :

أولا : قمت بزيادة عدد الأسماء إلى 28 اسم

ثانيا : عند كتابة معيار البحث سواء كان يبدأ بـ أو يتضمن أو ينتهي بـ فإنه يعرض على النموذج أول سجل من الذي تم تصفيتهم من الأسماء وعند الضغط على الزر بحث عن مرة أخرى فإنه يرجع إلى أول سجل بالأسماء .

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

كمثال لو أخذت اسم عبد الله وخيار البحث يتضمن ستجد بشريط التمرير 1 من 7 ( تم تصفيته ) وعند الضغط على زر التالي بشريط التمرير يقوم بعرض الأسماء واحد تلو الآخر .

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

فى هذا الملف نفس القاعدة بعد تغيير اسم الزر والأسماء كلها

http://mypage.ayna.com/ashrafk/search.zip

وتحياتي إليك

أشرف خليل

#21

الأخ أشرف

"تغيير عنوان زر البحث لم يؤثر فى شيئ " يؤثر في ماذا لم أفهم عبارتك ، لقد وضحت أنا أن الكود يقوم بالتصفية فقط دون انتقال ، وتغيير عنوان الزر هو الذي يجعل الكود يعمل .

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

 Dim الاسم As String
If Me!بحث_عن.Caption = "بحث عن" Then
Select Case خيار_البحث
Case 1
الاسم = "Like '" & ابحث_عن_التالي & "*'"
Case 2
الاسم = "Like '*" & ابحث_عن_التالي & "*'"
Case 3
الاسم = "Like '*" & ابحث_عن_التالي & "'"
End Select
Me.Filter = "[اسم الطالب] " & الاسم
Me.FilterOn = True
Me!بحث_عن.Caption = "إلغاء البحث"
DoCmd.GoToControl "ابحث_عن_التالي"
If Me.RecordsetClone.RecordCount = 0 Then
MsgBox "لايوجد أحد حسب التحديد ."
Me.FilterOn = False
Me!بحث_عن.Caption = "بحث عن"
Else
نتيجة_البحث.Visible = True
Me.RecordsetClone.MoveLast
نتيجة_البحث.Caption = "لقد عثرت على :" & vbCrLf _
& Me.RecordsetClone.RecordCount
End If
Else
Me.FilterOn = False
Me!بحث_عن.Caption = "بحث عن"
نتيجة_البحث.Visible = False
End If

ولتحريك السجلات ضع في حدث عند مفتاح للأعلى لمربع النص ابحث_عن_التالي الكود التالي دون تغيير أي شيء :

 
If KeyCode = 13 And Shift = 0 Then
If Me.NewRecord = False Then
DoCmd.GoToRecord , , acNext
Else
DoCmd.GoToRecord , , acFirst
End If
End If

اضغط Enter وسينتقل للسجل التالي .

ولك تحياتي

#22

الأخ أبو حمود :

عذا للتأخر بالرد

جربت الكود الأخير ولكن المشكلة لدي تكمن بهذا السطر

نتيجة_البحث.Caption = "لقد عثرت على :" & vbCrLf _

& Me.RecordsetClone.RecordCount

عندما اضغط debug يقف عند caption وضعت فى أول السطر me! وضغطت debug مرة أخرى فلم يقف على كلمة العنوانcaption ولكن لم يعمل الكود كما قلت أيضا .

أشرف خليل

#23

الأخ أشرف

أظن أنك نسيت أن تعمل مربع عنوان Label باسم نتيجة_البحث .

جرب ذلك واكتب النتيجة .

ولك تحياتي

#25

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

اخيك طالب علم 2002

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

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