اذهب الي المحتوي
أوفيسنا

سؤال و جواب ؟


أبو امين
إذهب إلى أفضل إجابة Solved by ابو جودي,

الردود الموصى بها

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

السؤا ل : 

01/ قاعدة بيانات طلبة 

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

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

 

الجواب : 

 

هذا الأمر يتعلق بتصميم القاعدة والتخطيط لها، 

هناك طريقتان :

الطريقة الأولى:

* عمل نسخة من الجدول الرئيسي للتلامذة  ثم تسميته باسم المنقطعين. وتسطيع أن تصمم له نماذجه وتقاريره الخاصة.

* حذف جميع السجلات بالجدول الجديد اي جدول المنقطعون .

* ثم تصمم استعلامين: الأول ااستعلام إلحاقي يقوم بإلحاق التلميذ المنقطع بجدول المنقطعين . والثاني: استعلام حذف لحذف نفس التلميذ من الجدول الرئيسي للتلامذة .

* ثم تشغيل هذين الاستعلامين بشكل متعاقب في زر واحد.

الطريقة الثانية:

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

المطلوب من السادة المشاركين الراغبين في العمل على المثال

انشاء مثال للطريقة الاولى  و مثال للطريقة الثانية 

 

نريد بعث روح المشاركة و التفاعل للزملاء المتواجدين و المتابعين خاصة الذين يقرؤون و يمرون دون تعليق او ضوضاء فبالتفاعل يمكن ان نصنع العجب 

رابط هذا التعليق
شارك

51 دقائق مضت, derbali ammar said:

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

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

لانه من غير المجدي ان يكون لدينا اكثر من جدول للطلاب

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

تحياتي

  • Like 2
رابط هذا التعليق
شارك

الاشكال في هذين الاستعلامين

الأول ااستعلام إلحاقي يقوم بإلحاق التلميذ المنقطع بجدول المنقطعين .

والثاني: استعلام حذف لحذف نفس التلميذ من الجدول الرئيسي للتلامذة

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

رابط هذا التعليق
شارك

نظرا لشح الردود و التفاعل من الزملاء لاجاد الحلول الممكنة : توصلت بعد عناء شديد و طويل للتوصل الى الحل نظرا للزاد الضعيف : 

اولا نقوم بانشاء استعلام الحاقي

01/نفتح قاعدة بيانات جديدة 

02/  نقوم بنصميم جدول تحت اسم : TblInfo

03 / ننسخ هذا الجدول و نغير اسمه الى : TblInfoArchvs

04/ نقوم بانشاء استعلام  و نضيف له حقول الجدول الرئيسي : TblInfo

04 / نضغط على ايقونة الاستعلام الالحاقي : يظهر لنا مربع حوار  يطلب منا تحديد قاعدة البيانات الحالية او الاخرى : نحدد على قاعدة البيانات الحالية و نختار  من القائمة المنسدلة الجدول الجديد : TblInfoArchvs

و نضغط على ok 

ثم ننشئ نموذج و نضيف له  زر امر و للزر الكود التالي : 

DoCmd.RunSQL "INSERT INTO TblInfoArchvs ( NEleves, NmPrnm) SELECT   TblInfo.NEleves, TblInfo.NmPrnm  FROM TblInfo; "

 نفتح الان النموذج و نضغط على زر الامر :   مبروك تم نقل جميع السجلات الموجودة بالجدول الرئيسي للجدول الثاني اي جدول الارشيف 

هذه المرحلة الاولى : يبقى ان نضيف حقل للجدول الرئيسي  لنرمز فيه للتلاميذ المنقطعون و نقوم بتعديل الاستعلام لكي لا يضيف الا التلاميذ المنقطعون : في القادم ان شاء الله 

 

ملاحظة يوجد في تونس مثال يقول : " ايغني و ايرد على جناحوا " يضرب هذا المثل على من يسال و يجيب بمفرده على السؤال وهو ما اقوم به انا الان : للطرفة 

 

قاعدة البيانات في المرققات

انشاء استعلام الحاقي و نقل البيانات من جدول الى جدول.accdb

 

رابط هذا التعليق
شارك

الجزء الثاني من البرنامج : 

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

نضيف الان للجدول الرئيسي لقاعدة البيانات وهوو جدول : TblInfo حقل تحت اسم : mvmnt ثم نضيف نفس الحقل الى الجدول الفرعي بنفس الخصائص 

