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

مساعدة: البحث في قواعد البيانات مع تجاهل تشكيل الحروف (أرجو الاهتمام)

بدأه السندبااد في 20 أبريل 2008 · 14 رد · 4,411 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته وجمعة مقبولة منكم جميعاً بإذن الله تعالى

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

إضافة إلى أنني قمت بتحميل البرامج التي تعتبر خاصية البحث فيها شيئاً أساسياً

كبرنامج خزانة المقالات الإسلامية وتفسير الأحلام وإحصائيات في القرآن

فوجئت عندما وجدت بأنها كلها تتجاهل أمراً هاماً ألا وهو التشكيل

مثلاً:

إذا بحثت عن لفظ الجلالة "الله" في سورة الإخلاص فستصدم حين ستكون نتائج البحث صفراً

السبب أن النص مكتوب في قاعدة البيانات بالتشكيل

وإذا أردت البحث عنه فيجب أن تكتبه في خانة البحث بالتشكيل

وهذه مشكلة كبيرة للغاية؛ فالمستخدم لا يعرف: هل الكلمة مشكولة بأكملها أم نصفها أم آخرها؟

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

ما نريده ونتمناه هو:

1- عندما نكتب لفظاً ما فيبحث عنه حتى ولو كان مشكولاً في قاعدة البيانات.

فنكتب لفظ الجلالة "الله" بدون تشكيل فتخرج لي نتائج البحث بكل أشكالها (اللّهُ-اللهَ-اللهِ)

وبذلك نتجاهل الحركات الإعرابية إضافة إلى الشدة.

2- عندما نكتب في خانة البحث نصاً مشكولاً فيقوم بإخراج النتائج لي حتى ولو كان التشكيل خطأ.

مثلاً: نكتب لفظ الجلالة "اللَّهُ" مشدداً ومضموماً فتخرج لي نتائج اللفظ كاملةً (الله "بدون تشكيل"- اللهِ"بالكسر"- اللهَ "بالفتح")

باختصار: نريد أن لا يتم اعتبار أي قيمة للتشكيل عندما يوضع للكلمة في خانة البحث حتى ولو كان خطأً.

3- تجاهل "الـ" التعريف في البحث

فإذا كتب (الرحمن) تخرج لي النتائج وإذا كتبت (رحمن) تخرج لي نفس النتائج

انتبه: إذا كتبت "حمن" لا يجوز أن تخرج لي أي نتيجة فالطلوب تجاهل "الـ" التعريف فقط!!

4- وهذه غير مهمة ولكن من باب الاستفسار: هل يمكن معاملة همزة القطع كهزة الوصل؟

أي: (أ = ا ) -- و -- (ا=أ).

فإذا كتب في خانة البحث (الاخلاص) بدون همزة تخرج لي : (الإخلاص) مهموزة.

وإذا كتب (اياك) بدون همزة تخرج لي النتائج من ضمنها (إياك) مهموزة.

بالمقابل إذا كتبت (إهدنا) مهموزة تخرج لي: (اهدنا) غير مهموزة.

لا يسعني في النهاية إلا أن أقدم لكم التحايا وأرجو منكم الاهتمام في الموضوع بشكلٍ جادٍ

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

أسأل الله أن يجمعنا على محبته وطاعته

حياكم الله

يتبع ...

فاعلم أنه لا إله إلا الله

#2

يعلم الله كما بحثت من أجل هذا الأمر ليس هنا فحسب بل في النت عامّة

وأرجو من الأخوة أن لا يقولوا لي راجع الرابط الفلاني والرابط العلاني

لأنني لم أجد بغيتي في أيٍّ منها

تفضلوا روابط لها صلة ولكنها لا تحل المشكلة

الأول

الثاني

الثالث

الرابع

الخامس

السادس في الدوت نت

الأمر الذي ةصلت إليه لهذه اللحظة هو القدرة على تحويل النص من مشكل إلى نص غير مشكل

انظروا المرفقات

_______________.rar

فاعلم أنه لا إله إلا الله

#3

الأخ الكريم ، لما كل ها القلق !!!

