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

علموني كيف احول الطلاب بدون استعلام

مغلق
بدأه MOHAMED_200 في 18 يونيو 2007 · 15 رد · 1,319 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

عندي جدولين grad_stu_prim جدول إعدادي و grad_stu_first جدول سنة أولى

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

أما الراسب

فإن بياناته تظل في الجدول بل تزيد سنة يعني

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

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

أنا عملت لوب ولكن بيرحلي كل الطلاب ومش عارف أعمل الشرط ( كتابة العام الجامعي في التكست ) وكذلك شرط الطلاب الناجحين والراسبين

أنظر المثال المرفق والكود المكتوب ما الخطأ

وشكرا للجميع

وأنا أريد ان يظل الطالب في اعدادي للأستعلام عنه في جميع المراحل

برنامجي لن يعمل إلا بهذا الكود برجاء المساعدة

___________.rar

____________.doc

#2

سلام

أهلا MOHAMED_200

- ما شاء الله عليك!! تريد مساعدة مع هذا لكود! صدقني أنت تحتقر قدراتك!!! رجاءً أطلق لها العنان!!

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

- لديك انفصام بين (اكسس) و (بيسك) الله يعينك على التخلص منه

- قمت باستخدام الكود وعدلت فيه سطر واحد فقط!!

- جرب (كودك الآن) يمكن ترضى عنه!! ياليت.

- أو أبني لك كود جديد؟! أيش رأيك

نسيت المرفق هذا هو: GA0009.zip

تحياتي

القحم

تم تعديل هذه المشاركة بواسطة القحم في 19 يونيو 2007 في 15:42

#3

عزيزي أشكر لك مجهودك الرائع

كما أتمنى لك التوفيق والنجاح في جميع أعمالك

بالنسبة للكود هناك خطأ

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

عايز إذا لم يتحقق الشرط كما قلت أي الطلاب الراسبين يتم فتح لهم ريكورد جديد في جدول اعدادي

ثم يكتب فيه الرقم ويضيف سنة زيادة عن السنة ويكتب في حقل حالة الالتحاق باق للإعادة

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

ولك مني كل شكر وتقدير ولجميع الأعضاء والمشرفين في هذا المنتدي

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

ولكم منى تحية وتقدير

#4

عزيزي محمد،

هل من الممكن إعادة تصميم الجداول والعلاقات؟

السبب:

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

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

توجد مشاركة متواضعه عن تسوية جداول قواعد البيانات Database Table and Normalization حيث يتم تفكيك الجدول إلى عدة جداول تضمن عدم تكرار أي معلومة في قاعدة البيانات إلا في حالات معينة.

يمكننا القيام سويا وأخوانا في المنتدى بتصميم جديد.

ولك جزيل الشكر والتقدير أخي الفاضل

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

#5

عزيزي الغالي

لكم أسعدتني رسالتك الغالية أخي العزيز

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

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

وأتمنى لكم دوام العافية ولجميع من يتعاون معي أو في المنتدي

لكم ولك جميع التوفيق في حياتكم العملية

ولكم جزيل الشكر والتقدير وخالص تمنياتي

Mohamed_200

#6

سلام

أهلا محمد

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

- صدقني الأمر سهل (في نظري على الأقل)

- رايح أعيد تصميم الكود بطريقة أوضح شوي مع بعض التعليقات إن أمكن

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

القحم

#7

السلام،

أخي العزيز تفضل الكود، والله يوفقك

: B)

Sub CopyTabe(srcSqlOrQueryName As String, desTblName As String, IncrementYearFieldName As String)

Dim idx As Integer
Dim srcRs As Recordset
Dim desRs As Recordset

Set srcRs = CurrentDb.OpenRecordset(srcSqlOrQueryName)
Set desRs = CurrentDb.OpenRecordset(desTblName)
While Not srcRs.EOF
	desRs.AddNew
	For idx = 0 To srcRs.Fields.Count - 1
		desRs.Fields(idx).Value = srcRs.Fields(idx).Value
	Next idx
	desRs.Update

	srcRs.MoveNext
