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

رسالة : سبق تسجيل طالب بنفس الاسم

مغلق
بدأه حارث في 20 سبتمبر 2001 · 14 رد · 1,291 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

استخدمت طريقة جعل الحقول الأربعة في جدول "أسماء الطلاب" : الاسم الأول ، اسم الأب ، اسم الجد ، اسم العائلة ، بمجموعها مفتاحاأساسيا ، لكن هذا سبب لي مشاكل :

1- أنه لا يقبل ترك أي من هذه الحقول فارغا .

2- أن الرسالة المعروضة في حال تكرار الاسم طويلة وغير مفهومة لمدخل البيانات ، وأريد أن تكون الرسالة المعروضة مختصرة وواضحة ومضمونها : سبق تسجيل هذا الاسم .

ولكم الشكر مسبقا .

أخوكم حارث

#2

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

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

#3

الأخ حاتم :

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

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

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

ولك الشكر على إفادتك واهتمامك .

#4

الأخ حارث

أولا : بالنسبة لرفض البرنامج ترك أحد حقول الفهرس فارغا فافتح مربع حوار فهارس في عرض التصميم للجدول ثم في الفهرس اختر في خاصية تجاهل قيم Null نعم ، لكن لا حظ أن الأسماء قد تتكرر لأنه لن يطالبك بالحقول جميعها .

ثانيا : بالنسبة لطلبك فقد عملت الكود التالي :

Dim db As Database

Dim rst As Recordset

Set db = Application.CurrentDb

Set rst = db.OpenRecordset("SELECT [جدول أسماء الطلاب].[رقم الطالب], [الاسم الأول] & ' ' & [اسم الأب] & ' ' & [اسم الجد] & ' ' & [اسم العائلة] AS [اسم الطالب] " _

& " FROM [جدول أسماء الطلاب] WHERE ([الاسم الأول] & ' ' & [اسم الأب] & ' ' & [اسم الجد] & ' ' & [اسم العائلة])= " & "'" & [Forms]![نموذج بحث عن طالب]![بحث_عن_طالب] & "'")

If rst.RecordCount = 1 Then

If MsgBox("يوجد طالب بنفسم الاسم ." & vbCrLf _

& "هل ترغب في مشاهدة بياناته ؟" & vbCrLf & vbCrLf _

& "انقر نعم لعرض بيانات الطالب .", vbInformation + vbMsgBoxRight + vbMsgBoxRtlReading + vbYesNo, "طالب موجود") = vbYes Then

DoCmd.OpenForm "نموذج أسماء الطلاب", , , "[رقم الطالب]=" & rst![رقم الطالب]

End If

End If

db.Close

أنشئ نموذج جديد وضع فيه مربع نص باسم بحث_عن_طالب واجعل الكود السابق في زر أمر .

ولي بعض الملاحظات والاقتراحات :

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

2- لأني اعرف أنك من السعودية فرقم الطالب المسجل في دفتر عائلة والده رقم السجل المدني هو رقم فريد لا يتكرر أبدا فاجعله هو الفهرس .

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

4- اقترح أن تفحص برنامج معارف التابع لوزارة المعارف ففيه افكار قد تنفعك .

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

ولك تحياتي

#5

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

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

ٌRun-Time error13:

Type mismatch

وبضغط الزر Debug للفتح على الكود يظهر السطر set rst والذي تحته باللون الأصفر .

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

أخوك حارث

#6

الأخ حارث

قد تكون المشكلة من المرجع هل وضعت مرجع لـ DAO ؟

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

أو جرب إزالة السطر الذي يظهر عليه اللون الأصفر واستبدل به التالي :

Set rst = db.OpenRecordset("SELECT [جدول أسماء الطلاب].[رقم الطالب], [الاسم الأول] & ' ' & [اسم الأب] & ' ' & [اسم الجد] & ' ' & [اسم العائلة] AS [اسم الطالب] " _

& " FROM [جدول أسماء الطلاب] WHERE ([الاسم الأول] & ' ' & [اسم الأب] & ' ' & [اسم الجد] & ' ' & [اسم العائلة])= " & [Forms]![نموذج بحث عن طالب]![بحث_عن_طالب] )

وإن لم تنفع هذه المحاولات فأرسل الملف على بريدي .

ولك تحياتي

#7

الأخ أبو حمود : المشكلة في المرجع، وانتهت بحمد الله ، ، وقد توصلت لما أريده تماما ، فجزاك الله كل خير .

#8

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

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

أكسس 2000 : http://mypage.ayna.com/harith77/stu33.zip

(أعتذر عن تغيير الأسماء ، فقد أتعبتني الكتابة بالعربي)

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

_______________________

_______________________