يمكنك منع المستخدم من إدخال القيمة من أساسة ، ولكن أخي أنا بجد كنت أفكر في موضوع الـ Replace لكنين وجدت فعلياً أنها لا تعمل من داخل الفيجوال 6.0 ، وللأسف لم أنتبه من ذلك ، حيث أن الأوراكل تحتوي علي هذه الدالة وأعمل بها من داخل الفيجوال بنجاح !!!

لكن يمكن حل آخر ، وهو عدم إتاحة المستخدم من إدخال أي حروف أخري إلا الحروف المختارة ، وهذا هو الذي يتبعة الكثيرون ، أنظر الكود التالي :

Private Sub Text1_KeyPress(KeyAscii As Integer)
	Dim strFind As String

	strFind = "ابتثجحخدذرزسشصضطظعغفقكلمنهةويى "

	If (InStr(strFind, Chr(KeyAscii)) = 0) Then KeyAscii = 0
End Sub

فلا تقيد نفسك بشيء واحد ، وإن كان لديك قاعدة بيانات تعمل فعلياً علي هذا الأساس ، فلا بأس ، يمكنك إنشاء View Update يقوم بالتعديل علي الحقل بحيث أن يلغي كل عملياتة كما يلي :

Update Emp Set Emp_Name = Replace(Emp_Name,"أ","ا")

وذلك من داخل قاعدة البيانات ، وبعدها قم بضبط البيانات الجديدة المدخلة

شكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#4
MMA_EG_Cairo كتب:
الأخ الكريم ، لما كل ها القلق !!!

يمكنك منع المستخدم من إدخال القيمة من أساسة ، ولكن أخي أنا بجد كنت أفكر في موضوع الـ Replace لكنين وجدت فعلياً أنها لا تعمل من داخل الفيجوال 6.0 ، وللأسف لم أنتبه من ذلك ، حيث أن الأوراكل تحتوي علي هذه الدالة وأعمل بها من داخل الفيجوال بنجاح !!!

لكن يمكن حل آخر ، وهو عدم إتاحة المستخدم من إدخال أي حروف أخري إلا الحروف المختارة ، وهذا هو الذي يتبعة الكثيرون ، أنظر الكود التالي :

Private Sub Text1_KeyPress(KeyAscii As Integer)
	Dim strFind As String

	strFind = "ابتثجحخدذرزسشصضطظعغفقكلمنهةويى "

	If (InStr(strFind, Chr(KeyAscii)) = 0) Then KeyAscii = 0
End Sub

فلا تقيد نفسك بشيء واحد ، وإن كان لديك قاعدة بيانات تعمل فعلياً علي هذا الأساس ، فلا بأس ، يمكنك إنشاء View Update يقوم بالتعديل علي الحقل بحيث أن يلغي كل عملياتة كما يلي :

Update Emp Set Emp_Name = Replace(Emp_Name,"أ","ا")

وذلك من داخل قاعدة البيانات ، وبعدها قم بضبط البيانات الجديدة المدخلة

شكراً

السلام عليكم ورحمة الله وبركاته

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

بالنسبة لردك أخي الحبيب

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

عند البحث ستكون النتيجة صفراً

لا يهمني تقيد المستخدم لأن المستخدم أصلا سيدخل النص بدون التشكيل

المشكلة هي: عندما تكتب كلمة غير مشكولة مثل "الرحمن" لتبحث عنها في سورة الفاتحة فستكون النتائج صفر للأسف

لأن النص في الفاتحة مشكول

عند القاعدة التي أرفقتها خيار البحث فيها جاهز وفيها سورتي الفاتحة والإخلاص

ليتك تجرب طريقتك وترفق الملف لنرى هل ستنجح فكرتك

فأنا لا أتحدث عن كلمة بعينها أتحدث عن نص كامل

أيضاً في ملفي المرفق عملت تجربة وهي : كود يقوم بنقل النص المشكول ويجعله غير مشكول في تكست آخر

هنالك شيء أثار اهتمامي وحفيظتي:

في البرامج التي تدعم الخصائص السابقة لاحظت الأمر التالي:

عند البحث عن كلمة تخرج النتائج في DataGrid1 غير مشكولة

