الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]كود فحص حقول نموذج قبل حفظها

بدأه فلنتوخ في 24 مايو 2008 · 14 رد · 3,642 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بارك الله فيكم ونفع بعلمكم..

سألت ذات يوم وفي عام2003سؤال لم أجد له إجابه وها أنا ذا أعيده مرة أخرى بعد أكثر من خمس سنوات فهل أجده...هذا ما آآآآمل ولن يصيبني اليأس حتى تملوا :)

عندي في أحد النماذج يوجد حقول نصية وكومبو وكذلك Tab Control ويحتوي على مجموعة من الـ Pages وفي كل Page يوجد مجموعة Check Boxs

ما أريده تحديداً عندما أضغط على زر حفظ يكون هناك كود يفحص جميع هذه الحقول بالنموذج سواء الحقول النصية أو الكمبو أو الـCheck Boxs فإذا لم يكن هناك أي تعديل عليها ولم تتغير قيمتها يعطيني رسالة بأنه "لا يوجد بيانات تم تعديلها لكي يتم حفظها" أما عدا ذلك فيقبل الحفظ وترحيل البيانات إلى الجدول المطلوب.

يوجد مثال مرفق للتوضيح.

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

For Each CtlCheckBox In Me.Controls

If CtlCheckBox.ControlType = acCheckBox Then

If CtlCheckBox.Value = CtlCheckBox.OldValue Then

End If

Next CtlCheckBox

ولكن لم أعرف كيف أستخدمها بالشكل الصحيح على كل عناصر النموذج دون وقوع خطأ.

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

controls.rar

#2

جااااااوبوووني الله يجزاكم خير ويوفقكم تراني تعبت بدون حل

البرنامج عندكم عدلوا فيه بالكود المناسب الله لا يحرمكم الأجر

مديري كل يوم يسأل لقيت حل .. وكل يوم أقول ايه بس أطلع له بمشكله ثانيه عشان ما يسأل ثانيه..لكنه ماينسى وكل يوم يعيد سؤاله.....................انقذوووني يا فطاحلة المنتدى

#3

أخي الكريم

إليك الكود

Dim ctlTextbox As Control
	  For Each ctlTextbox In Me.Controls

	  If ctlTextbox.Tag = "Musleh" Then
		 If IsNull(ctlTextbox) Then
			 MsgBox "لم تكتمل البيانات بعد", vbMsgBoxRight + vbInformation, ""
		 Exit Sub

		 End If
	  End If

	  Next ctlTextbox
 MsgBox "عمل رائع ", vbMsgBoxRight + vbInformation, ""

هناك خاصية لكل عنصر على النموذج تسمى (علامة) وباللغة الإنجليزية تسمى Tag استخدمها للحقول التي تريد من البرنامج فحصها فقد تكون هناك حقول لا نريد الكود فحصها

في الكود السابق وضعة في هذه الخاصية كلمة Musleh وأشرت لها في الكود

إذا أردت أختبار جميع الحقول دون استثناء فإليك الكود الخاص بذلك

Dim ctlTextbox As Control
	  For Each ctlTextbox In Me.Controls

		 If IsNull(ctlTextbox) Then
			 MsgBox "لقد تركت أحدالحقول المطلوبة فارغاً ", vbMsgBoxRight + vbInformation, ""
		 Exit Sub

	  End If

	  Next ctlTextbox
 MsgBox "عمل جيد ", vbMsgBoxRight + vbInformation, ""

ولكن هذا الكود لا يصلح مع مثالك لأن هناك حقل ( حاصل على دورة ) وفي هذه الحالة سيكون أحد الخيارين فارغ

لذلك الكود الأول أصلح لمثالك

المثال عليه الكود

controls.rar

تم تعديل هذه المشاركة بواسطة مصلح الحريصي في 24 مايو 2008 في 22:06

#4

استاذ مصلح بارك الله فيك و وفقك لكل خير

أشكر سرعة تجاوبك جعلها الله في ميزان حسناتك

ولكن الكود المكتوب غير موجود بالمثال المرفق في ردك...

كذلك وحسب ما تراه ما رأيك في وضع البرنامج والطريقة الأمثل لمعالجة كل أنواع تلك الحقول(قائمة منسدلة-مربع نص-مربع اختيار وغيره كما في المرفق) حتى يتم فحصها جميعا هل تم تعديلها أم لا وإظهار الرسالة المناسبة في حال عدم التعديل أو في حال التعديل يقوم بالحفظ.

لك خالص شكري وجزيل امتناني

على أحر من الجمر .. أنتظرك

