yazan_2 قام بنشر نوفمبر 13 قام بنشر نوفمبر 13 لدي برنامج يخص الموظفين ولكن تواجهني مشكلة عند حفظ السجل بالكود حيث تظهر رسالة خطا ولا تستطيع ايضا عمل جديد بعد الحفظ امل مساعدتي حيال ايضاح المشكلة وحلها بارك الله فيكم تم ارفاق مثال لذلك test.rar
Moosak قام بنشر نوفمبر 13 قام بنشر نوفمبر 13 أجريت هذا التعديل .. وربما يكون للخبراء رأي بخصوص Resume Next 🙂 : test.rar 1
Foksh قام بنشر نوفمبر 13 قام بنشر نوفمبر 13 (معدل) 9 ساعات مضت, Moosak said: أجريت هذا التعديل .. وربما يكون للخبراء رأي بخصوص Resume Next 🙂 : test.rar 283.39 kB · 4 downloads حلوة وقوية الحركة دي مهندسنا الغالي ,, اعتقد أن جملة : 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 هذا كله رأيي الشخصي وليس فرضاً تم تعديل نوفمبر 13 بواسطه Foksh 1
yazan_2 قام بنشر نوفمبر 14 الكاتب قام بنشر نوفمبر 14 (معدل) بارك الله فيكم جميعا ما قصرتم ويكفي اهتمامكم ومشاركاتكم لا تزال المشكلة يتم الحفظ ولكن تبقى العملية معلقة فعند االضغط على جديد تظهر رسالة الخطأ وعند الخروج تظهر رسالة الخطأ = تم إزالة الفهرس من الحقل الخاص الموظف (NatiID) وتم اجراء عملية الحفظ واكتشفت ان المشكلة ان السجل يتم إدخاله مرتين !! الخلل في الحفظ يتم القيام بعملية التكرار ولم اجد سبب لذلك ؟ اريد كود لحفظ الحقول في قاعدة البيانات مرة واحدة بواسطة ADO او Dao وفق الله الجميع تم تعديل نوفمبر 14 بواسطه yazan_2 زيادة ايضاح
ابوخليل قام بنشر نوفمبر 14 قام بنشر نوفمبر 14 مشاركة مع اخواني واحبتي مشكلتك بسبب 1- ادراج الكود في المكان الخطأ 2- توظيف دالتين متباينتين في مكان واحد بدون وضع شرط فاصل حقيقي نأتي للخطأ الأول " AddNew تستعمل في النماذج الحرة غير المرتبطة في جدول او الاجراء يتم على جدول بعيد منفصل عن النموذج غير منطقي ان تضيف سجل هو موجود بالفعل ( اكسس يحفظ تلقائيا بمجرد الكتابة ) لذا لإجراء AddNew جديد يجب ان يكون النموذج حر من غير مصدر ........ في وضعك الحالي يمكنك استخدام Edit فقط للتعديل على السجل الظاهر الحالي اتوقع انك فاهمني انت بحاجة لجعل الادخال الجديد في نموذج غير مرتبط والتغيير والتحديث في نموذجك الحالي ايضا الشرط في في هذا السطر يكون عند التحديث والتعديل فقط strSQL = "SELECT * FROM Employees WHERE NatiID = '" & Me.NatiID & "'" اما عند اضافة جديد فلست بحاجة لهذا الشرط ( بل وجوده خطأ) وانما تكتب اسم الجدول صريحا
Foksh قام بنشر نوفمبر 14 قام بنشر نوفمبر 14 ومشاركة لما أشار إليه والدنا الحبيب ومعلمنا الفاضل @ابوخليل ، تفضل أخي @yazan_2 ، هذا التعديل البسيط تفقد النموذج Main Test_Copy.accdb
yazan_2 قام بنشر الجمعة at 17:28 الكاتب قام بنشر الجمعة at 17:28 جميع الاخوة : بارك الله فيكم جميعا ومشاركاتكم اضافة فائدة عظيمة واشكر الاخ ابوخليل على توضيح الملاحظات المهمه الاخ Foksh اشكر لك اضافتك الجميلة ولكن انا لا ارغب في اضافة DoCmd.GoToRecord , , acNewRec لأنها تقوم بعم الحفظ كما هو موجود في مربع النص ولكن هدفي هو تعبئة كل حقل بما يقابله من مربعات النص لان البعض سيتم وضع اضافة لها يدويا اكرر شكري وتقديري
Foksh قام بنشر الجمعة at 18:32 قام بنشر الجمعة at 18:32 53 دقائق مضت, yazan_2 said: اشكر لك اضافتك الجميلة ولكن انا لا ارغب في اضافة DoCmd.GoToRecord , , acNewRec العفو أخي الكريم ، الهدف من جملة السجل الجديد هو فقط عند الإضافة ، وتحصيل حاصل أنت عند تعبئة الحقول كسجل جديد وقمت مثلاً بالنقر على زر التالي او السابق على سبيل المثال فسيتم الحفظ التلقائي كما أشار معلمي @ابوخليل . لذا فباعتقادي لست بحاجة لتكرار استعلام التحديث او الإضافة ( لتقليل التكرار ) . هذه كانت وجهة نظري . أما فيما يتعلق في مشكلة الرسالة التي تظهر عند تحديث السجل ، ففي الكود يقوم آكسيس بإضافة سجل وتحديث سجل موجود وهنا كان التعارض وسبب الرسالة بالحفظ للسجل أو الغاء الحفظ ... إلخ وهذه كله وجهة نظر ليس إلا 🤗
yazan_2 قام بنشر الأحد at 16:10 الكاتب قام بنشر الأحد at 16:10 شكرا لك على التوضيح وسعدت بتواجدك دمتم بخير
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.