![]() |
|
[VB.NET] مساعدة بخصوص كود الحفظ - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183) +--- الموضوع : [VB.NET] مساعدة بخصوص كود الحفظ (/showthread.php?tid=26752) الصفحات:
1
2
|
RE: مساعدة بخصوص كود الحفظ - ay.alhaj - 03-10-18 شكرا لك اخي الفاضل على ردك تم حل المشكلة الخطأ كان هو اني بدل ما اضع نوع الكنترول picture box وضعته image طبعا سهوا وانت نتبهتي فلك جزير الشكر على جهدك يبقى استفسار بسيط هل يمكن وضع function في الكلاس بدل الموديول لاني وضعته في الكلاس لكن لم ينجح ظهر خطأ يخبرني اني لا استطيع استخدام هذا الفنكشن في الكلاس سؤال اخر ما فائدة هذا السطر الموجو في الفنكشن <Runtime.CompilerServices.Extension()> RE: مساعدة بخصوص كود الحفظ - عبدالله الدوسري - 03-10-18 العفو أخي ay.alhaj الـ Function ـ ( FindAllChildren ) تستخدم الـ Attribute <Runtime.CompilerServices.Extension()> ماذا يعني هذا الكلام ؟ الـ Extension هي ميزة يمكنك إستخدامها مع أي كائن من كائنات الـ NET. وهي موجودة إبتداءً من الـ NET Framework 3.5. ما فائدتها وكيف يتم إستخدامها ؟ سأشرح لك الموضوع بمثال لتتضح الفكرة قليلاً : تخيل أن لديك ( على سبيل المثال ) كنترول من نوع PictureBox , ( مثلاً وليس حصراً على الكنترولات , بل مع أي كائن كان , حتى مع الـ Object ) أنت الآن تريد أن تظيف Sub أو Function جديدة على هذا الكائن ( أمر ليس من الأوامر الإفتراضية الخاصة بهذا الكائن , أمر خاص بك أنت ). مثلاً : أريد أن أقوم بإنشاء Sub يقوم بحفظ الصورة الموجودة في الـ PictureBox في القرص الصلب في مكان محدد (أو حتى في قاعدة البيانات ) وبعض الأمور التي تخصك قبل حفظ الصورة. المعتاد أنك ستقوم بإستدعاء هذا الأمر وترسل له الـ PictureBox أو الصورة ليقوم بالعمل المطلوب. دعنا نسمي الـ Sub بـ ( SaveMyPhoto ) كود : Public Sub SaveMyPhoto(ByVal PicBox As PictureBox)المعتاد أنك ستنادي هذا الأمر بهذة الطريقة : كود : SaveMyPhoto(Me.PictureBox1)لكن بإستخدام الـ Extension مع الـ Sub الذي قمنا بإنشائة ( SaveMyPhoto ) كود : <System.Runtime.CompilerServices.Extension()>الآن يمكنك إستدعاء الأمر هكذا : كود : Me.PictureBox1.SaveMyPhoto()لاحظ : أصبح الأمر ( SaveMyPhoto ) أحد أوامر الكائن الـ PictureBox , وأي كائن PictureBox في كامل المشروع أصبح يمتلك هذا الأمر الجديد الـ Extension يجب أن تكون في Module ولا تقبل أن تكون في مكان آخر !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! لماذا ؟كما شرحت في الأعلى أن كل الـ PictureBox في المشروع أصبحوا يمتلكون هذا الأمر , لذلك لا يمكن جعلها في كلاس لأنها عامة لأي كائن في المشروع من نوع PictureBox مثال آخر : وهو الموجود لديك الآن ( الـ Function ـ FindAllChildren ) وظيفتها إرجاع كل الأبناء تحت كنترول معين نحن نحددة كود : <System.Runtime.CompilerServices.Extension()>لاحظ يوجد parameter باسم StartingContainer نوعة Control هذا يعني أن أي كائن من نوع Control ستجد فية هذة الوظيفة الجديدة , Control يشمل كل الأدوات التي تظهر على الشاشة من ضمنها النافذة كذلك Control عام أكثر بإمكانك تغيير Control وإستخدام شيء محدد , مثلاً Panel أو Button نوع الناتج من الوظيفة هو List(Of System.Windows.Forms.Control) : o يمكنك تغييرة إلى أي نوع أنت تحتاج إلية طبعاً كما هو معروف. الـ parameter الأول حصرياً خاص بتحديد نوع الكائن الذي سيتأثر بهذة الوظيفة بإمكانك إضافة parameter آخر ( اسميتة Args ) وهو لتمرير أي بيانات لهذة الوظيفة كود : <System.Runtime.CompilerServices.Extension()>وسيصبح الكود للتنفيذ هكذا : كود : Me.FindAllChildren("My Args")بإمكان تغيير النوع إلى String وستجد هذة الوظيفة في كل متغير من نوع String كود : <System.Runtime.CompilerServices.Extension()>وتستخدم هكذا : كود : Me.TextBox1.Text.ShowMyTextأو هكذا : كود : Dim MyName As String = "Abdulla Aldosari"الـ Extension تدعم هذة الطرق فقط :
تحياتي . RE: مساعدة بخصوص كود الحفظ - ay.alhaj - 03-10-18 جزاك الله كل خير شكرا على الشرح المفصل الان وصلت الفكرة انا كنت فاهم وظيفة الفنكشن بس ما كنت فاهم السطر الاول منه والان وصلت المعلومةالمعلومة بشكل كامل اشكر جزيل الشكر على هذا الشرح الاكثر من رائع انا الهدف من هذا كله اني اعمل كلاس للحفظ والتعديل والحذف يكون لكل المشروع بدل ما اكتب اكواد الحفظ والتعديل والحذف في كل شاشة استدعي اجراء من الكلاس واقوم بتمرير باراميتر له وهو الجدول المراد الحفظ او التعديل او الحذف منه مع الشرط واضافة التكست بوكس عن طريق الفنكش تم التطبيق بنجاح والفضل لله اولا ثم لك لكن يبقى لدي استفسار بسيط من حيث الطريقة ايهما افضل استخدم الطريقة التي ذكرتها هذه اي بمعنى اجراء حفظ واحد لكل المشروع ام الافضل لكل شاشة اكتب فيها كود الحفظ الخاص بها ايهما افضل RE: مساعدة بخصوص كود الحفظ - عبدالله الدوسري - 03-10-18 الأمر يعتمد عليك ، انت تحدد ايهما أفضل بالنسبة لك. RE: مساعدة بخصوص كود الحفظ - ay.alhaj - 04-10-18 انا بالنسبة الي افضل الطريقة بالاجراءات الموجهة بس انا قصدي بالنسبة لسرعة تنفيذ الكود في اختلاف وفي حالة كان البرنامج متصل مع الشبكة وفي اكثر من نسخة للبرنامج وتم استدعاء كود الحفظ بنفس اللحظة هل يحدث تعارض ام لا RE: مساعدة بخصوص كود الحفظ - ay.alhaj - 04-10-18 شكرا لك اخي على مجهودك معي بس حبيت اعرف رأيك كمبرمج عندك خبرة RE: مساعدة بخصوص كود الحفظ - عبدالله الدوسري - 04-10-18 (04-10-18, 03:57 PM)ay.alhaj كتب : شكرا لك اخي على مجهودك معي بس حبيت اعرف رأيك كمبرمج عندك خبرة العفو أخي ay.alhaj (04-10-18, 12:19 AM)ay.alhaj كتب : انا بالنسبة الي افضل الطريقة بالاجراءات الموجهة لإعطائك فكرة عن ماذا أتحدث : تخيل ! قمت بعمل برنامج يعمل على الشبكة , ويقوم بإستخدامة أكثر من مستخدم . عبدالله ( مستخدم ) محمد ( مستخدم ) ( عبدالله ) قام بفتح البرنامج ثم قام بالبحث عن سجل موظف مثلاً , ثم فتح النافذة الخاصة بتعديل بيانات هذا الموظف (الآن عبدالله يقوم بتعديل البيانات ولكن , عبدالله جلس يشرب الشاي ويتبادل الحديث من شخص بجانبة ونسي النافذة مفتوحة ولم يكمل التعديل , لأنه مشغول , عندى ينتهي من شرب الشاي , سيقوم بالضغط على زر الحفظ ) ( محمد ) قام بفتح البرنامج ثم قام بالبحث عن سجل موظف مثلاً , ثم فتح النافذة الخاصة بتعديل بيانات هذا الموظف ( نفس الموظف الذي قام عبدالله بفتح نافذة التعديل له ) (الآن محمد يقوم بتعديل البيانات وإنتهى من التعديل وقام بالضغط على زر الحفظ ...... ولكن , عبدالله ما زال يشرب الشاي ويتبادل الحديث من شخص بجانبة ونسي النافذة مفتوحة ولم يكمل التعديل ) من فتح النافذة التعديل أول ؟ ( عبدالله ) لكن قام ( محمد ) بتعديل البيانات , والبيانات الآن في قاعدة البيانات تختلف عن المعروضة أمام ( عبدالله ) أعطني رأيك ؟ ماذا يسحدث في مثل هذة الحالة؟ الآن ( عبدالله ) إنتهى من شرب الشاي , ولكنه قام بتعديل بسيط فقط , ( ثم قام بالضغط على زر الحفظ ) كل الذي قام به محمد سيذهب ؟ أم ماذا تعتقد أنه سيحدث؟ سأقوم بعمل شرح سريع على هذا الأمر في موضوع آخر . وأخبرك برابط الموضوع , للفائدة العامة. RE: مساعدة بخصوص كود الحفظ - ay.alhaj - 04-10-18 (03-10-18, 09:32 AM)عبدالله الدوسري كتب :(03-10-18, 07:36 AM)ay.alhaj كتب : الامور شغالة مية بالمية (04-10-18, 07:49 PM)عبدالله الدوسري كتب :(04-10-18, 03:57 PM)ay.alhaj كتب : شكرا لك اخي على مجهودك معي بس حبيت اعرف رأيك كمبرمج عندك خبرة اولا شكرا على ردك ثانيا : ماذا تعني بـ الاجراءات الموجهة ؟ اقصد بذلك ان اقوم بعمل كلاس للحفظ واستدعيه في كل شاشة بدل من ان اقوم بعمل كود حفظ في كل شاشة هذا ما يسمى ب oop او الاجراءات الموجهة حسب فهمي لها كل الذي قام به [b]محمد سيذهب ؟ أم ماذا تعتقد أنه سيحدث؟[/b] طبعا سوف يذهب ويحفظ التعديل الجديد للمستخدم عبد الله الصراحة بدون ما اجيبلك كود التعديل هذه النقطة غابت عن بالي لكن السؤال ما الحل لها على حسب اعتقادي ممكن مثلا انه خاصية التعديل نخليها تعمل بوقت معين مثلا تم التعديل الان من قبل محمد حين يرجع عبد الله ليكمل التعديل يعطيه البرنامج رسالة انه تم التعديل قبل دقيقة على الملف ولا يمكن التعديل عليه الان الا بعد مثلا ساعة وبهذا نتخطى المشكلة ولا اعرف ان كان لديك حل افضل من ذلك ارجو التوضيح RE: مساعدة بخصوص كود الحفظ - عبدالله الدوسري - 04-10-18 OOP : البرمجة الشيئية , وليس الموجهة لو ذكرت OOP من البداية !! ( لأن الترجمة إلى العربية أحياناً تتوه القارئ ) بخصوص الحل : فكرة الحل موجودة منذ سنة 1677 لكن في قواعد البيانات تسمى بـ الـ timestamping ليس كل قواعد البيانات تحتوي على هذا النوع من البيانات بعض قواعد البيانات تحتاج أن تقوم أنت بنفسك بعمل الـ timestamping قواعد بيانات MS SQL Server تحتوي على نوع بيانات يسمى timestamp دار حديث بين مبرمجين وقالوا أن مايكروسوفت أخطائت في التسمية ويجب أن تعادة تسميتة ليكون rowversion بدلاً من timestamp حتى لا يسيء أحد فهم خواص هذا النوع وبالفعل أعتمد الاسم rowversion , وسيصح الاسم timestamp مهمل في المستقبل , ولكن لغاية الآن يتم إستخدام timestamp فكرتة بسيطة : كل جدول تريدة أن يطبق هذة الفكرة تظيف حقل جديد في الجدول من نوع timestamp ( في قواعد SQL Server ) ولا يهم اسم الحقل نهايئاً لأنها قاعدة البيانات تعرف أنه يوجد حقل من هذا النوع موجود في الجدول ويتم التعامل معة تلقائياً من قبل قاعدة البيانات. فكرة : أول ما تقوم بإدراج سجل جديد : هذا الحقل يأخذ رقم عبارة عن Bytes ومن خصائصة أنه فريد لا يشبهه أحد. ( قاعدة البيانات هي من تعطي هذا الرقم بشكل تلقائي بدون تدخل منك , ويتم عند إدراج جديد أو التعديل ) عند التعديل على البيانات تتغير القيمة إلى رقم جديد ( تلقائياً ), ( بالإمكان تحويلة إلى تاريخ ) , كما ذكرت في الأعلى أن البعض أساء فهم الموضوع , لأنه لا علاقة له بالتاريخ . أي عملية تعديل على البيانات تقوم بإرسال هذا الرقم ويجب أن يتطابق مع الموجود في السجل إذا أرسلت الرقم ولم يتطابق مع الموجود في قاعدة البيانات يعني أنه قام أحد بالتعديل علية منذ آخر مرة أنت جلب فيها البيانات هذة هي الفكرة بشكل سريع . قواعد بيانات MS Access لا تحتوي على نوع timestamp لذلك يجب على المبرمج إنشاء حقل تاريخ ويسمية ما يشاء ويقوم بعمل ( macro ) أو ( trigger ) وظيفة يقوم بتغيير هذا الحقل كلما تم التعديل على السجل وكل عملية تعديل يسأل عن التاريخ الموجود في السجل على النافذة ويقارنة بالتاريخ الموجود في قاعدة البيانات . لها طريقة معينة ولكن سهلة . تحياتي RE: مساعدة بخصوص كود الحفظ - ay.alhaj - 04-10-18 شكرا لك اخي الفاضل وياريت لو في شرح فيديو تطبيق عملي لهذه الخطوة حتى تتضح اكثر وجزاك الله كل خير |