قد تتعجب من إصراري على هذا الموضوع لكن في الحقيقة لدي أكثر من قاعدة بيانات أطمع أن أستفيد من هذه الطريقة فيها أيضا، إحداها قاعدة بيانات تتعلق بالمعاملات سبق لي تصميمها ، والمعاملة فيها لها رقم وتقسيم وعام ، مثلا : 1548/د لعام 1422 ،(إضافة إلى رقم معرف يتم الربط بواسطته) ، وكان يشكل علي تكرار إدخال المعاملات أحيانا ، فقمت بوضع الحقول الثلاثة : الرقم والتقسيم والعام كمفتاح أساسي ، لكن الرسالة المعروضة للمستخدم في حال التكرار غير مفهومة له وتعطي شعورا بخطأ في البرنامج ، لذا أجد هذه الطريقة مفيدة لي هناك أيضا وسأحاول التعديل عليها لإضافة هذه الميزة.

أعتذر إن أكثرت عليك ، ولك كل الشكر .

#9

الأخ حارث

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

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

Dim db As Database

Dim rst As Recordset

Set db = Application.CurrentDb

Set rst = db.OpenRecordset("SELECT [sTU].[Num], [A] & ' ' & & ' ' & [C] & ' ' & [D] AS [اسم الطالب] " _

& " FROM [sTU] WHERE ([A] & ' ' & & ' ' & [C] & ' ' & [D])= " & "'" & [Forms]![Form1]![بحث_عن_اسم] & "'")

If rst.RecordCount = 1 Then

If MsgBox("يوجد طالب بنفس الاسم ." & vbCrLf _

& "هل ترغب في مشاهدة بياناته ؟" & vbCrLf & vbCrLf _

& "انقر نعم لعرض بيانات الطالب .", vbInformation + vbMsgBoxRight + vbMsgBoxRtlReading + vbYesNo, "طالب موجود") = vbYes Then

DoCmd.GoToControl "N"

DoCmd.FindRecord rst![Num], acEntire, , , , acCurrent, True

End If

Else ' طالب غير موجود

If MsgBox("لا يوجد طالب بهذا الاسم ." & vbCrLf _

& "هل ترغب في فتح سجل جديد له وتسجيله ؟" & vbCrLf & vbCrLf _

& "انقر نعم لتسجيل نعم الطالب الجديد .", vbInformation + vbMsgBoxRight + vbMsgBoxRtlReading + vbYesNo, "طالب جديد") = vbYes Then

DoCmd.GoToRecord , , acNewRec

A = Left(Me![بحث_عن_اسم], InStr(Me![بحث_عن_اسم], " "))

B = Left(Right(Me![بحث_عن_اسم], Len(بحث_عن_اسم) - Len([A])), InStr(Right(Me![بحث_عن_اسم], Len(بحث_عن_اسم) - Len([A])), " "))

C = Left(Right(Me![بحث_عن_اسم], Len(بحث_عن_اسم) - (Len([A]) + Len())), InStr(Right(Me![بحث_عن_اسم], Len(بحث_عن_اسم) - (Len([A]) + Len())), " "))

D = Right(Me![بحث_عن_اسم], Len(بحث_عن_اسم) - (Len([A]) + Len() + Len([C])))

End If

End If

db.Close

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

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

DoCmd.GoToRecord , , acNewRec

اجعل قبله السطر التالي :

Me.AllowAdditions = True

وبعد السطر :

D = Right(Me![بحث_عن_اسم], Len(بحث_عن_اسم) - (Len([A]) + Len() + Len([C])))

ضع :

Me.AllowAdditions = False

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

DoCmd.RunCommand acCmdUndo

ونفس الكلام يمكن تطبيقة على قاعدة المعاملات .

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

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

ولك تحياتي

#10

بريدي :

HARITH77@HOTMAIL.COM

وجزاك الله كل خير

#11

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

أخي / أبو حمود

أرجو التكرم منك أيضاً ، بإرسال نسخة من المثال بعد التعديل

لكي أستفيد منه.

والله يوفقك في كل خير.

ibnmusqat.gif
#12

الأح حارث الأخ ابن مسقط

لقد ارسلت لكما المثال على بريدكما.

ولكما تحياتي

#13

الأخ أبو حمود

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

ارجو كرماً كما عودتنا ان ترسلي المثال مع الشكر

#14

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

وصل المثال ، وهو كما عودتنا يفي بالغرض إن شاء الله ، وأرجو أن لا أعود بطلب جديد في هذا الموضوع ، لكن كرمك يجعلنا نكثر عليك ، جزاك الله عنا كل خير .

الإخوة جميعا :

لتعم الفائدة الملف بعد التعديل على الوصلة التالية : (انقر بالزر الأيمن واختر حفظ باسم )

http://mypage.ayna.com/harith77/stu-ah.zip

ودعواتكم جميعا للأخ أبو حمود .

#15

الأخ حارث

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

الأخ طلال

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

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

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

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

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

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

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

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