اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

كيفية عمل نموذج فرعي وعند الاضافة يضاف ويظهر في النموذج الفرعي كما بالصورة


Ahmed Fahmy 2022
إذهب إلى أفضل إجابة Solved by محمد أبوعبدالله,

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

كيفية عمل نموذج فرعي وعند الاضافة يضاف ويظهر في النموذج الفرعي كما بالصورة  بشكل تراكمي 

وتكون الاضافة من المربعات الاساسية اعلي النموذج الفرعي 

شكرا مقدما

Capture.PNG

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

  • أفضل إجابة

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

تفضل اخي الكريم


       If IsNull([txtName]) Then
        MsgBox "يحب اختيار اسم العميل اولاً", vbInformation, "officena"
        DoCmd.GoToControl "txtName"
    Else
       If IsNull([txtTel]) Then
        MsgBox "يحب اختياررقم التليفون اولاً", vbInformation, "officena"
        DoCmd.GoToControl "txtTel"
    Else
       If IsNull([txtAddress]) Then
        MsgBox "يحب اختيار العنوان اولاً", vbInformation, "officena"
        DoCmd.GoToControl "txtAddress"
    Else
        Dim db As DAO.Database
        Dim Rs As DAO.Recordset

        Set db = CurrentDb
        
        Set Rs = db.OpenRecordset("SELECT tbl1.*FROM tbl1;")
        
        Rs.AddNew
        Rs("XName") = Me.txtName
        Rs("XTel") = Me.txtTel
        Rs("XAddress") = Me.txtAddress
        
        Rs.Update
        Rs.Close

       
        MsgBox "تم اضافة البيانات بنجاح ان شاء الله ", vbInformation + vbOKOnly, "officena"
        DoCmd.Close

    End If
    End If
    End If
    

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

DB_test.rar

تحياتي

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

3 ساعات مضت, 200200ahmed said:

طيب حضرتك لو كنت عاوز اعمل مربع نص بعدد السجلات الحالية كيف ؟

اضف الكود التالي

 Me.Label1.Caption = Me.frm2.Form.RecordsetClone.RecordCount

DB_test.rar

تحياتي

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

السلام عليكم 🙂

 

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

الكود :


Private Sub Command11_Click()

    If Len(Me.txtName & "") = 0 Then
        MsgBox "يحب اختيار اسم العميل اولاً", vbInformation, "officena"
        Me.txtName.SetFocus
    
    ElseIf Len(Me.txtTel & "") = 0 Then
        MsgBox "يحب اختياررقم التليفون اولاً", vbInformation, "officena"
        Me.txtTel.SetFocus
    
    ElseIf Len(Me.txtAddress & "") = 0 Then
        MsgBox "يحب اختيار العنوان اولاً", vbInformation, "officena"
        Me.txtAddress.SetFocus
    
    Else
        
        'to make a New Record in the SubForm, it has to be in Focus
        Me.frm2.SetFocus
        DoCmd.GoToRecord , , acNewRec
        
        'now take the values from the Main Form
        Me.frm2!XName = Me.txtName
        Me.frm2!XTel = Me.txtTel
        Me.frm2!XAddress = Me.txtAddress
       
        'save the SubForm Record so that the Record Count shows correctly
        If Me.frm2.Form.Dirty Then Me.frm2.Form.Dirty = False
        
        MsgBox "تم اضافة البيانات بنجاح ان شاء الله ", , "officena"

    End If
    
End Sub

.

اما عدد السجلات ، فنعمل حقل في النموذج الفرعي ، في قسم Form Footer (ولا يعمل العد او الجمع بهذه الطريقة ، إلا في هذا القسم) ، ونجعله يعد عدد اي حقل ، ويمكننا لاحقا ان نجعله مخفي :

image.png.c18b82798ee758099128d039a91829ca.png

.

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

image.png.6211c7b239111c5252c0e2b2a5c06290.png

.

جعفر

1280.DB_test.accdb.zip

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

22 دقائق مضت, jjafferr said:

السلام عليكم 🙂

 

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

الكود :



Private Sub Command11_Click()

    If Len(Me.txtName & "") = 0 Then
        MsgBox "يحب اختيار اسم العميل اولاً", vbInformation, "officena"
        Me.txtName.SetFocus
    
    ElseIf Len(Me.txtTel & "") = 0 Then
        MsgBox "يحب اختياررقم التليفون اولاً", vbInformation, "officena"
        Me.txtTel.SetFocus
    
    ElseIf Len(Me.txtAddress & "") = 0 Then
        MsgBox "يحب اختيار العنوان اولاً", vbInformation, "officena"
        Me.txtAddress.SetFocus
    
    Else
        
        'to make a New Record in the SubForm, it has to be in Focus
        Me.frm2.SetFocus
        DoCmd.GoToRecord , , acNewRec
        
        'now take the values from the Main Form
        Me.frm2!XName = Me.txtName
        Me.frm2!XTel = Me.txtTel
        Me.frm2!XAddress = Me.txtAddress
       
        'save the SubForm Record so that the Record Count shows correctly
        If Me.frm2.Form.Dirty Then Me.frm2.Form.Dirty = False
        
        MsgBox "تم اضافة البيانات بنجاح ان شاء الله ", , "officena"

    End If
    