وعند اختيار أي نتيجة ليتم عرض في التيكست تجدها في التيكست مشكولة

علماً أن النص في قاعدة البيانات مشكول.

؟!؟!؟

برأيي المتواضع أن النص يذهب للذاكرة

بصراحة الموضوع سبب لي أرق

أرجو منكم فعلا الاهتمام فالمسألة حساسة وهامة للغاية

بارك الله بك أخي الحبيب وأنتظر تجربتك على الملف المرفق السابق

فاعلم أنه لا إله إلا الله

#5

فهمتك أخي ، وأنت علي حق من هذه الناحية ، ولكن أخي مشكلة الـ Access ضعيفة جداً ، بالإضافة الي ذلك أن اللغة العربية معقدة جداً !!!

فأنا كان رأيي أن تستبدل قيم الحقل نفسة في حالة الـ Select فقط لا غير بحيث أن أي قيمة مدخلة يتم إستبدالها بحروف مبدئية ، وأي قيمة مرتجعة من قاعدة البيانات يتم إستبدالها بقية أخري !!!

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

صراحتاً أنا فكرتي أن نستخدم الأمر Replace بحيث أن يحول قيمة معينة الي قيمة أخري ، ولكن للأسف يعتبر كود DBA خاص بالأكسيس فقط لا غير ، أما أوراكل فيحتوي علي نفس الدالة ، ولكن هناك دالة أخري تدعي Translate أفضل بكثير من Replace .

لكن أخي أنا لدي طريقة أخري ، هي صحيح غير جيدة ، ولكنها الي حدٍ ما حل مبدئي ، وهو فتح كافة البيانات الموجودة بالجدول ، ومن ثم إجرا Loop علي كافة السجلات بحيث أن يرتجع سجل سجل علي الجريد في حالة تحققة !!!

مثال ، نفرض أن لدينا جدول يدعي Emp ، وبه حقل يدعي Emp_Name ، ويرغب المستخدم في البحث عن كلمة ( أبراهيم ) قم بالمرور علي كافة الحروف أولاً ، وإذا وجدت به أي حرف غير لائق غيرة للحرف اللائق ، يعني الحرف ( أ ) غيرة الي الحرف ( ا ) .

بعد ذلك قم بإجراء Loop علي كافة السجلات في الـ Recordset ، وأقتبس إسم الموظف علي متغير ، ومن ثم أفعل بالمتغير مثلما فعلت في المدخل ، إذا وجدت الحرف ( إ ) غيرة الي ( ا ) .

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

كذلك يمكن هكذا في ملف البيانات Data File وليس Data Base

أنظر المرفق

شكراً

Simble.rar

تم تعديل هذه المشاركة بواسطة MMA_EG_Cairo في 21 أبريل 2008 في 09:44

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#6

السلام عليكم ورحمة الله وبركاته

أخي الحبيب أشكرك مجددا على متابعتك

النقطة الهامة هي في إخراج نتائج البحث داخل DataGrid1

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

وهذا ما نستفيد منه

فالغاية بعد أن تخرج النتائج نقوم بالضغط على أي نتيجة لنرى المعلومة المرتبطة فيها

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

ومن ثم تخرج البيانات في DataGrid1 غير مشكولة

عند الضغط على أي نتيجة ترى المعلومات والنص المرتبط فيها إما بالتيكست أو بالريش

والمسألة في خروج النتائج في DataGrid1 هنا تكمن المشكلة

فاعلم أنه لا إله إلا الله

#7
اقتباس
السلام عليكم ورحمة الله وبركاته

أخي الحبيب أشكرك مجددا على متابعتك

النقطة الهامة هي في إخراج نتائج البحث داخل DataGrid1

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

وهذا ما نستفيد منه

فالغاية بعد أن تخرج النتائج نقوم بالضغط على أي نتيجة لنرى المعلومة المرتبطة فيها

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

ومن ثم تخرج البيانات في DataGrid1 غير مشكولة

عند الضغط على أي نتيجة ترى المعلومات والنص المرتبط فيها إما بالتيكست أو بالريش

والمسألة في خروج النتائج في DataGrid1 هنا تكمن المشكلة

الأخ الكريم ، لما جعلتها مشكلة !!!

