صابر سليمان قام بنشر نوفمبر 3, 2022 قام بنشر نوفمبر 3, 2022 (معدل) سلام عليكم أثناء العمل علي الشبكة ضروري جدا أن نعرف اسماء المستخدمين الذين قاموا بالتعديل علي الاذن بعد انشاءه هل هناك طريقة لمعرفة اسماء الحقول التي تم تعديلها من قبل المستخدمين ؟!! يعني لو نموذج به حقول ( اسم العميل .. تاريخ الاذن ..ملاحظات ).. لو قام يوزر ( س ) بالتعديل علي تاريخ الاذن وقام يوزر ( ص ) بالتعديل علي اسم العميل هل يمكنني معرفة أن اليوزر ( س) قام بالتعديل علي حقل تاريخ الاذن وأن اليوزر ( ص ) قام بالتعديل علي حقل اسم العميل شكرا تم تعديل نوفمبر 3, 2022 بواسطه صابر سليمان
Moosak قام بنشر نوفمبر 3, 2022 قام بنشر نوفمبر 3, 2022 وعليكم السلام أخي صابر 🙂 إطلع على موضوع المهندس جعفر حول هذا الأمر : 1
صابر سليمان قام بنشر نوفمبر 7, 2022 الكاتب قام بنشر نوفمبر 7, 2022 استاذنا الكبير الخبير @Moosak طريقة استاذنا العبقري @jjafferr طريقة ممتازة لكن لو عندي مثلا 20 حقل اعتقد ان الموضوع متعب شوية هل يوجد طريقة للبحث علي اسم الحقل الذي تم فيه التعديل دون كتابة اسم جميع الحقول في ماكرو اسف جدا علي تأخيري كنت باحاول افهم واطبق الطريقة اللي اتفضل بيها استاذنا @jjafferr😊
jjafferr قام بنشر نوفمبر 7, 2022 قام بنشر نوفمبر 7, 2022 31 دقائق مضت, صابر سليمان said: اسم الحقل الذي تم فيه التعديل دون كتابة اسم جميع الحقول في ماكرو نعم، فقط اكتب اسم الحقل الذي تريدة ، ولا داعي لكتابة بقية الحقول (اذا لم ترد متابعة قيمهم) 🙂 33 دقائق مضت, صابر سليمان said: لكن لو عندي مثلا 20 حقل اعتقد ان الموضوع متعب شوية اذا تابعت شرحي في الموضوع اعلاه ، لو لاحظت اني اعطيتك: https://www.officena.net/ib/topic/112991-سِحر-جداول-الاكسس-في-تسجيل-الوقائع/?do=findComment&comment=680635 اقتباس - طريقة برمجية عن طريق عمل ملف XML نضع فيه الاوامر اعلاه ، ثم نستورده لقاعدة البيانات ، . فيعني ، اكتب الاسطر المطلوبة لحقل واحد فقط ، ثم اعمل نسخ/لصق لهذه الاسطر ، وفقط قم بتغيير اسم الحقل 🙂 . ونعم ، عملت برنامج خاص يقوم بالعمل كله تلقائيا ، وما يكون "الموضوع متعب شوية 🙂 " : . ولكن يحتاج الى تعديل ، لأنه مصمم لقاعدة بيانات معينة ، لزبون جدا غالي عليّ ، وان شاء الله برفع نسخة منه لما افضى 🙂 جعفر
Moosak قام بنشر نوفمبر 7, 2022 قام بنشر نوفمبر 7, 2022 (معدل) من باب التنويع وتعدد الأفكار .. ومشاركة الأساتذة 🙂 هناك طريقة سهلة أيضا نفذتها على السريع .. 😉 فكرتها أنها تقوم بعمل سجل لكل التعديلات التي تجري على كل سجل وتكتب: ( اسم المستخدم ، اسم الحقل ، التاريخ والوقت ) .. وتلخيصها كالتالي : كل ما ستحتاجه هو حقل من نوع [ نص طويل ] تضيفه في الجدول .. وهذه الدالة في محرر الأكواد الخاص بالنموذج : Function WhoChangeWhat() Dim t As Date Dim U As String Dim Ctrl As String t = Format(Now, "yyyy/mm/dd HH:nn:ss") U = Environ("username") Ctrl = Screen.ActiveControl.Name Me.Changes = Changes & vbCr & " user : (" & U & ") change The Feiled : (" & Ctrl & ") At: " & t End Function ولك أن تغير ما تريد أن تكتبه لك الدالة في مربع النص .. 🙂 ولتطبيقها بأسهل طريقة : تقوم بتحديد جميع الحقول القابلة للتعديل .. ثم من لوحة الخصائص عند حدث ( بعد التحديث ) تكتب اسم الدالة هكذا : =WhoChangeWhat() ولك الخيار في الإبقاء على الحقل ظاهراً .. أو إخفائه بحيث يظهر للمدير فقط 🙂 UsersActions.accdb تم تعديل نوفمبر 7, 2022 بواسطه Moosak 3
biskra قام بنشر نوفمبر 7, 2022 قام بنشر نوفمبر 7, 2022 (معدل) محاولة أخرى و ربما بطريقة بسيطة بواسطة الكود حسب المثال المرفق Const cDQ As String = """" Sub AuditTrail(frm As Form, recordid As Control) 'Track changes to data. 'recordid identifies the pk field's corresponding 'control in frm, in order to id record. Dim ctl As Control Dim varBefore As Variant Dim varAfter As Variant Dim strControlName As String Dim strSQL As String On Error GoTo ErrHandler 'Get changed values. For Each ctl In frm.Controls With ctl 'Avoid labels and other controls with Value property. If .ControlType = acTextBox Then If .Value <> .OldValue Then varBefore = .OldValue varAfter = .Value strControlName = .Name 'Build INSERT INTO statement. strSQL = "INSERT INTO " _ & "Audit (EditDate, User, RecordID, SourceTable, " _ & " SourceField, BeforeValue, AfterValue) " _ & "VALUES (Now()," _ & cDQ & Environ("username") & cDQ & ", " _ & cDQ & recordid.Value & cDQ & ", " _ & cDQ & frm.RecordSource & cDQ & ", " _ & cDQ & .Name & cDQ & ", " _ & cDQ & varBefore & cDQ & ", " _ & cDQ & varAfter & cDQ & ")" 'View evaluated statement in Immediate window. Debug.Print strSQL DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End If End If End With Next Set ctl = Nothing Exit Sub ErrHandler: MsgBox Err.Description & vbNewLine _ & Err.Number, vbOKOnly, "Error" End Sub نقوم باستراد الكود و الجدول المسمى Audit إلى قاعدة البيانات، و في النموذج أو النماذج نستدعي الكود في حدث قبل التحديث Private Sub Form_BeforeUpdate(Cancel As Integer) Call AuditTrail(Me, Auto_ID) End Sub حسب المثال نفتح النموذج Frm_info و نقوم بالتعديلات للتجربة ثم نفتح الجدول Audit و سوف نجد تسجيل لكل التعديلات، و خاصة اسم أدمن الجهاز أو المستخدم للجهاز رابط الكود للفائدة https://www.techrepublic.com/article/a-simple-solution-for-tracking-changes-to-access-data/ Access Tables Magic.accdb تم تعديل نوفمبر 7, 2022 بواسطه biskra 2
صابر سليمان قام بنشر نوفمبر 7, 2022 الكاتب قام بنشر نوفمبر 7, 2022 كتير عليا والله أن يقوم عباقرة الموقع بالرد علي سؤال لي وكما تعودنا من حضراتكم دائما الابداع والاحترافية في الردود جزاكم الله كل خير اساتذتي الكرام شكرا جزيلا 1
UserUser2 قام بنشر نوفمبر 8, 2022 قام بنشر نوفمبر 8, 2022 في 7/11/2022 at 05:56, biskra said: محاولة أخرى و ربما بطريقة بسيطة بواسطة الكود حسب المثال المرفق Const cDQ As String = """" Sub AuditTrail(frm As Form, recordid As Control) 'Track changes to data. 'recordid identifies the pk field's corresponding 'control in frm, in order to id record. Dim ctl As Control Dim varBefore As Variant Dim varAfter As Variant Dim strControlName As String Dim strSQL As String On Error GoTo ErrHandler 'Get changed values. For Each ctl In frm.Controls With ctl 'Avoid labels and other controls with Value property. If .ControlType = acTextBox Then If .Value <> .OldValue Then varBefore = .OldValue varAfter = .Value strControlName = .Name 'Build INSERT INTO statement. strSQL = "INSERT INTO " _ & "Audit (EditDate, User, RecordID, SourceTable, " _ & " SourceField, BeforeValue, AfterValue) " _ & "VALUES (Now()," _ & cDQ & Environ("username") & cDQ & ", " _ & cDQ & recordid.Value & cDQ & ", " _ & cDQ & frm.RecordSource & cDQ & ", " _ & cDQ & .Name & cDQ & ", " _ & cDQ & varBefore & cDQ & ", " _ & cDQ & varAfter & cDQ & ")" 'View evaluated statement in Immediate window. Debug.Print strSQL DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End If End If End With Next Set ctl = Nothing Exit Sub ErrHandler: MsgBox Err.Description & vbNewLine _ & Err.Number, vbOKOnly, "Error" End Sub نقوم باستراد الكود و الجدول المسمى Audit إلى قاعدة البيانات، و في النموذج أو النماذج نستدعي الكود في حدث قبل التحديث Private Sub Form_BeforeUpdate(Cancel As Integer) Call AuditTrail(Me, Auto_ID) End Sub حسب المثال نفتح النموذج Frm_info و نقوم بالتعديلات للتجربة ثم نفتح الجدول Audit و سوف نجد تسجيل لكل التعديلات، و خاصة اسم أدمن الجهاز أو المستخدم للجهاز رابط الكود للفائدة https://www.techrepublic.com/article/a-simple-solution-for-tracking-changes-to-access-data/ Access Tables Magic.accdb 928 kB · 4 downloads كيفية تنفيذ ذلك على اكثر من نموذج واكثر من جدول
biskra قام بنشر نوفمبر 9, 2022 قام بنشر نوفمبر 9, 2022 كل ما عليك فعله هو وضع الكود في النموذج المرتبط بالجدول الذي تريد تتبعه و تغير فقط في اسم الحقل في الكود Private Sub Form_BeforeUpdate(Cancel As Integer) Call AuditTrail(Me, هنا تضع اسم الحقل) End Sub
UserUser2 قام بنشر نوفمبر 10, 2022 قام بنشر نوفمبر 10, 2022 في 9/11/2022 at 11:03, biskra said: كل ما عليك فعله هو وضع الكود في النموذج المرتبط بالجدول الذي تريد تتبعه و تغير فقط في اسم الحقل في الكود Private Sub Form_BeforeUpdate(Cancel As Integer) Call AuditTrail(Me, هنا تضع اسم الحقل) End Sub شكرا لحضرتك لو ممكن مثال
biskra قام بنشر نوفمبر 11, 2022 قام بنشر نوفمبر 11, 2022 تفضل الملف بعد إضافة جدول و نموذج جديد باسم Table2 , Access Tables Magic.rar
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.