End Sub

.

اما عدد السجلات ، فنعمل حقل في النموذج الفرعي ، في قسم Form Footer (ولا يعمل العد او الجمع بهذه الطريقة ، إلا في هذا القسم) ، ونجعله يعد عدد اي حقل ، ويمكننا لاحقا ان نجعله مخفي :

image.png.c18b82798ee758099128d039a91829ca.png

.

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

image.png.6211c7b239111c5252c0e2b2a5c06290.png

.

جعفر

1280.DB_test.accdb.zip 26.91 kB · 2 downloads

السلام عليكم

مداخلة بسيطة لو سمحتم 

لاكن كلما اضغط على رز الاضافة يكرر نفس البيانات في النموذج الفرعي 

 

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

3 ساعات مضت, محمد التميمي said:

كلما اضغط على رز الاضافة يكرر نفس البيانات في النموذج الفرعي

وعليكم السلام 🙂

 

هذا كان مجرد مثال من صاحب الموضوع 🙂

اليك مثال حقيقي ، وقد حصلت على السند عند البحث في الانترنت :

 

انت مسؤول مخزن ، واستلمت قائمة المواد حسب سند الاخراج المرفق:

image.png.479b20fc6af5a2b1d5264f594ed75226.png

.

لما تريد ان تدخل المواد من 1 الى 6 في برنامج المخازن ، فيجب عليك ان تدخل المعلومات التاليه في كل سجل:

image.png.39510dfd3cf881281a66c314aa10395d.png

.

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

 

في هذا المثال ، ولأن عدد الحقول هو 10 حقول ، وعدد الحقول التي يتم ادخالها تلقائيا هي 6 حقول ، فأنت وفرت 60% من وقت ادخال البيانات ، وبالدقة المطلوبة 🙂

 

جعفر

 

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

32 دقائق مضت, jjafferr said:

وعليكم السلام 🙂

هذا كان مجرد مثال من صاحب الموضوع 🙂

اليك مثال حقيقي ، وقد حصلت على السند عند البحث في الانترنت :

انت مسؤول مخزن ، واستلمت قائمة المواد حسب سند الاخراج المرفق:

لما تريد ان تدخل المواد من 1 الى 6 في برنامج المخازن ، فيجب عليك ان تدخل المعلومات التاليه في كل سجل:

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

في هذا المثال ، ولأن عدد الحقول هو 10 حقول ، وعدد الحقول التي يتم ادخالها تلقائيا هي 6 حقول ، فأنت وفرت 60% من وقت ادخال البيانات ، وبالدقة المطلوبة 🙂

جعفر

 

بارك الله بك استاذ جعفر اللهم يارب تزداد علم وتقوى 

ونبقى نتعلم منكم

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

5 ساعات مضت, jjafferr said:

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

اسأل الله الا يحرمنا منك ولا من اضافتك

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


    If Len(Me.txtName & "") = 0 Then
        MsgBox "يحب اختيار اسم العميل اولاً", vbInformation, "officena"
        Me.txtName.SetFocus
    
    ElseIf Len(Me.txtTel & "") = 0 Then
        MsgBox "يحب اختياررقم التليفون اولاً", vbInformation, "officena"
        Me.txtTel.SetFocus
    
    ElseIf Len(Me.txtAddress & "") = 0 Then
        MsgBox "يحب اختيار العنوان اولاً", vbInformation, "officena"
        Me.txtAddress.SetFocus
    
    Else
        
        'to make a New Record in the SubForm, it has to be in Focus
        Me.frm2.SetFocus
        DoCmd.GoToRecord , , acNewRec
        
        'now take the values from the Main Form
        Me.frm2!XName = Me.txtName
        Me.frm2!XTel = Me.txtTel
        Me.frm2!XAddress = Me.txtAddress
       
        'save the SubForm Record so that the Record Count shows correctly
        If Me.frm2.Form.Dirty Then Me.frm2.Form.Dirty = False
        
        MsgBox "تم اضافة البيانات بنجاح ان شاء الله ", , "officena"
        
        ' Emptying TxttBox
        Me.txtName = Null
        Me.txtTel = Null
        Me.txtAddress = Null
        

    End If
    

1280.DB_test.accdb.zip

تحياتي

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

1 دقيقه مضت, محمد أبوعبدالله said:

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

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

 

طبعا ، هذا اذا كان المطلوب عمل كما كان افتراضي 😁

 

جعفر

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

1 دقيقه مضت, jjafferr said:

وإلا فلا فائدة من العمل ككل

بعد اضافة البيانات الا ترى تفريغ الحقول ليتم كتابة بيانات جديدة ؟

        MsgBox "تم اضافة البيانات بنجاح ان شاء الله ", , "officena"
        
        ' Emptying TxttBox
        Me.txtName = Null
        Me.txtTel = Null
        Me.txtAddress = Null

تحياتي

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

اذا كان العمل على شيء مثل سندات ادخال المواد او الصرف ، فيجب ان تبقى البيانات في هذه الحقول ،

اما اذا كان العمل شيء آخر ، ولا يتطلب وجود البيانات في الحقول ، فنعم طريقتك صحيحة 🙂

 

جعفر

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

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