يمكنك حل مثل هذه المشكلة بطرق أخري ، علي سبيل المثال ، بدلاً من إستخدام آداة الـ DataGrid قم بإستخدام MSFlexGrid ، حيث أنك لا تحتاج منها إلا للإخراج فقط ، حيث قاعدة البيانات لا نستخدمها سوي في قراءة المعلومات وليس التخزين فيها بواسطة المستخدم !!!

بالإضافة الي ذلك ، هناك أدوات أخري أفضل بكثير من كل هذه الأدوات ، وعن نفسي أفضل إستخدام vsFlexGrid

لكن ، طالما أنت ترغب في هذه الآداة فإليك الحل الأمثل ، وهو بدلاً من عرض البيانات مباشرتاً بالـ ListBox قم بعرضها علي DataGrid ، وذلك بواسطة إنشاء Recordset وهمي أو غير مرتبط بقاعدة البيانات ، ومن ثم إدراج معلوماتك بداخلة كما تشاء ، وفي النهاية إعرض محتوياتة علي الجريد

أنظر المرفق

شكراً

Simble.rar

تم تعديل هذه المشاركة بواسطة MMA_EG_Cairo في 21 أبريل 2008 في 14:29

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#8

السلام عليكم ورحمة الله وبركاته

عمل رائع جزاك الله خيراً

قمت بتعديل المرفق وأضفت إليه الحركات الإعرابية ونجحت الفكرة

بقي ثلاث نقاطٍ

الأولى: أضفت لك تكست أريد أن يخرج فيه رقم الموظف .

الثانية: البحث يبحث كلمة كلمة وأنا أريده ممتد؛ مثلا في قاعدة البيانات (ولم يكن له كفواً أحد)

أريد عند كتابة أي كلمة من الآية السابقة أن يخرج الآية كاملة

في البحث العادي كنت أتخلص من هذه المشكلة بإشارة % قبل وبعد الكلمة

أما هنا فليتك تعدله لأنه لم تنجح معي

الثالثة: بقيت مشكلة الــ التعريف؛ أريد عند كتابة رحمن تخرج الرحمن

ألف شكر لك على جهدك المميز وتعاونك أخي الفاضل

Simble3.rar

تم تعديل هذه المشاركة بواسطة السندبااد في 22 أبريل 2008 في 03:44

فاعلم أنه لا إله إلا الله

#9

الأخ الكريم ، تحية طيبة وبعد ،

اقتباس
الأولى: أضفت لك تكست أريد أن يخرج فيه رقم الموظف .

أولاً ، إسمح لي أن أكرر لك شيء آخر ذكرتة من قبل ، وهو أن إمكانيات الت DataGrid ليست عالية من حيث التحكم الكلي للبيانات ، ولكن الآداة MSFlexGrid أفضل منها بكثير في الأمور الذي أشرت إليها ، حيث يمكنك إيجاد أحداث أخري تجعلك تصمم آداة رائعة من حيث الألوان وغيرها ، فياريت تنتقل إليها .

ثانياً ، يمكن ذلك من خلال حدث يدعي RowColChange ، حيث هذا الحدث يرسل لك قيمة 2 باراميتر تحدد لك هل هو في آخر صف LastRow ، أم في آخر عمود LastCol ، وعلي كلٍ أنت تحتاج الي الصفوف وليس الأعمدة ، فالباراميتر LastRow يمكنك إختبارة بحيث معرفة هل تم عرض بيانات أم لا ، ومن ثم تعرض الحقول التي تقف عليها بصف محدد .

ولكن إذا كنت ترغب في عرض بيانات من جدول آخر ، يمكنك إدراج عمود إضافي يمثل قيمة الـ PK الخاص بالجدول ، ومن ثم إخفائة من حيث تحديد عرض الجريد الي القيمة الصفية ( 0 ) ومن ثم جلب محتوياتة كما تشاء

اقتباس
الثانية: البحث يبحث كلمة كلمة وأنا أريده ممتد؛ مثلا في قاعدة البيانات (ولم يكن له كفواً أحد)

أريد عند كتابة أي كلمة من الآية السابقة أن يخرج الآية كاملة