Wend
End Sub

وطريقة الأستخدام هي

CopyTabe "SELECT * FROM abc WHERE YEAR=2001","desTableName","YearFieldName"

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

ولكم جزيل الشكر

فراس

تم تعديل هذه المشاركة بواسطة Feras Nasser في 19 يونيو 2007 في 22:59

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

#8

سلام

أهلا فراس

حقيقي أنا أعتز بك

فعلا أنت اختصرت الكود (فكيتنا من اللخبطة)

لكن بقي شرط النجاح وشرط الرسوب (كمل جميلك)

--- ما أفكر فيه الآن ---------------

عمل نوعين من الترحيل:

- الترحيل الجماعي : وهو طلب الأخ محمد؛ وبالشروط التي طلبها ( طبعا بطريقة فراس إذا حلاها بوضع الشروط)

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

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

- ايش رأيك فراس! سهلة عليك أخليها لك؟!

------- لمحة برمجية : سيكون موضع الكود للحالة الثانية في حدث (قبل التحديث - للنموذج -) ------------

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

القحم

تم تعديل هذه المشاركة بواسطة القحم في 20 يونيو 2007 في 02:11

#9

يا هلا وغالى بأخواني،

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

Sub CopyTabe(srcSqlOrQueryName As String, desTblName As String, IncrementYearFieldName As String, Optional deleteSrc As Boolean = False)

Dim idx As Integer
Dim srcRs As Recordset
Dim desRs As Recordset

Set srcRs = CurrentDb.OpenRecordset(srcSqlOrQueryName)
Set desRs = CurrentDb.OpenRecordset(desTblName)
While Not srcRs.EOF
	desRs.AddNew
	For idx = 0 To srcRs.Fields.Count - 1
		desRs.Fields(idx).Value = srcRs.Fields(idx).Value
	Next idx
	desRs.Fields(IncrementYearFieldName).Value = desRs.Fields(IncrementYearFieldName).Value + 1
	desRs.Update

	 If deleteSrc Then srcRs.Delete

	srcRs.MoveNext
Wend
End Sub

والتعديل هو بعد تعبأة الحقول يتم زيادة السنة:

desRs.Fields(IncrementYearFieldName).Value = desRs.Fields(IncrementYearFieldName).Value +1

عزيزي القحم/

أشكرك على المشاركة الفعالة والممتازة.

بالنسبة للشروط المذكورة (الرسوب والنجاح)، أرجوا التصحيح في حال وجود خطأ، إذا كانت علامة ناجح موجودة في الجدول الأساسي ما عليك هو سوى تحديد ذلك الشرط في نص الـــ SQL

مثل:

CopyTabe "SELECT * FROM abc WHERE YEAR=2001 AND PASS=1","desTableName","YearFieldName"

حيث Pass على سبيل المثال هي حقل قييم الرسوب أو النجاح وواحد مثلا ترمز لناجح.