أقصد بهل تم تعديل البيانات في النموذج أم لا....أي هل قيمتها الحالية نفس قيمتها السابقة قبل الحفظ

فإذا كانت نفسها فهذا يعني عدم التغيير بها وبالتالي يظهر رسالة بأنه لا يوجد ما يستحق التعديل،،،وخلاف ذلك يقوم بالحفظ في الداتا بيز

#5

مبرمجنا الكبير

لكن الكود المكتوب غير موجود بالمثال المرفق في ردك

بلى لو نظرت أعلى النموذج لوجد الزر يحمل الكود الأول

كذلك وحسب ما تراه ما رأيك في وضع البرنامج والطريقة الأمثل لمعالجة كل أنواع تلك الحقول(قائمة منسدلة-مربع نص-مربع اختيار وغيره كما في المرفق) حتى يتم فحصها جميعا هل تم تعديلها أم لا وإظهار الرسالة المناسبة في حال عدم التعديل أو في حال التعديل يقوم بالحفظ.

الكود الثاني يقوم بذلك

أقصد بهل تم تعديل البيانات في النموذج أم لا....أي هل قيمتها الحالية نفس قيمتها السابقة قبل الحفظ

الكلام في هذا الموضوع طويل والكثير من الأخوة تحدثوا عن ذلك بإسهاب هنا

بالإضافة لما قدم في تلك المشاركات فالطريقة التي أتبعها في ذلك على النحو التالي :

معظم العناصر على النماذج مثل ( TextBox _ ComboBox _ Listbox _ Option ) وغيرها من العناصر تحتوي على خاصية ( OldValue ) وتعني القيمة القديمة للعنصر و ( Value ) تعني القيمة الحالية.

تستطيع تخزين قيمة الخاصية OldValue في مصفوفة ومقارنتها مع Value الكل عنصر وعن طريق ذلك تستطيع معرفة إذا تم تحديث على البيانات المعروضة أم لاء

يقي أنك تضع الكود السابق في المكان المناسب

حمل المثال الموجود في مشاركتي السابقة فقد قمت بالتعديل عليه ووضعت الكود على زر أمر الحفظ

#6

استاذنا بارك الله فيك

أعتذر ماشفت التعديل اللي بالملف يمكن من فرحتي تسرعت بفتح البرنامج ولا انتبهت له.

لكن يا استاذي وجدت ان الكود كما يلي:

- يعطي رساله كل مره اضغط فيها على زر حفظ مفادها أنني تركت أحد الحقول فارغها....لذا ينبغي علي أن أضع إشارة صح على كل الـCheckBox وهذا لا أريده.

- النموذج المفترض فحص حقوله هو نموذج التعديل وليس نموذج الإدخال..بحيث يفحص عند النقر على زر حفظ..جميع الـCheckBoxفإذا اتضح أن قيمة الـoldvalueتختلف عن الـvalueالحالي فهذا يعني حفظ البيانات،،،أما إذا لم تختلف جميع الـCheckboxفتظهر رسالة تفيد بأن البيانات لم تتغير ولا داعي للحفظ.

سلمت وسلم قلمك وأشكر اهتمامك وحرصك

وياليت تعلمني بنفس المثال بالطريقة التي ذكرتها أو طريقة المصفوفه(Array)لأني لا أعرف استخدامها.

وأكرر لك شكري وامتناني.

دمت بـ ود

#7

أماااا آن لهذا السؤال من إجااااابه!!

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

هذي مشاركتي من خمس سنوات وطرحت هذا السؤال فيه وكان هناك اقتراحات لعمل لذلك ولكنها غير منطقيه بعضها إضافة لعدم وجود مثال أو توضيح بالكود لذلك.

التأكد من أن حقول سجل غير منظم لم تتغير

فلا تبخلون علي بالإجابة وفقكم الله

#8

أخي الكريم لست ضليعا بالتعامل مع أكسس و لكن اطلع على هذا الدرس من شركة مايكروسوفت عله يفيدك فيما تسأل عنه

HOW TO: Automatically Detect If a Form Is Being Edited in Access 2000

%20فداك%20يا%20رسول%20الله.gif
#9

مشكور اخوي mkmmoon

اطلعت على محتوى الرابط ولكنه للأسف لا يفي بالمطلوب

حيث يعيب الطريقة المستخدمة أن أمر dirty يفحص التغيير لمره واحده..أقصد أنه عندما تقوم بتغيير محتوى حقل يتم تفعيله ولكن عندما تقوم بإعادة محتوى الحقل لمحتواه الأصلي فإنه لا يكتشف أن الحقل كما هو ولم يتغير محتواه بل يعتبر الحقل تم تعديل محتواه.

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