في البحث العادي كنت أتخلص من هذه المشكلة بإشارة % قبل وبعد الكلمة

أما هنا فليتك تعدله لأنه لم تنجح معي

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

1- تشابه الوظيفتين :
Where Emp_Name Like '%Ahmed%'
Where InStr(Emp_Name,'Ahmed') > 0
----------------------------------------------------------
2- Like المجال الأوسع في :
Where Emp_Name Like '%A%d%' = Ahmed,Amgad,Asad, ...... ?

المهم أخي ، يمكن من خلال إستخدام دالة InStr من داخل الفيجوال يمكنك كل شيء ، وبقليل من التحايل يمكنك أيضاً صناعة كل شيء مثل Like .

اقتباس
الثالثة: بقيت مشكلة الــ التعريف؛ أريد عند كتابة رحمن تخرج الرحمن

سؤالك الثالث هو نفس سؤالك الثاني تقريباً

علي كلٍ ، ياريت تحاول تفهم الكود جيداً ، وسيختلف معك الأمر

شكراً

Simble.rar

تم تعديل هذه المشاركة بواسطة MMA_EG_Cairo في 22 أبريل 2008 في 04:32

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#10

السلام عليكم ورحمة اله وبركاته

بارك اله بك أخي الحبيب الفاضل

لقد قمت بتجربة مثالك الأخير على الكثير من قواعد البيانات التي يعتبر التشكيل فيها أمراً أساسياً

وقد قمت بالتعديل على الكود ليتجاهل كل "الــ" التعريف وكل ما أريد تجاهله

قمت بذلك بالتعديل على هذه الجزئية في الكود: وهذه هي بعد التعديل:

Case Chr(240), Chr(241), Chr(242), Chr(243), Chr(244), Chr(245), Chr(246), Chr(247), Chr(248), Chr(249), Chr(250)

حصلت على ملف من النت فيه كل أرقام الأحرف وعلامات الترقيم والحركات الإعرابية

بقي لدي طلبين لو تتكرم:

1- بصراحة لا أخفيك وجدت أن هذه الجزئية من الكود معقدة شيئاً ما وليست سلسة، وخاصة السطر الثاني:


If (InStr(ReplaceString(Rs!Emp_Name), ReplaceString(Text1.Text)) > 0) Then
oRs.AddNew
oRs!Emp_Code = Rs!Emp_Code
oRs!Emp_Name = Rs!Emp_Name
oRs.Update
End If
Rs.MoveNext
Loop
		Do While Not Rs.EOF

لأنني عند البحث في قواعد البيانات كنت أضع الكود التالي:

Adodc1.RecordSource = "select * from Parts where Description like'%" & X & "%'"

x متغير وهذا كان يجعلني أتحكم به بسلاسة أكثر

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

أنا لا أريد أن يتم تجاهل الأحرف الأخيرة، وهنا تكمن الصعوبة كيف سأعدل في كودك في الجزئية التي أشرت إليها

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

2- بالنسبة للأداة MSFlexGrid فهي لا تتعامل مع الآدو حاولت مراراً وتكراراً ولكن دون جدوى

فهي تتعامل مع الداتا فقط.وإلا فلا مانع لدي ..

3- إذا كانت نتيجة البحث واحدة فلماذا لا يمكن استعراضها في txtCode و txtName

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

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

فاعلم أنه لا إله إلا الله

#11
اقتباس
حصلت على ملف من النت فيه كل أرقام الأحرف وعلامات الترقيم والحركات الإعرابية

يمكنك جلب كافة الحروف الرئيسية المتاحة بلوحة المفاتيح كما يلي :

For X = 0 To 255
	List1.AddItem Chr(X)
Next

If (InStr(ReplaceString(Rs!Emp_Name), ReplaceString(Text1.Text)) > 0) Then

ياريت تفهم عمل InStr جيداً !!!

أولاً ، الدالة ReplaceString تقريباً مشابهة لدالة Replace ، ولكن يختلف عنها أن هذه الدالة دالة خاصة ، وأعتقد أنك فهمت عملها جيداً .