ننتقل الى الاستعلام الالحاقي و نضيف له نفس الحقل و في critere   نكتب رقم 1 تحت حقل mvmnt  في الجدول الفرعي 

ننتقل الان الى النموذج و نقوم باضافة الحقل لجملة SQL في امر الزر ليصبح الكود كالاتي

DoCmd.RunSQL "INSERT INTO TblInfoArchvs ( NEleves, NmPrnm,mvmnt) SELECT   TblInfo.NEleves, TblInfo.NmPrnm,TblInfo.mvmnt  FROM TblInfo WHERE (((TblInfo.mvmnt)=1)); "

قاعدة البيانات بالاضافات في المرفقات : 

انشاء استعلام الحاقي و نقل البيانات من جدول الى جدول.accdb

رابط هذا التعليق
شارك

جميع ما تحتاجه موجود في اجابة @Eng.Qassim

3 ساعات مضت, Eng.Qassim said:

في الحالتين انت تحتاج الى حقل حالة التلميذ..يتم تمييز الطالب المنقطع عن غيره

 

اجابة و اقتراح من سطر واحد تغنييك عن تكرار الجداول عديمة الفائدة

بإختصار قم بإضافة عمود جديد لتحديد حالة الطالب ( مستمر - منقطع - مفصول - موقوف - ........... الخ )

منذ ساعه, derbali ammar said:

اولا نقوم بانشاء استعلام الحاقي

 

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

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

لإضافة بيانات جديدة للجدول استخدم الكود التالي

On Error GoTo errorhandle
    Dim rs As DAO.Recordset
    
    Set rs = CurrentDb.OpenRecordset("ضع هنا اسم الجدول")
        
        rs.AddNew
        rs.Fields("اسم العمود 1").Value = "القيمة1"
        rs.Fields("اسم العمود 2").Value = "القيمة2"
        rs.Fields("اسم العمود 3").Value = "القيمة3"
        rs.Update
        MsgBox "تم اضافة البيانات بنجاح", vbInformation + vbMsgBoxRight, "تأكيد"
errorhandleexit:
        Exit Function
errorhandle:
        MsgBox Err.Description
        Resume errorhandleexit

 

و لتحديث سجل محدد استخدم الكود التالي

On Error GoTo errorhandle
    Dim rs As DAO.Recordset, SerTb As String, SetCoulmin As String, SetValue As String
    
        SerTb = "ضع هنا اسم الجدول"
        SetCoulmin = "اسم العمود في الجدول الذي يحتوي على المفتاح الرئيسي"
        SetValue = "حقل العيار الذي يحتوي على المفتاح الرئيسي في النموذج"
        
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM " & SerTb & " where [" & SetCoulmin & "] Like '" & SetValue & "'")
        
        rs.Edit
        rs.Fields("اسم العمود 1").Value = "القيمة1"
        rs.Fields("اسم العمود 2").Value = "القيمة2"
        rs.Fields("اسم العمود 3").Value = "القيمة3"
        rs.Update
        MsgBox "تم تحديث البيانات بنجاح", vbInformation + vbMsgBoxRight, "تأكيد"
errorhandleexit:
        Exit Function
errorhandle:
        MsgBox Err.Description
        Resume errorhandleexit

و لحذف حقل استخدم الكود التالي

On Error GoTo errorhandle
    Dim rs As DAO.Recordset, SerTb As String, SetCoulmin As String, SetValue As String
    
        SerTb = "ضع هنا اسم الجدول"
        SetCoulmin = "اسم العمود في الجدول الذي يحتوي على المفتاح الرئيسي"
        SetValue = "حقل العيار الذي يحتوي على المفتاح الرئيسي في النموذج"
        
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM " & SerTb & " where [" & SetCoulmin & "] Like '" & SetValue & "'")
        
        rs.Delete
        
        MsgBox "تم حذف السجل بنجاح", vbInformation + vbMsgBoxRight, "تأكيد"
errorhandleexit:
        Exit Sub
errorhandle:
        MsgBox Err.Description
        Resume errorhandleexit

 

تم تعديل بواسطه د.كاف يار
  • Like 5
رابط هذا التعليق
شارك

بارك الله فيك اخونا العزيز عمار

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

اما مسألة الإلحاق والحذف ..   فلا ينصح به 

ما عرضته في طريقة الحل الثانية هو الصحيح وهو المتبع في البرامج الرصينة ، وهو ما اشار اليه اخوانك

  • Like 2
