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

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

قام بنشر

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

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


تم ارفاق مثال لذلك

test.rar

قام بنشر

أجريت هذا التعديل .. وربما يكون للخبراء رأي بخصوص Resume Next 🙂  :

image.png.af36d96cf59a5303d6b5786a99d8f4c6.png

 

 

test.rar

  • Haha 1
قام بنشر (معدل)
9 ساعات مضت, Moosak said:

أجريت هذا التعديل .. وربما يكون للخبراء رأي بخصوص Resume Next 🙂  :

image.png.af36d96cf59a5303d6b5786a99d8f4c6.png

 

 

test.rar 283.39 kB · 4 downloads

حلوة وقوية الحركة دي مهندسنا الغالي :wavetowel: ,,

اعتقد أن جملة :

Exit Sub

جعلت من هذا الجزء

ErrorHandler:
    If Err.Number <> 0 Then
        MsgBox "حدث خطأ أثناء الحفظ: " & Err.Number & " - " & Err.Description, vbCritical
        Resume Next
    End If

وكأنه غير موجود حتى لو ظهر خطأ ، فسيتم الخروج من الـ Sub قبل الوصوا الى ErrorHandler ، وعليه فإنه في الملف الأصلي لأخونا @yazan_2 لو استخدم Exit Sub قبل جملة ErrorHandler ، فأعتقد أنه لن تظهر عنده رسائل الخطأ بعد الحفظ أو التعديل . هذا من ناحية المشكلة التي تظهر بعد حفظ السجل أو تحديثه .

من ناحية أخرى ، ارتأيت هذا التعديل على الكود لإتمام عملية الحفظ كسجل جديد أو تحديث السجل الحالي من خلال :-

Private Sub BtnSave_Click()
    On Error GoTo ErrorHandler
    
    If IsNull(Me.NatiID) Or Trim(Me.NatiID) = "" Then
        MsgBox "يرجى إدخال قيمة في حقل رقم الهوية.", vbExclamation
        Exit Sub
    End If

    Set db = CurrentDb()
    
    strSQL = "SELECT * FROM Employees WHERE NatiID = '" & Me.NatiID & "'"
    Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
    
    If rs.EOF Then
        rs.AddNew
        MsgBox "تم إضافة موظف جديد."
    Else
        rs.Edit
        MsgBox "تم تحديث بيانات الموظف."
    End If
    
    rs!NatiID = Me.NatiID
    rs!FName = Me.FName
    rs!LName = Me.LName
    rs!GName = Me.GName
    rs!FamName = Me.FamName
    rs!Rank = Me.Rank
    rs!BirthDate = Me.BirthDate
    rs!Age = Me.Age
    rs!BirthPlace = Me.BirthPlace
    
    rs.Update
    rs.Close
    Set rs = Nothing
    Set db = Nothing

    Exit Sub

ErrorHandler:
    MsgBox "حدث خطأ أثناء الحفظ: " & Err.Description, vbCritical
    Resume Next
End Sub


طبعاً فيما يخص المتغيرات فلم أعدل عليها شيء وتركتها كما هي في مكان حجزها أول الأكواد

Option Compare Database
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSQL As String



هذا كله رأيي الشخصي وليس فرضاً :smile:

تم تعديل بواسطه Foksh
  • Like 1
قام بنشر (معدل)

بارك الله فيكم جميعا ما قصرتم  ويكفي اهتمامكم ومشاركاتكم

لا تزال المشكلة
يتم الحفظ ولكن تبقى العملية معلقة فعند االضغط على جديد تظهر رسالة الخطأ
وعند الخروج تظهر رسالة الخطأ
=
تم إزالة الفهرس من الحقل الخاص الموظف (NatiID) وتم اجراء عملية الحفظ
واكتشفت ان المشكلة ان السجل يتم إدخاله مرتين !!
الخلل في الحفظ يتم القيام بعملية التكرار ولم اجد سبب لذلك ؟
اريد كود لحفظ الحقول في قاعدة البيانات مرة واحدة
بواسطة 
ADO او Dao
وفق الله الجميع
 

تم تعديل بواسطه yazan_2
زيادة ايضاح
قام بنشر

مشاركة مع اخواني واحبتي

مشكلتك بسبب

1- ادراج الكود في المكان الخطأ 

2- توظيف دالتين متباينتين في مكان واحد بدون وضع شرط فاصل حقيقي

نأتي للخطأ الأول "  

AddNew  تستعمل في النماذج الحرة غير المرتبطة في جدول او الاجراء يتم على جدول بعيد منفصل عن النموذج

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

لذا لإجراء  AddNew جديد يجب ان يكون النموذج حر من غير مصدر

........

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

اتوقع انك فاهمني

انت بحاجة لجعل الادخال الجديد في نموذج غير مرتبط

والتغيير والتحديث في نموذجك الحالي

 

ايضا الشرط في في هذا السطر يكون عند التحديث والتعديل فقط

 strSQL = "SELECT * FROM Employees WHERE NatiID = '" & Me.NatiID & "'"

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

قام بنشر

 جميع الاخوة :
بارك الله فيكم جميعا ومشاركاتكم اضافة فائدة عظيمة
واشكر الاخ ابوخليل    على توضيح الملاحظات  المهمه 

الاخ Foksh

اشكر لك اضافتك الجميلة ولكن انا لا ارغب في اضافة 
DoCmd.GoToRecord , , acNewRec
لأنها تقوم بعم الحفظ كما هو موجود في مربع النص ولكن هدفي هو تعبئة كل حقل بما يقابله  من مربعات النص لان البعض سيتم وضع اضافة لها يدويا

اكرر شكري وتقديري
 

قام بنشر
53 دقائق مضت, yazan_2 said:

اشكر لك اضافتك الجميلة ولكن انا لا ارغب في اضافة 
DoCmd.GoToRecord , , acNewRec

العفو أخي الكريم ،

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

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

 

هذه كانت وجهة نظري .

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

 

وهذه كله وجهة نظر ليس إلا 🤗

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