ثانياً ، بخصوص الدالة InStr ، فهي دالة تجلب لنا بداية موقع قيمة نصية معينة ، فنفرض أن لدينا جملة "Welcome To Arab Team" ، ونرغب في البحث عن كلمة "Arab" ، فيجب كتابتها في الصورة التالية :

X := InStr("Welcome To Arab Team","Arab") = 12

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

If (ReplaceString(Rs!Emp_Name) = ReplaceString(Text1.Text)) Then

اقتباس
مثلاً: في مرفقك الأخير ظهرت عندي مشكلة عندما أكتب "رحم" تظهر لي رحمن والرحمن وأنا لا أريدها

أنا لا أريد أن يتم تجاهل الأحرف الأخيرة، وهنا تكمن الصعوبة كيف سأعدل في كودك في الجزئية التي أشرت إليها

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

الأخ الكريم ، ما أفعلة بالمثال هو نفس ما طلبتة ، حيث أن الكلمة Like تنفذ نفس العملية المدرجة أو نفس عملية InStr ، أنظر :

like'%" & X & "%'"

فإذا أدخلت كلمة "رحم" ، ستعرض لك "رحمن" و "الرحمن" ، فنفس الغرض تقريباً !!!

إذاً ، فما المشكلة ، رجاء التوضيح أكثر ؟؟

اقتباس
2- بالنسبة للأداة MSFlexGrid فهي لا تتعامل مع الآدو حاولت مراراً وتكراراً ولكن دون جدوى

فهي تتعامل مع الداتا فقط.وإلا فلا مانع لدي ..

ها هي المصيبة ، كلنا نرغب في أبس الأكواد !!!!

لكن بأبسط طرق التحايل يمكننا صناعة كل شيء ، لكن إذا كنت ترغب مع آداة ترسل لها قيمة الـ Rs مباشرتاً فهناك آداة أحدث منها تدعي MSHFlexGrid ، علي العموم أنظر المثال المرفق .

اقتباس
3- إذا كانت نتيجة البحث واحدة فلماذا لا يمكن استعراضها في txtCode و txtName

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

أممممممممممممممممممممممممم

هل قرأت الكود جيداً ؟؟ هل فهمتة ؟؟

أخي الكريم ، من المفروض فهم الكود ، ومحاولة التعديل علية كما تشاء !!!

المهم ، انا عدلت علي إجراء FindRecords ، في نهايتة قمت بإستدعاء الحدث المناسب :

Call dg_RowColChange(0, 0)

وفي هذا الحدث قمت بمسح مربعات النص في البداية ، ومن ثم أرتجع القيم من جديد إذا وجد ( أنظر المرفق )

شكراً

Simble.rar

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#12

السلام عليكم ورحمة الله وبركاته

جزاك الله خيرا وأكرمك ووالديك الفردوس الأعلى

أرجو أن لا أكون قد استنفذت صبرك

صدق فهمت الكود جيداً إلى حدٍ ما ، وبالنسبة لفهمي المتواضع بقي هنالك مشكلة واحدة فقط:

في مرفقك الأخير هنالك الأسماء التالية:

إبراهيم أحمد إسماعيل

مجدي محمود إبراهيم

أبراهيم محمد إبراهيم

خالد حمدان العلي

عندما أبحث عن كلمة "حمد" يجب أن لا تخرج أي نتيجة، ولكن أصدم بخروج النتائج السابقة التي فيها الجذر "حمد" (وهذه غير محلولة في مرفقك)

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

حاولت التعديل، فكانت النتائج:

عندما أكتب "حمد" لا تخرج نتائج وهذا جيد

ولكن حدثت إشكالية وهي أنني عندما أكتب "أحمد" لا يخرج شيئاً

لأن قبله اسم وبعده اسم، فيجب كتابة الاسم كما هو في السجل "إبراهيم أحمد إسماعيل"

سؤال أخير لو تكرمت:

لو أردت استبدال حرف بحرف أكتب الكود التالي:


strChar = "ه"
 Case "ة"

طيب لنفرض أنني أريد استبدال حرفين متتاليين (مثل: ال التعريف أو غيرها) بفراغ أو بحرف آخر

كيف يتم كتابة الحرفين في الــ case ؟