رابط هذا التعليق
شارك

كنا قد انشانا القاعدة و هي تحتوي على جدولان :

الجدول الرئيسي : جدول معطيات التلاميذ    TblInfo

الجدول الفرعي : جدول الارشيف :  TblInfoArchvs

اضفنا ايضا حقل لكلا الجدولان وهو حقل حركة التلاميذ :  

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

نقوم بانشاء جدول جديد لحركة التلاميذ  تحت اسم : mvmnt

يتضمن حقلان :

1. IDmvmnt  /// NuméroAuto

2. Mvmnt    ////  Texte

نضيف لهذا الحقل المعطيات التالية :

IDmvmnt 

Mvmnt    

1

انقطاع

2

مباشر

 

نقوم برط هذا  الجدول مع الجدول  الرئيسي

نفتح الان الاستعلام  و نضيف جدول Mvmnt    

 لتغيير انتماء جدول : Mvmnt    من الانتماء للجدول الرئيسي الى الانتماء لجدول Mvmnt   

نت\كر جيدا اننا اضفنا رقم /// 1 /// في كريتار حقل :  Mvmnt   

نغير هذا الرقم الى كلمة انقطاع  نكتبها مكان رقم 1

نقوم بمعاينة الاستعلام سنجد المعلومات الموجودة صحيحة و رقم 1      تغير الى كلمة انقطاع

 

يبقى الان تغيير الكود :

نضيف هذا الكود مكان الكود السابق :

DoCmd.RunSQL " INSERT INTO TblInfoArchvs ( NEleves, NmPrnm,mvmnt)  " & _
"SELECT TblInfo.NEleves, TblInfo.NmPrnm, mvmnt.mvmnt,  " & _
"FROM mvmnt INNER JOIN TblInfo ON mvmnt.IDmvmnt = TblInfo.mvmnt" & _
"WHERE (((mvmnt.mvmnt) = انقطاع));"

 لكن بعد كل هذا الجهد   ظهر لنا الخطا المبين في الصورة 1.PNG.9e0744c396a35cf3ccfe9260242f6000.PNG

 

المثال موجود بالمرفقات مع الخطا : 

 

انشاء استعلام الحاقي و نقل البيانات من جدول الى جدول.accdb

 

ننتضر الحل من الاساتذة الكرام لاصلاح الخطا 

رابط هذا التعليق
شارك

الى الخبير العزيز : د.كاف يار 

صراحة امثلتكم جيدة و شيقة و جميلة لكنها معقدة لمن هو مبتدا و اريد ان اسوق لكم ملاحظة ان مستوى المنتدى عالي جدا و قوي و يصعب على كل مبتدئ  مجاراتكم صراحة و نحن المبتدئين  نلتجئ دائما الى البساطة و الوضوح و ما يهمنا هنا ليس الاضافة او الح\ف او ما شابه و انما هي عملية الالحاق 

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

شكرا لكم على كل حال 

رابط هذا التعليق
شارك

  • أفضل إجابة

طيب وليه كل ده 

اضف الحقول الاتية فى الجدول الرئيسي

منقطع - مفصول - موقوف 

على ان تكون من النوع  Yes/No

منقطع = yes

مفصول = yes

موقوف = yes

وسوى استعلام ومرر اليه القيمى المعلمه ليقوم بعمل الفلتر تبعا للحالة الممرة 

او الابسط

سوى عدد استعلامات تبعا لعدد الحالات وفى المعيار اختر حقل الفتر   yes تبعا لكل حالة 

الموضوع ابسط من البساطة

  • Like 2
  • Haha 1
رابط هذا التعليق
شارك

7 دقائق مضت, derbali ammar said:

الى الخبير العزيز : د.كاف يار 

صراحة امثلتكم جيدة و شيقة و جميلة لكنها معقدة لمن هو مبتدا و اريد ان اسوق لكم ملاحظة ان مستوى المنتدى عالي جدا و قوي و يصعب على كل مبتدئ  مجاراتكم صراحة و نحن المبتدئين  نلتجئ دائما الى البساطة و الوضوح و ما يهمنا هنا ليس الاضافة او الح\ف او ما شابه و انما هي عملية الالحاق 

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

شكرا لكم على كل حال 

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

فقط نصيحة

لا تضع اسالة نظرية

ارفق قاعدة بعدد قليل من البيانات 

