اذهب الي المحتوي
أوفيسنا

كود لمعرفة اسم الحقل في النموذج بعد التعديل من قبل مستخدم ما علي الشبكة


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

سلام عليكم 

  أثناء العمل علي الشبكة 
ضروري جدا أن نعرف اسماء المستخدمين الذين قاموا بالتعديل علي الاذن بعد انشاءه 

هل هناك طريقة لمعرفة اسماء الحقول التي تم تعديلها  من قبل المستخدمين ؟!!

يعني لو نموذج به حقول  ( اسم العميل  .. تاريخ الاذن ..ملاحظات  ).. لو قام  يوزر ( س ) بالتعديل علي تاريخ  الاذن  وقام يوزر ( ص ) بالتعديل علي اسم العميل 
هل يمكنني معرفة  أن  اليوزر ( س) قام بالتعديل علي حقل  تاريخ الاذن وأن اليوزر ( ص ) قام بالتعديل علي  حقل اسم العميل 

شكرا 

تم تعديل بواسطه صابر سليمان
رابط هذا التعليق
شارك

استاذنا الكبير الخبير @Moosak
طريقة استاذنا العبقري @jjafferr طريقة ممتازة 
لكن لو عندي مثلا 20 حقل اعتقد ان الموضوع متعب شوية 
هل يوجد طريقة للبحث علي اسم الحقل الذي تم فيه التعديل دون كتابة اسم جميع الحقول في ماكرو 
اسف جدا علي تأخيري 
كنت باحاول افهم واطبق الطريقة اللي اتفضل بيها استاذنا @jjafferr😊

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

31 دقائق مضت, صابر سليمان said:

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

نعم، فقط اكتب اسم الحقل الذي تريدة ، ولا داعي لكتابة بقية الحقول (اذا لم ترد متابعة قيمهم) 🙂

 

33 دقائق مضت, صابر سليمان said:

لكن لو عندي مثلا 20 حقل اعتقد ان الموضوع متعب شوية

اذا تابعت شرحي في الموضوع اعلاه ، لو لاحظت اني اعطيتك: https://www.officena.net/ib/topic/112991-سِحر-جداول-الاكسس-في-تسجيل-الوقائع/?do=findComment&comment=680635

اقتباس

- طريقة برمجية عن طريق عمل ملف XML نضع فيه الاوامر اعلاه ، ثم نستورده لقاعدة البيانات ،

.

فيعني ، اكتب الاسطر المطلوبة لحقل واحد فقط ، ثم اعمل نسخ/لصق لهذه الاسطر ، وفقط قم بتغيير اسم الحقل 🙂

.

 

ونعم ، عملت برنامج خاص يقوم بالعمل كله تلقائيا ، وما يكون "الموضوع متعب شوية 🙂 " :

image.png.9cf0e5d50df4dea63bed5a69d8f1186b.png

.

ولكن يحتاج الى تعديل ، لأنه مصمم لقاعدة بيانات معينة ، لزبون جدا غالي عليّ ، وان شاء الله برفع نسخة منه لما افضى 🙂

جعفر

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

من باب التنويع وتعدد الأفكار .. ومشاركة الأساتذة 🙂 

هناك طريقة سهلة أيضا نفذتها على السريع .. 😉

فكرتها أنها تقوم بعمل سجل لكل التعديلات التي تجري على كل سجل وتكتب: ( اسم المستخدم ، اسم الحقل ، التاريخ والوقت ) .. وتلخيصها كالتالي :

image.thumb.gif.276dc6237eda434afd2dcbe89693783b.gif

كل ما ستحتاجه هو حقل من نوع [ نص طويل ] تضيفه في الجدول .. وهذه الدالة في محرر الأكواد الخاص بالنموذج :

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()

image.png.64d143cd5b50c1841916fe01b8782578.png

 

ولك الخيار في الإبقاء على الحقل ظاهراً .. أو إخفائه بحيث يظهر للمدير فقط 🙂 

 

 

UsersActions.accdb

تم تعديل بواسطه Moosak
  • Like 3
رابط هذا التعليق
شارك

محاولة أخرى و ربما بطريقة بسيطة بواسطة الكود حسب  المثال المرفق

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

تم تعديل بواسطه biskra
  • Like 2
رابط هذا التعليق
شارك

كتير عليا والله أن يقوم عباقرة الموقع بالرد علي سؤال لي 
وكما تعودنا من حضراتكم دائما الابداع  والاحترافية في الردود 
جزاكم الله كل خير اساتذتي الكرام
شكرا جزيلا 

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

في 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

كيفية تنفيذ ذلك على اكثر من نموذج واكثر من جدول 
 

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

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

Private Sub Form_BeforeUpdate(Cancel As Integer)
 Call AuditTrail(Me, هنا تضع اسم الحقل)
End Sub

 

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

في 9‏/11‏/2022 at 11:03, biskra said:

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

Private Sub Form_BeforeUpdate(Cancel As Integer)
 Call AuditTrail(Me, هنا تضع اسم الحقل)
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