أكرر شكري وامتناني لك أستاذنا الحبيب

فاعلم أنه لا إله إلا الله

#13
اقتباس

إبراهيم أحمد إسماعيل

مجدي محمود إبراهيم

أبراهيم محمد إبراهيم

خالد حمدان العلي

عندما أبحث عن كلمة "حمد" يجب أن لا تخرج أي نتيجة، ولكن أصدم بخروج النتائج السابقة التي فيها الجذر "حمد" (وهذه غير محلولة في مرفقك)

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

حاولت التعديل، فكانت النتائج

في مرفقك الأخير هنالك الأسماء التالية :

الأخ الكريم ، أعتقد أنك لم تفهمني جيداً في رسالتي السابقة !!!

شيء طبيعي أنه يرتجع لك كافة السجلات التي تحتوي علي جملة ( حمد ) ، حيث جملة الإستعلام ( '%حمد%' Like ) ترتجع أيضاً نفس السجلات أو نفس البيانات التي تحتوي علي جملة ( حمد ) ، فتعرض لك ( أحمد ، محمد ، .... الي آخرة ) ، لكن الإسمين يحتويات علي جملة ( حمد ) !!!

اقتباس
إبراهيم أحمد إسماعيل

مجدي محمود إبراهيم

أبراهيم محمد إبراهيم

خالد حمدان العلي

الأسماء ( إبراهيم أحمد إسماعيل - أبراهيم محمد إبراهيم - خالد حمدان العلي ) يحتويات علي جملة ( حمد ) لذلك من الصحيح إرتجاعهم ، أما بخصوص ( مجدي محمود إبراهيم ) ، فأعتقد أنك كتبتها خطأ ، حيث لا تحتوي علي جملة ( حمد ) ، وأنا جربتها لدي ولن يتم إرتجاعها ، ولكن إذا كانت الجملة ( حمد ) هي ( حم ) فقط فكانت يتم إرتجاعها ، حيث ( محمود ) يحتوي علي ( حم ) وليس ( حمد ) ، فكيف يرتجع لديك ها الإسم .... ياريت تجرب ثانيتاً

اقتباس

سؤال أخير لو تكرمت:

لو أردت استبدال حرف بحرف أكتب الكود التالي:


strChar = "ه"
 Case "ة"

طيب لنفرض أنني أريد استبدال حرفين متتاليين (مثل: ال التعريف أو غيرها) بفراغ أو بحرف آخر

كيف يتم كتابة الحرفين في الــ case ؟

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

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

لكن إذا كنت ترغب في إجراء تعديل علي أكثر من حرف مثل ( ال ) ، في هذه الحالة يجب عليك إجراء تعديل بسيط علي الغرض ReplaceString ، بحيث أن يتم أخذ القيمة النهائية strReturn وإجراء تعديل عليها بجملة Replace ، مثال :

strReturn = Replace(strReturn,"ال","")

بحيث أن يتم تغيير الحرفين ( ال ) بالقيمة الفارغة ، مثال :

الرسومات = رسومات / المنتدي = منتدي / القاهرة = قاهرة / الحرية = حرية / ......................... وهكذا

تم تعديل هذه المشاركة بواسطة MMA_EG_Cairo في 27 أبريل 2008 في 14:29

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#14

السلام عليكم ورحمة الله وبركاته

ألف شكر لك أستاذي الحبيب

كفيت ووفيت

جزيت ووالديك الفردوس الأعلى

أعدك بأن أسعَ لتطويره وإن شاء الله أنشر التطورات في هذه المشاركة

تقبل شكري وامتناني

فاعلم أنه لا إله إلا الله

#15
اقتباس
السلام عليكم ورحمة الله وبركاته

ألف شكر لك أستاذي الحبيب

كفيت ووفيت

جزيت ووالديك الفردوس الأعلى

أعدك بأن أسعَ لتطويره وإن شاء الله أنشر التطورات في هذه المشاركة

تقبل شكري وامتناني

أشكرك أخي ، بس كان هناك شيء أخير أحببت أن أوضحها لك !!!

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

شكراً مرة أخري ، ويارب دايماً بالتوفيق

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…