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

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

قام بنشر

السلام عليكم الإخوة الأفاضل في هذا المنتدى الجميل

في موضوعي أريد إدراج بيانات جدول في جدولين كما يلي:

الكود الموجود في النمودج في زر"  تحديث "

يقوم بادراج و تحديث  جميع بيانات الحقول الموجودة في جدول tab_degree_saisie  يقوم بادراجها في جدول   tab_degree_mauel

أريد الابقاء على هذا الكود وأضيف له خاصية وهي:

إدراج الحقول التالية من جدول tab_degree_saisie  :

degre

numero_indice_degre

date_effet

الحقول السابقة تدرج في الجول المسمى tbl_info_fonctionnaire

في الحقول التالية بنفس الترتيب:

grade

num_indice_grade

date_effet_grade_actuel

مع مراعاة الشرط التالي 

 لدينا :

في جدول tab_degree_saisie 

لدينا الإسم: خالد مذكور مرتين:

خالد عنده الحقل degre  يساوي  7

وخالد عنده الحقل   degre  يساوي 8

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

فهنا نقوم بادراج بينانات خالد في جدول tbl_info_fonctionnaire  للحقل degree يساوي 8

أما إذاكان الإسم غير مكرر تدرج البانات مباشرة.

وكذلك الشرط الثاني:

مثال code_fonct =1   من  جدول tab_degree_saisie    تدرج في الجدول  tbl_info_fonctionnaire    في num =1

يعني خلاصة :

 ادراج وتحديث  جميع بيانات الحقول الموجودة في جدول tab_degree_saisie  يقوم بادراجها في جدول   tab_degree_mauel

ادراج 4 حقول كما هي مبينة أعلاه من جدول tab_degree_saisie  في جدول tbl_info_fonctionnaire   

مع مراعاة الشرط إذا كان الإسم مذكور مرة واحدة تدرج البيانات مباشرة

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

و مراعاة الشرط الثاني :

مثال code_fonct =1   من  جدول tab_degree_saisie    تدرج في الجدول  tbl_info_fonctionnaire    في num =1

نتمنى أن أكون قد أوصلت الفكرة.

الرجاء المساعدة والتوجيه وبارك الله فيكم

 

 

baseZ.accdb

قام بنشر

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

بناءً على ما فهمته من هذا الكم الهائل من المعطيات 😅 ، جرب هذا التعديل ، حيث تم التعديل عى كودك الأصلي ليصبح = 

Private Sub أمر1069_Click()
    On Error GoTo ErrorHandler
    
    DoCmd.SetWarnings False
    
    DoCmd.RunSQL "DELETE FROM tab_degree_mauel"
    
    DoCmd.RunSQL "INSERT INTO tab_degree_mauel(code_fonct, nom_prenom, grade_actuel, categorie, numero_indice_categorie, degre, numero_indice_degre, duree, date_effet, faid_31_12, date_signature_decision, date_reunion_comession, date_calcul_faid_31_12, num_decision) " & _
                "SELECT code_fonct, nom_prenom, grade_actuel, categorie, numero_indice_categorie, degre, numero_indice_degre, duree, date_effet, faid_31_12, date_signature_decision, date_reunion_comession, date_calcul_faid_31_12, num_decision " & _
                "FROM tab_degree_saisie"
    
    DoCmd.RunSQL "DELETE FROM tbl_info_fonctionnaire"
    
    DoCmd.RunSQL "INSERT INTO tbl_info_fonctionnaire(num, grade, num_indice_grade, date_effet_grade_actuel) " & _
                "SELECT code_fonct, degre, numero_indice_degre, date_effet " & _
                "FROM tab_degree_saisie t1 " & _
                "WHERE degre = (SELECT MAX(degre) FROM tab_degree_saisie t2 WHERE t2.nom_prenom = t1.nom_prenom)"
    
    DoCmd.SetWarnings True
    
    Me.Requery
    MsgBox "تم تحديث البيانات في الجدولين بنجاح", vbInformation + vbMsgBoxRight, "تنبيه"
    
    Exit Sub
    
ErrorHandler:
    DoCmd.SetWarnings True
    MsgBox " : حدث خطأ أثناء تنفيذ العملية " & Err.Description, vbCritical + vbMsgBoxRight, "خطأ"
End Sub

 

أخبرنا بالنتيجة :smile: 

baseZ.zip

  • Like 1
قام بنشر
16 ساعات مضت, Foksh said:

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

بناءً على ما فهمته من هذا الكم الهائل من المعطيات 😅 ، جرب هذا التعديل ، حيث تم التعديل عى كودك الأصلي ليصبح = 