أشكرك لاهتمامك وفقك الله

#10

بسم الله الرحمن الرحيم

صديقي العزيز

لقد فهمتك خطأ منذ البداية ولم أعرف ما تريده بالضبط ولكن في الآونة الأخيرة تقريباً أنني فهمت ماذا تريد

سامحك الله لقد أرفقت لي مثال بدون بيانات ففهمت من المثال أنك تريد فحص العناصر عند إدخال البيانات هل هي فارغة أم لاء .

عموماً لا يهمك خلك معي وأرجو أن أوفقت في مساعدتك..

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

اقتباس
سؤالي عن كيفية التأكد من أن الحقول في سجل غير منظم (UnBound) لم تتغير؟؟

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

هذا لا يهمنا فالسؤال ليس هذه إجابته ولكن له جزئية من السؤال وهو في سجل غير منظم (UnBound)

إجابة سؤالك .

أولاً : نعلن عن مصفوفتين الأولى باسم (ArryFld ) تحتوي قيم السجل الحالي والثانية (ArryTxt ) تحتوي قيم مربعات النصوص وذلك أعلى النموذج بعد السطر Option Compare Databas كما يلي

	  Dim ArryFld(6) As String 
	   Dim ArryTxt(6) As String

   Dim ArryFld(6) As String 
	   Dim ArryTxt(6) As String

ثانياً : نقوم بإنشاء دالة باسم OlDValue

Public Function OlDValue()
	   On Error Resume Next
	   Dim I As Integer
		  ArryFld(0) = rst("ID")
		  ArryFld(1) = rst("FName")
		  ArryFld(2) = rst("LastName")
		  ArryFld(3) = rst("Married")
		  ArryFld(4) = rst("Nationality")
		  ArryFld(5) = rst("Address")
		  ArryFld(6) = rst("Tel")

		  ArryTxt(0) = Me.TxtID.Value
		  ArryTxt(1) = Me.TxtFName.Value
		  ArryTxt(2) = Me.TxtLastName.Value
		  ArryTxt(3) = Me.Chackmarried.Value
		  ArryTxt(4) = Me.CboNationality.Value
		  ArryTxt(5) = Me.TxtAddress.Value
		  ArryTxt(6) = Me.TxtTel.Value

		  For I = 0 To 6
		  If ArryTxt(I) <> ArryFld(I) Then

		 GoTo Lin1

		  End If
		  Next I
		  Exit Function

   Lin1:

	   If MsgBox("لقد تم تحدبث البانات هل تريد التحديث", vbMsgBoxRight + vbYesNo + vbDefaultButton2, "") = vbNo Then
	   Else
	   Call UpDateRecord	
	   End If

   End Function

شرح الدالة :

أولا : نقوم بإسناد قيم السجل الحالي إلى المصفوفة كما يلي :

	  ArryFld(0) = rst("ID")
		  ArryFld(1) = rst("FName")
		  ArryFld(2) = rst("LastName")
		  ArryFld(3) = rst("Married")
		  ArryFld(4) = rst("Nationality")
		  ArryFld(5) = rst("Address")
		  ArryFld(6) = rst("Tel")

ثانياً : نقوم بإسناد قيم عناصر عرض البيانات على النموذج للمصفوفة الخاصة بقيم العناصر كما يلي :

 ArryTxt(0) = Me.TxtID.Value
		  ArryTxt(1) = Me.TxtFName.Value
		  ArryTxt(2) = Me.TxtLastName.Value
		  ArryTxt(3) = Me.Chackmarried.Value
		  ArryTxt(4) = Me.CboNationality.Value
		  ArryTxt(5) = Me.TxtAddress.Value
		  ArryTxt(6) = Me.TxtTel.Value

هي أعمدة الجدول وعناصر العرض فلو تم تغيير قيمة أي عنصر على النموذج فحتماً ستختلف القيم وذلك كما يلي :

  For I = 0 To 6

		  If ArryTxt(I) <> ArryFld(I) Then

رابعاً : إذا لم تتساوى القيم في المصفوفتين نطلب من البرنامج الذهاب إلى السطر الذي يظهر رسالة للمستخدم تخبره أنه تم تعديل على البيانات وذلك بواسطة السطر التالي :

	  GoTo Lin1