حذف السجل، ويتم ذلك عبر استخدام خاصية deleteSrc بوضع True لمسح السجل المصدر وFalse إذا رغبت بإبقاء السجل دون حذف (ملاحظة هذه الخانة اختيارية إذا تركت فارغة ستعتبر القيمة المدخلة لــ deleteSrc =Flase.

مثال لذلك

للحذف
CopyTabe "SELECT * FROM abc WHERE YEAR=2001","desTableName","YearFieldName", ture

لعدم الحذف
CopyTabe "SELECT * FROM abc WHERE YEAR=2001","desTableName","YearFieldName",false
أو تركها فارغة لعدم الحذف
CopyTabe "SELECT * FROM abc WHERE YEAR=2001","desTableName","YearFieldName"

بعض الملاحظات:

يمكن استخدام المتغير YearFieldName لزيادة المرحلة الدراسة (بشرط أن تكون مسلسلة من 1 إلى 7 حيث 1=المرحلة الأولى، 2= المرحلة الثانية وتكون حسب الترتيب الأكاديمي المتبع) لأن الكود يقوم بقراءة الحقل وزيادة 1 عليها، ولكن :( ما عندنا إلا متغير واحد اذا استخدمناه لزيادة المراحل الدراسية ما نقدر نزيد السنوات. بس :lol: في حال الرغبة في زيادة أو تغير قييم أكثر من حقل واحد، ينبغي إضافة متغير للكود الجديد لإحتواء اسم الحقل الجديد المراد تغيره، و/أو من داخل الكود نزيد سطر قبل update لتغير قييم أخرى.

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

ولكم جزيل الشكر والتقدير ،،،،،،

فراس فهد ناصر

تم تعديل هذه المشاركة بواسطة Feras Nasser في 20 يونيو 2007 في 11:41

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

#10

إلى الأخوة الأحباء جميعا

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

أحبائي

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

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

أرجو منكم

أن تكتبوا لي الكود الذي يحول لي الطلاب الناجحين بسنة معينة من فرقة إعدادي إلى أولى مع زيادة سنة في العام الجامعي

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

مرفق لكم مرفق وأتمنى منكم الإغاثة العاجلة ولكم مني جزيل الشكر

وللجميع ومن عاون معي ومشرفي المنتدى

وإلى لقاء قريب

مع تحياتي

_________________.rar

#11

أخي الفاضل،

اقتباس
حاولت أعمل الكود ويفشل معي مش عارف ليه لهذا

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

لك جزيل الشكر.

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

#12

آسف لم آلاحظ أن المرفق لم يتغير

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

برجاء تعديل الكود ولك مني جزيل الشكر

الطلاب الناجحين عند كتابة السنة يتم نقلهم من إعدادي إلى أولى مع زيادة سنة

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

لو سمحتم ساعدوني بأي طريقة شكرا لكم على ردكم وإلى لقاء قريب

محمد 200

_____________________________.rar

#13

السلام،

المرفق يوجد فيع التعديلات

CopyTabe "SELECT * FROM grad_stu_prim WHERE yearStu = '" & toty.Text & "' AND situation_stu='8'", "grad_stu_first", True, True
CopyTabe "SELECT * FROM grad_stu_prim WHERE yearStu = '" & toty.Text & "' AND situation_stu='1'", "grad_stu_prim", False, False

المعادلة الأولى تجيب الطلاب الناجحين والثاني للراسبين

ملاحظة تم تغير بعض اسماء الحقول، جهازي لا يدعم الكتابة بالعربي في ACCESS. تم غضافة باقي الحقول في الجدول الثاني (لازم يكونوا متشابهين ولا حقل ينقص)

تم إضافة الدالة في ملف وحدة نمطية

فراس

Done.zip

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

#14

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

المرفق

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

أخي العزيز

أريد عند تحويل الطالب من إعدادي إلى أولى يتم تحويل بيانات معينه مثل

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

وهذا ما أريده عند تحويل الطالب الناجحين

أما الطالب الراسب كما قلت

يكرر مرة أخرى في نفس جدول إعدادي ببيانات معينة

كود الطالب والعام الجامعي ( يزيد سنة طبعا لأنه راسب ) كود الفرقة كما هو لن يتغير وحالة الالتحاق تصبح باق للإعادة

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

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

وأتمنى أن توفق في حياتك العملية ( مرفق البرنامج مع بعض التعديلات ) وشكرا

Done.rar

#15

الغالي محمد،

الفضل لله أولا وأخيرا، وان شالله بأذن واحد احد سأساعدك حتى تتم ان شالله.

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

فراس

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

#16

عزيزي الغالي فراس

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

أما بعد

يعتبر أخر مهلة لي لتسليم البرنامج يوم 30 / 6 / 2005 أرجو منك المساعدة السريعة ولك منى جزيل الشكر والتقدير

على هذه المجهودات الرائعة

وشكرا أخي

وإلى لقاء قريب إن شاء الله

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

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

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

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

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

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