Private Sub أمر1069_Click()
    On Error GoTo ErrorHandler
    
    DoCmd.SetWarnings False
    
    DoCmd.RunSQL "DELETE FROM tab_degree_mauel"
    
    DoCmd.RunSQL "INSERT INTO tab_degree_mauel(code_fonct, nom_prenom, grade_actuel, categorie, numero_indice_categorie, degre, numero_indice_degre, duree, date_effet, faid_31_12, date_signature_decision, date_reunion_comession, date_calcul_faid_31_12, num_decision) " & _
                "SELECT code_fonct, nom_prenom, grade_actuel, categorie, numero_indice_categorie, degre, numero_indice_degre, duree, date_effet, faid_31_12, date_signature_decision, date_reunion_comession, date_calcul_faid_31_12, num_decision " & _
                "FROM tab_degree_saisie"
    
    DoCmd.RunSQL "DELETE FROM tbl_info_fonctionnaire"
    
    DoCmd.RunSQL "INSERT INTO tbl_info_fonctionnaire(num, grade, num_indice_grade, date_effet_grade_actuel) " & _
                "SELECT code_fonct, degre, numero_indice_degre, date_effet " & _
                "FROM tab_degree_saisie t1 " & _
                "WHERE degre = (SELECT MAX(degre) FROM tab_degree_saisie t2 WHERE t2.nom_prenom = t1.nom_prenom)"
    
    DoCmd.SetWarnings True
    
    Me.Requery
    MsgBox "تم تحديث البيانات في الجدولين بنجاح", vbInformation + vbMsgBoxRight, "تنبيه"
    
    Exit Sub
    
ErrorHandler:
    DoCmd.SetWarnings True
    MsgBox " : حدث خطأ أثناء تنفيذ العملية " & Err.Description, vbCritical + vbMsgBoxRight, "خطأ"
End Sub

 

أخبرنا بالنتيجة :smile: 

baseZ.zip 29.35 kB · 6 downloads

تحية طيبة الأستاذ والأخ الكريم @Foksh

أولا أعتذر على التأخير في الرد على الموضوع

 بعد التجربة أخي شغال ويؤدي المطلوب في هذا المثال:

ربما أنا لم أعرف كيف أشرح

طبقته على قاعدة البيانات التي اعمل عليها

في جدول tbl_info_fonctionnaire     الذي عندي به حقول كثيرة وانا اختصرته وابقيت على 6 حقول

فالكود يقوم يقوم بحدف البيانات الموجودة السابقة في الجدول ويضيف الجديدة

وأنا أريد اخي الابقاء على جميع البيانات السابقة في جدول tbl_info_fonctionnaire     مع تحديث في الجدول  للحقول المعنية فقط.

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

 

قام بنشر

حسناً أخي الكريم ، ولا يهمك .. بسيطة

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

Private Sub أمر1069_Click()
    On Error GoTo ErrorHandler
    
    Dim db As DAO.Database
    Dim rsSource As DAO.Recordset
    Dim rsDest As DAO.Recordset
    Dim strSQL As String
    Dim currentCode As Long
    
    DoCmd.SetWarnings False
    Set db = CurrentDb
    
    db.Execute "DELETE FROM tab_degree_mauel", dbFailOnError
    db.Execute "INSERT INTO tab_degree_mauel(code_fonct, nom_prenom, grade_actuel, categorie, numero_indice_categorie, degre, numero_indice_degre, duree, date_effet, faid_31_12, date_signature_decision, date_reunion_comession, date_calcul_faid_31_12, num_decision) " & _
               "SELECT code_fonct, nom_prenom, grade_actuel, categorie, numero_indice_categorie, degre, numero_indice_degre, duree, date_effet, faid_31_12, date_signature_decision, date_reunion_comession, date_calcul_faid_31_12, num_decision " & _
               "FROM tab_degree_saisie", dbFailOnError
    
    strSQL = "SELECT t1.code_fonct, t1.nom_prenom, t1.degre, t1.numero_indice_degre, t1.date_effet " & _
             "FROM tab_degree_saisie t1 " & _
             "INNER JOIN (SELECT nom_prenom, MAX(degre) AS MaxDegre " & _
                         "FROM tab_degree_saisie " & _
                         "GROUP BY nom_prenom) t2 " & _
             "ON t1.nom_prenom = t2.nom_prenom AND t1.degre = t2.MaxDegre"
    
    Set rsSource = db.OpenRecordset(strSQL, dbOpenDynaset)
    
    If Not (rsSource.EOF And rsSource.BOF) Then
        rsSource.MoveFirst
        Do Until rsSource.EOF
            currentCode = Nz(rsSource!code_fonct, 0)
            
            Set rsDest = db.OpenRecordset("SELECT * FROM tbl_info_fonctionnaire WHERE num = " & currentCode, dbOpenDynaset)
            
            If rsDest.EOF Then
                rsDest.AddNew
                rsDest!num = currentCode
            Else
                rsDest.Edit
            End If
            
            rsDest!grade = rsSource!degre
            rsDest!num_indice_grade = Nz(rsSource!numero_indice_degre, 0)
            rsDest!date_effet_grade_actuel = Nz(rsSource!date_effet, Date)
            
            rsDest.Update
            rsDest.Close
            
            rsSource.MoveNext
        Loop
    End If
    
    MsgBox "تم تحديث البيانات بنجاح", vbInformation + vbMsgBoxRight, ""
    
Cleanup:
    On Error Resume Next
    If Not rsSource Is Nothing Then
        rsSource.Close
        Set rsSource = Nothing
    End If
    If Not rsDest Is Nothing Then
        rsDest.Close
        Set rsDest = Nothing
    End If
    Set db = Nothing
    DoCmd.SetWarnings True
    Me.Requery
    Exit Sub
    
ErrorHandler:
    MsgBox "حدث خطأ: " & Err.Description, vbCritical + vbMsgBoxRight, "خطأ"
    Resume Cleanup
End Sub

 

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