ودع عالم الرياضيات فى مخيلتك دائما عند التصميم والتفكير 

الجواب يأتى بناء على معطى , مجهول  , ثابت

29 دقائق مضت, ابوخليل said:

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

اما مسألة الإلحاق والحذف ..   فلا ينصح به 

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

  • Like 2
رابط هذا التعليق
شارك

بالمناسبة 

فى الحل التانى انت اشرت الى 

IDmvmnt 

Mvmnt    

1

انقطاع

2

مباشر

 يعنى سوف تقوم باستخدام حقول رقمية واخرى نصية 

مما يستوجب مستقبلا الربط بينهما بالاستعلامات او العلاقات او مجال الدوال ليش تصعب السهل 

وفى مرفق نوع الحقل رقم Long

وليه تحجز   4 Byte بحالهم علشان الارقان 1 , 2 , 3 لما ممكن تستخدم  2 Byte   بس لو كان الحقل Integer  ,  Boolean

انصحك راجع هذا الدرس 

 

 

  • Like 1
رابط هذا التعليق
شارك

1 ساعه مضت, د.كاف يار said:

جميع ما تحتاجه موجود في اجابة @Eng.Qassim

اجابة و اقتراح من سطر واحد تغنييك عن تكرار الجداول عديمة الفائدة

بإختصار قم بإضافة عمود جديد لتحديد حالة الطالب ( مستمر - منقطع - مفصول - موقوف - ........... الخ )

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

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

لإضافة بيانات جديدة للجدول استخدم الكود التالي

On Error GoTo errorhandle
    Dim rs As DAO.Recordset
    
    Set rs = CurrentDb.OpenRecordset("ضع هنا اسم الجدول")
        
        rs.AddNew
        rs.Fields("اسم العمود 1").Value = "القيمة1"
        rs.Fields("اسم العمود 2").Value = "القيمة2"
        rs.Fields("اسم العمود 3").Value = "القيمة3"
        rs.Update
        MsgBox "تم اضافة البيانات بنجاح", vbInformation + vbMsgBoxRight, "تأكيد"
errorhandleexit:
        Exit Function
errorhandle:
        MsgBox Err.Description
        Resume errorhandleexit

 

و لتحديث سجل محدد استخدم الكود التالي

On Error GoTo errorhandle
    Dim rs As DAO.Recordset, SerTb As String, SetCoulmin As String, SetValue As String
    
        SerTb = "ضع هنا اسم الجدول"
        SetCoulmin = "اسم العمود في الجدول الذي يحتوي على المفتاح الرئيسي"
        SetValue = "حقل العيار الذي يحتوي على المفتاح الرئيسي في النموذج"
        
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM " & SerTb & " where [" & SetCoulmin & "] Like '" & SetValue & "'")
        
        rs.Edit
        rs.Fields("اسم العمود 1").Value = "القيمة1"
        rs.Fields("اسم العمود 2").Value = "القيمة2"
        rs.Fields("اسم العمود 3").Value = "القيمة3"
        rs.Update
        MsgBox "تم تحديث البيانات بنجاح", vbInformation + vbMsgBoxRight, "تأكيد"
errorhandleexit:
        Exit Function
errorhandle:
        MsgBox Err.Description
        Resume errorhandleexit

و لحذف حقل استخدم الكود التالي

On Error GoTo errorhandle
    Dim rs As DAO.Recordset, SerTb As String, SetCoulmin As String, SetValue As String
    
        SerTb = "ضع هنا اسم الجدول"
        SetCoulmin = "اسم العمود في الجدول الذي يحتوي على المفتاح الرئيسي"
        SetValue = "حقل العيار الذي يحتوي على المفتاح الرئيسي في النموذج"
        
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM " & SerTb & " where [" & SetCoulmin & "] Like '" & SetValue & "'")
        
        rs.Delete
        
        MsgBox "تم حذف السجل بنجاح", vbInformation + vbMsgBoxRight, "تأكيد"
errorhandleexit:
        Exit Sub
errorhandle:
        MsgBox Err.Description
        Resume errorhandleexit

 

 

استاذي الكريم لقد جربت كود الاضافة  و اعطاني ه>ا الخطا : 

Capture.PNG.e17ce5144bd5cc308437f6097c88f2b8.PNG

قد ارفقت لك المثال بالخطا للتعديل عليه

انشاء استعلام الحاقي و نقل البيانات من جدول الى جدول.accdb

 

 

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information