وهنا تظهر رسالة تخبر المستخدم عن وجود بيانات تم تحديثها ولديه خيارين أما الرفض وفي هذه الحالة لن يطرأ على البيانات أي تعديل أو يوافق وهنا نستدعي كود تحديث البيانات والمسمى Call UpDateRecord

خامساً إذا تساوت القيم في المصفوفتين نطلب من البرنامج الاستمرار بالفحص والمقارنة إلى أن نتهي من عناصر المصفوفتين بواسطة السطرين التاليين :

	   Next I

		  Exit Function

وهنا ستقوم الدالة بفحص المصفوفتين سبع مرات ثم الخروج من الدالة إذا تساوت البيانات.

الأكواد كاملة على النموذج المسمى ADOForm

أيضاً هناك نموذج أخر باسم Form1 مصدره الجدول وعليه الدالة أيضاً

ملاحظة قيم الإختيار ChackBox تحفظ في الجدول على True – False بينما عند الضغط عليها في النموذج تأخذ القيم (0) (-1) وهنا ستختلف قيم المصفوفة حتى لو أعدة الإختيار لوضعه الطبيعي لذلك عالج هذه المشكلة بالكود التالي

في حدث ( بعد التحديث ) ضع أكواد كهذه

 

   If Chackmarried = 0 Then
   Chackmarried.Value = False
   Else
   Chackmarried.Value = True
   End If

عزيزي :

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

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

Chack_Data.rar

تم تعديل هذه المشاركة بواسطة مصلح الحريصي في 26 مايو 2008 في 20:49

#11

بسم الله الرحمن الرحيم

بارك الله فيكم اخواني

اخي مصلح شرح اكثر من رائع وكنت فعلا ابحث عن مثل هذا الكود

#12

استاااااااااااااااذي مصلح

سلمت أناملك الله يوفقك دنيا وآخره والله انك علمتني درس وكسبت معلومه منك ما تتوقع كيف سعادتي بهالفائده..الله ينفع بك وبعلمك ويكتبلك الأجر.......طبقت الكود بنفس الفكره وسويت اختبار للحقول جميعها بمقارنة الحقل بالجدول مع الحقل بالنموذج لكل الكمبو والتشك بوكس وكل العنااااصر راااااااااااااائع فكرة المصفوفه فعلا سهله وبشرحك الأكثر من رائع.

لكل دعوات من كل قلبي الله يجزاك بالخير ويسعدك ويوفقك.

لك خالص تحياتي استاذي الفاضل.

#13

أخي فلنتوخ

الحمد لله أننا وصلنا لما تريد

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

كلما في الأمر كود من سطرين والمشكلة ليست بتلك الصعوبة

وأنت تستاهل

لا تنسانا من الدعاء الله يبارك فيك

على فكرة نسيت أن أقول لك

ربما يقوم المستخدم بالتعديل في البيانات والإنتقال إلى السجل التالي أو السجل السابق أو إغلاق النموذج وفي هذه الحالة لن يقوم البرنامج بإختبار البيانات

لتلافي هذه المشكلة أستدع الدالة على ازرار التنقل وحدث إغلاق النموذج

تم تعديل هذه المشاركة بواسطة مصلح الحريصي في 28 مايو 2008 في 05:48

#14

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

وبالنسبه للملاحظات اللي ذكرتها لي..لا توصي حريص عامل حساب أمور كثير سواء ما ذكرته أخيرا أو سابقا من ناحية قيمة الـTrueوالـFalseفي الOptionsواستبدلتها بـ نعم ولا بالداتابيز.

شاكر اهتمامك وتنبيهك.

#15

بسم الله الرحمن الرحيم

تمت الإجابة على الموضوع

إدارة الفريق العربي للبرمجة

طبتم واهتديتم :)

===================================

إقرأ معي

رابط متجدد لكتاب أقرؤه فشاركني فيه

======

فضائح الرافضة ومخازيهم حين يكتب عنها أحد خصومهم فهذا شيء متوقع ،فإن كتب عنها أحدهم فهو شيء غير مألوف ، وإن كان الكاتب أحد مراجعهم وأخص خواصهم فهذا شيء متناهي الغرابة ، وإن علمت أن الكاتب قد قتل بعد نشر الكتاب فقد حان وقت قراءة الكتاب

الكتاب :

حسين الموسوي - لله تم للتاريخ ، كشف الأسرار وتبرئة الأئمة الأطهار

اضغط على الصورة لتحميل الكتاب

%E1%E1%E5%20%CB%E3%20%E1%E1%CA%C7%D1%ED%CE.jpg

-----------

كتب سابقة

سعد الدين الشاذلي - مذكرات حرب أكنتوبر

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…